前言
Github传送门
最近回忆起了在学校那会儿趣事:刚开始上数据库原理课程,一开始装Microsoft SQL Server,全班同学都在吐槽,怨声载道——这个说数据库咋启动不了,那个说数据库咋卸载不干净,个个焦头烂额,实在是好一番风景。唉,那时候就在想,要是有一个类似于软件管家的东西托管Microsoft SQL Server,让我们一键安装/卸载,可不就好了。
进入工业界,接触了运维方面的知识,才了解到docker的存在。不同于当年常用的虚拟机软件(VMWare WorkStation),docker并未对操作系统的硬件支撑做虚拟化,只是操作系统的进程,但却模拟了一个操作系统的环境,因此相对于虚拟机而言,docker更加轻量。轻量的运行环境意味着基于docker的部署,在管理与调度上会更加容易。看,kubernetes!
再回到我们的学习生活,拿MySQL为例吧——有了docker,安装卸载MySQL,就会变得无比容易。首先docker pull mysql
;而后整理一下配置——通过-v
映射数据在本地的存储路径,通过-p
暴露出来mysql容器的端口,通过-e
设置MySQL密码等环境变量;之后docker run
带上上面的设置,我们的MySQL就启动了!要彻底卸载的话,只需要三行命令:docker stop ${MySQL容器ID}
、docker rm ${MySQL容器ID}
与docker image rm ${MySQL镜像ID}
,就ok了,是不是EZPZ?
正好,docker是基于Golang编写。因此本期从零单排,我们就用Golang来挑战一下如何与docker交互吧~
编写Golang程序部署MySQL
首先,我们研究一下相关的技术栈:官方提供的Golang客户端库docker client为Golang与docker间搭建了桥梁,其实质是对docker engine api的抽象;而docker engine api实质则是一个HTTP后端,是对docker内部镜像与容器管理功能的抽象。
通过docker client库,我们只需关心相关的参数输入。库中的方法会自动拼装参数,发送至docker engine api,从而实现交互。docker client的一些小例子,可以参考这里。
接下来,我们必须研究一下,要部署MySQL容器,需要有哪些步骤: