记一次docker 使用的菜鸟心酸史
首先我有一个项目 A.go 需要将其打包成镜像使用,此时还需要一个Dockerfile。Dockerfile的书写如下
FROM Ubuntu
# 复制应用程序,下面需要根据自己应用情况进行替换
COPY A /home/work/
WORKDIR /home/work/
EXPOSE 1416
ENTRYPOINT ["./A"]
使用docker进行打包
go build -o A
sudo docker build ./ -t A_contain:latest
sudo docker push A_contain:latest
sudo docker run -it -p 1416:1416 A_contain:latest
坑点:
- docker push前要先登录自己docker的namespace,才能将镜像存放到云端。
- docker run 有很多参数
- -p 需要将docker内部的端口1416 映射到外部端口1416,这里的坑点是需要在Dockerfile中将端口expose
- -d 后台运行 可以加上sleep infinity 保证后台运行时不会停止
- -v 可以映射路径 同样需要 路径A:路径B这种形式
接下来就可以将docker镜像拷贝到任一个机器上运行了,已经脱离环境了。但我要部署的机器恰恰不能使用docker pull ,有网络隔离,于是采用scp命令将docker镜像发过去
- 将镜像保存成镜像文件:docker save -o A_contain.tar A_contain
- 将镜像.tar发送到另一台机器的/root/lib/路径下 :scp A_contain.tar root@12.34.56.78:/root/lib/
- 在另一台机器上将镜像提取处理:docker load --input A_contain.tar
此时就可以在这台机器上运行了,我又遇到一个问题,我需要将A一致运行,但是我一旦关闭ssh,A进程也被杀死,可以使用守护进程screen 或者supervisor 或者其他。目前解决方法是:
- docker run -d ... sleep infinity 后台运行后
- docker ps ,可查看进程
- docker attach 容器id ,进入容器 可进行程序内部交互,
- docker logs -f 容器id,可查看实时日志
如此以来 即使关闭ssh连接,也不会导致A挂掉
资料
版权声明:本文为m0_37896011原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。