Docker部署go项目
首先我们把我们写的go项目通过Xftp传到服务器上面,或者通过git从Coding里面拉取一份 ,未来方便起见我是把我的所有的go项目都放在了/usr/local/goproject目录下面。
阿里云服务器安装git
首先在服务器上面安装git ,阿里云服务器安装git很简单
yum install git #安装git
git version #查看Git的版本
通过Dockerfile文件打包镜像
git安装完成,代码放在服务器上面之后,我们就可以通过代码中的Dockerfile文件构建一个镜像
首先把目录切换到Dockerfile所在的目录下面,直接执行下面的命令
docker build -f Dockerfile -t 镜像名 .
值得一提的是,Dockerfile文件官方推荐的名字是Dockerfile,如果是Dockerfile的话,我们可以省略-f参数 ,另外,后面的 . 是一定不能少的
当看到下方的Successfully 就代表成功构建了一个镜像,有了镜像,我们就可以通过镜像启动容器了,接下来我们详细看一下我们的Dockerfile文件
FROM golang:alpine
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64\
GOPROXY=https://goproxy.cn
# 设置/usr/local/goproject,进入容器就会直接进入到这个目录下,而不是进入到默认根目录下面
WORKDIR /usr/local/goproject
# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod tidy
# 将代码复制到容器中
COPY . .
通过镜像运行容器
docker run -it -v /usr/local/goproject:/usr/local/goproject -v /etc/localtime:/etc/localtime -p 8080:8080 --cap-add SYS_TIME --name ding_1.0 ding_1.0 /bin/sh
其中 -v 是挂载,挂载就是把服务器宿主机和容器中的保持一致,我们容器里面有一个项目的代码,服务器宿主机上面也有一份代码,应该保持一致,这样的话,我们改变其中一个地方的代码,另外一个地方的代码也会随之改变。
第一个/usr/local/goproject 是我们服务器宿主机放golang代码的地方,后面第二个/usr/local/goproject 是我们容器中放代码的地方,为了方便起见,我把目录都起得一样。后面的/etc/localtime也是一样,这个是为了让我们的容器的时间和服务器宿主机的时间保持一致。
-p是端口映射,我们的阿里云服务器一定要开放8080端口
-cap-add SYS_TIME 是赋予了容器可以修改时间的权限
这样,我们就启动了一个容器,现在的话,我们直接进入到容器内部
docker exec -it ding1.0 sh #注意我们此处不能使用bash,因为我们使用的基础镜像是golang:alpine
可以看到,我们进入容器的默认位置就在/usr/local/goproject中,这是因为我们设置镜像的时候,我们的workdir就是/usr/local/goproject
我们进入到项目的目录下面,可以看到这就是我们的代码
我们可以看到main.go 文件,我们可以直接编译main.go
go build -o ding main.go# -o 参数可以让我们制定编译成具体的名字,而不是编译成main
当编译完成之后,我们就可以看到我们的目录下面有一个绿色的ding文件,这个文件就是可以直接运行的二进制文件
现在我们来运行这个文件
nohup /usr/local/goproject/ding_server/ding> start.log 2>&1 &
# nohup表示不挂断地运行命令,也就是你即便关掉终端,依然不会终止
# > start.log 将结果输出到start.log中
后面的 2>&1 & 我也不懂,把其他人的解读复制过来
# 2>&1,2是标准错误,1是标准输出,就是把错误结果打印出来,&1是就是对标准输出的引用
# 最后的&是是把该命令以后台的job的形式运行,可以通过jobs -l命令来查看当前的所有job
好了,至此我们的项目就已经部署好了,我们在本地的golang里面写好代码后,推送到Coding上面,经过管理员合并代码之后,我们就可以拉去新的代码了。
还记得吗?我们项目的代码再服务器的/usr/local/goproject下面,我们进到这个目录下面
然后进入项目目录ding-server下面,该目录下面是有一个隐藏的 .git文件,我们可以直接在此处拉取代码
git pull origin develop