本文基于Windows OS
准备:
1.本地Docker环境
2.注册公司内部 Docker hub,并创建仓库
messiah_server 是项目名称,具体版本管理是靠命名Tag来实现的
开始制作镜像:
代码脚本在tools/dockers/build_server
下
在制作镜像时,代码结构、生成脚本等可能需要反复调整。如果每次改动都从头编译,会比较耗时。尤其是在网络波动时,安装mongo、python基础库会比较慢,有时还会失败,不得不从头编译,费时费力,因此采用了多阶段编译
。
1.基础镜像(此镜像的内容基本不会改变,通过Dockerfile0编译)
docker build -f Dockerfile0 -t messiah_server:local .
这部分的镜像已经制作完成,可以在Docker Hub上pull下来,
docker pull dockerhub.nie.netease.com/<user>/messiah_server:remote
docker pull dockerhub.nie.netease.com/<user>/messiah_server:local
上面的是超哥的,下面是我的,二这选其一即可。
2.项目镜像(通过Dockerfile1编译)
项目镜像需要将容器控制脚本、配置生成、项目代码等打包到镜像中,因此需要先将代码check
到当前目录下(server
目录)。里面包含了engine
、bin
、etc
等。
执行before_build.bat文件,执行之后会在目录下生成一个Server目录。
Dockerfile1中 From后面加的就是基础镜像,它可以是有仓库地址的镜像,也可以是本地刚生成的镜像,比如下面的dockerhub.nie.netease.com/<user>/messiah_server:local 改成1.制作的 messiah_server:local,它就会使用本地镜像了。
From docker pull dockerhub.nie.netease.com/<user>/messiah_server:local
接下来执行Dockerfile1
docker build -f Dockerfile1 -t dockerhub.nie.netease.com/<user>/messiah_server:v2 .
然后推送到自己的DockerHub
docker push dockerhub.nie.netease.com/<user>/messiah_server:v2
踩过的坑总结:
1.不要在本地开启过多的Docker容器,不然会卡死。
2.尽量以管理员身份运行系统级应用。
3.编译镜像的时候,尽量带上地址,tag进行命名,不然推送的时候需要重新打Tag。
打Tag方法:
①登录 docker login http://xxxxx.com
②登录私有hub创建项目 例如项目叫:abc-dev
③给镜像打tag
docker tag 2e25d8496557 xxxxx.com/abc-dev/arc:1334
2e25d8496557:IMAGE ID,可以用docker images 查看
xxxxx.com:私有hub域名
abc-dev:项目名称
arc:镜像名称
1334:镜像版本号
④推送
docker push xxxxx.com/abc-dev/arc:1334
4.linux下执行before_build.sh windows下执行before_build.bat
5.尽量使用mango3.6,4.0,不然很有可能出现如下报错
6.Svn安装command line client tools
默认情况下安装svn是不安装 command line client tools ,解决就是重新打开安装svn的.exe文件。在进行安装的时候选择Modify,到下面图片显示的地方,更改为容许安装。
如下图:
7.拉取别人的镜像一定要有权限!!!!