####Docker是一个轻量级的基于Linux的应用容器引擎,可以实现在服务端的分布式部署。
####一、首先安装Docker,在Docker的官网有很详细的步骤,根据官网提供的安装的步骤可以快速的实现docker的本地安装,这里就不再赘述。
####二、要使用Docker部署Golang有两种思路。
####1、下载linux镜像,利用linux镜像构建容器。相当于在本地启动另外一个linux系统,然后在linux系统中安装golang和配置golang的环境。
####2、直接下载Docker官方的golang镜像,进行容器的创建。
####这两种都可以实现,他们的区别只是思路1是将golang安装在容器中,思路2是将golang安装在镜像中。具体方法如下:
####思路1:
####(1)这里使用的是ubuntu16.04版本
####下载镜像`docker pull ubuntu:16.04`或者`docker ubuntu`目前docker官方ubuntu最新的版本是16.04
####下载完成后
####(2)创建容器`docker run --name ContainerName -i -t /bin/bash` --name ContainerName是指定容器的名字可以自己指定,如果不写系统会自行指定一个名字。这条命令是创建容器的命令,所以每使用一次都会创建一个新的容器。使用`docker ps -a`可以查看创建的所有容器。使用`docker start ContainerName -i`可以启动之前已经创建好的容器。不过有一点要注意,就是官方的镜像提供的是最简洁的ubuntu系统要安装需要先`apt-get update`。
####思路2:
####(1)直接下载golang的镜像。这里docker也提供了官方Golang的镜像`docker pull golang`也可以指定版本,如果不指定一般都是golang的最新版本。
####(2)创建容器`docker run -it --rm --name ContainerName golang` --name ContainerName是指定容器的名字可以自己指定,如果不写系统会自行指定一个名字。
####(3)使用`docker exec -i -t ContainerName /bin/bash`可以进入到已经创建好的容器中,如果容器没有运行要使用`docker start -i ContainerName`。golang是已经安装好的。可以直接使用,如果要使用beego还得再安装。不过一样的先`apt-get update`。
####到这里貌似Docker部署Golang已经完成了。
####虽然golang已经在容器里面了,也是可以正常的运行了,但是使用`docker start ContainerName -i`或者`docker start -i ContainerName /bin/bash`只是启动了一个容器的伪终端与宿主主机的终端进行绑定,平常使用的IDE是没法在这里用的,也就是说只能在命令行里进行编程。
####为了可以让容器里的代码可以在IDE里编写这里就需要用到Docker的数据卷。数据卷的主要功能是将宿主主机的文件与容器里的文件绑定,当其中一方的文件内容改变时容器另一方的内容也随之改变。按照这样的思路,我们可以在我们的本地随便指定一个文件路径用来存放我们的项目,与容器中/go/src绑定,这样我们就可以在本地编写然后在容器里运行了。
####主要实现方法,数据卷一般是在容器创建的时候绑定的。
####思路1添加数据卷`docker run -tdi -v ~/localpath:/containerpath --name ContainerName ubuntu`这里golang还没有安装,所以在进入容器完成golang安装后设置gopath要与绑定的文件路径一致。
####思路2添加数据卷`docker run -tdi -v ~/localpath:/go/src --name Container golang`
####使用docker部署golang在遇到需要golang版本升级的时候就可以创建一个新的容器或者下载新的镜像而不用在本地先卸载就的golang再进行新的安装了。
####有志同道合的朋友可以给我的个人邮箱yqh525@163.com发邮件,可以一起研究探讨,有不足的地方也请批评指正。
####ps:`docker start -i ContrainerName`-i让容器的标准输入保持打开,如果只让容器在后台运行不需要添加-i,使用`docker exec -i -t ContainerName /bin/bash`可以进入,退出后容器不关闭。如果是添加-i直接进入容器,exit退出后容器也随之关闭。