docker 运行golang的简单方法,免维护镜像

golang 编写的可执行程序, 几乎不依赖环境,可以随意迁移。

作为服务来运行,可以注册到 rc 或者 systemd 或者 使用supervisord 等第三方程序守护 等等。。

我这里 使用docker来 处理,因为宿主机本身已经安装了docker 所有服务都docker运行,但是因为golang 程序很多,每一个小程序都维护一个docker镜像 反而会增加工作量。

这里简单来说一下。

golang的编译

我这里用alpine镜像 在编译golang的时候 注意添加 CGO_ENABLED=0,Makefile如下

1
2
3
4
5
6
.PHONY: buildandrun
BIN_FILE=XXXXXX

buildandrun:
		@CGO_ENABLED=0 go build -o "${BIN_FILE}" ${BIN_FILE}.go
		#./"${BIN_FILE}"

如果使用centos debian之类的镜像不需要额外处理

上传编译后的可执行文件

1
2
3
4
5
apt install sshpass
ssh root@10.1.1.111 # 先登录一次 然后推出
make
sshpass -p 密码 scp -P 22 ./可执行文件root@10.1.1.111:/fish/opt/serv-bin/
sshpass -p 密码  scp -P 22 ./*.json root@10.1.1.111:/fish/opt/serv-bin/

创建docker

在服务器上运行

1
2
3
4
tempName=fish-send-code
docker run -itd  --name ${tempName}  --hostname ${tempName}   --network host  --privileged=true --restart=always   \
    -v /fish/opt/serv-bin/:/fish/opt/serv-bin/   \
    alpine:3.17.2   /fish/opt/serv-bin/${tempName}

查看日志

1
docker logs -f  ${tempName} 
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计