本文记录golang项目的部署流程,需要有一定的go和docker的基础知识。
Dockerfile方式
步骤
- 新建目录结构如下
-
deploy
-
Dockerfile
- app
- main
-
script
- build.sh
-
-
首先打包已经写好的go程序
# 设置编译时的环境 set GOARCH=amd64 #amd64处理器的程序 set GOOS=linux #linux下的可执行文件 go build main.go #go打包命令
-
把打包好的
main
文件放在app目录下,接下来编写运行脚本build.sh
放入script目录下#!/usr/bin/env bash cd /go/src/app/ && chmod -R 777 main && nohup ./main >test.log 2>&1 #执行main文件
-
编写
Dockerfile
文件FROM golang #设置基础镜像 WORKDIR /go/src #设置工作目录 COPY . . #复制当前目录下的文件到工作目录 EXPOSE 8000 #暴露端口(设置为自己程序运行时占用的端口) CMD ["/bin/bash","/go/src/script/build.sh"] #执行运行脚本
-
全部都完成后,把deploy目录打包上传至服务器,然后cd进入该目录打包镜像
docker build -t test-goweb .
-
等待执行结束后查看镜像
[root@izbp109k5j3dul0ejalpf5z deploy]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test-goweb latest e7e271e3e4be 13 seconds ago 843MB mysql latest 30f937e841c8 11 days ago 541MB golang latest 7e5e8028e8ec 2 weeks ago 810MB tomcat latest d03312117bb0 2 weeks ago 647MB
可以看见已经有test-goweb这个镜像了
-
然后就是启动容器了
[root@izbp109k5j3dul0ejalpf5z deploy]# docker run -d -p 8000:8000 --name goweb test-goweb c4124d4947a21704f0f47654beaaf12efdfedd83d0df57052318f20b3a576151
启动成功后直接访问就OK了。
不使用Dockerfile
一样先在goland中打包项目到
main
文件中-
编写脚本
build.sh
,最好在linux下编写,win下编写上传之后需要转换格式#如果之前部署过这个项目,会出现端口占用,需要杀死之前的进程 go_id=`ps -ef|grep "./app" |grep -v "grep" | awk '{print $2}'` if [ -z "$go_id" ]; then echo "[go pid not found]" else kill -9 $go_id echo "killed $go_id" fi echo "clean old file" rm -rf app rm -rf app.log if [ -f main ]; then echo "strat new process" mv main app chmod -R 777 edu-app nohup ./app >app.log 2>&1 & else echo "app file not found,qiut" fi
-
上传至服务器,执行命令就部署成功了。
[root@lanni edu-app]# ls build.sh main [root@lanni edu-app]# sh build.sh [root@lanni edu-app]# ls build.sh app app.log
有疑问加站长微信联系(非本文作者)