什么时候需要用docker部署
当服务器上没有go环境,又不想配置的时候,可以通过拉取go相关的镜像,运行项目
当然你可以通过本地打包,上传至服务器,直接运行二进制文件Go云服务器部署项目
部署
在项目目录下创建 Dockerfile 文件
powershell
FROM centos:7
ENV MYPATH /workspace/recruit // 当你刚进入容器时所处的路径,建议跟下面-v 参数对应
WORKDIR $MYPATH
RUN yum -y update \
&& yum -y install vim \
&& yum -y install git \
&& yum install -y gcc-c++ \
&& yum -y install wget \
&& wget -P /root/ https://dl.google.com/go/go1.20.linux-amd64.tar.gz \
&& tar -zxvf /root/go1.20.linux-amd64.tar.gz -C /usr/local \
&& echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile \
&& source /etc/profile && go version \
&& echo "source /etc/profile" >> /root/.bashrc \
&& go env -w GOPROXY=https://goproxy.cn,direct \
&& go env -w GO111MODULE=on \
进入 Dockerfile 所处的项目目录执行
powershell
docker build -f Dockerfile -t recruit:latest .
-t
为镜像名称以及对应版本,可以根据项目进行修改
如果执行成功,此时通过 docker images 就能查看到刚刚生成的镜像
下面需要让这个镜像跑起来
powershell
docker run -it -d -p 8181:8181 -v /root/workspace/recruit/:/workspace/recruit/ --name recruit recruit:latest /bin/bash
-v
参数挂载目录,刚学docker的同学请注意 ,:前为服务器上你的项目路径,:后为在docker容器中指定的路径(自己指定,建议跟 ENV MYPATH 参数保持一致)
进入容器
powershell
docker exec -it 容器id /bin/bash
进入项目挂载的目录
生成可执行文件
powershell
go build -o main
后台运行 main 程序
powershell
nohup ./main > start.log 2>&1 &
可以为执行文件编写一个脚本,后面直接运行脚本即可
powershell
vim update.sh
git pull https://github.com/muyixiaoxi/recruit.git develop # 修改为自己的仓库地址
go build -o main
kill -9 "$(pgrep -f main)" # 杀死上次执行的进程
chmod +x main
nohup ./main -c config.yaml > start.log 2>&1 &
echo "ok"
运行脚本命令
powershell
sh update.sh
后面更新项目时,进入容器,执行 sh update.sh。
也可以把进入容器的命令也添加在脚本中,这样不需要再进入容器 ,亲测无效