本文基于Windows OS

准备:

1.本地Docker环境

2.注册公司内部 Docker hub,并创建仓库

 

docker windows容器 v docker Windows容器镜像_Docker

messiah_server 是项目名称,具体版本管理是靠命名Tag来实现的

 

docker windows容器 v docker Windows容器镜像_Docker_02

开始制作镜像:

代码脚本在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目录)。里面包含了enginebinetc等。

执行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,不然很有可能出现如下报错

docker windows容器 v docker Windows容器镜像_docker windows容器 v_03

6.Svn安装command line client tools

默认情况下安装svn是不安装 command line client tools ,解决就是重新打开安装svn的.exe文件。在进行安装的时候选择Modify,到下面图片显示的地方,更改为容许安装。
如下图:

 

docker windows容器 v docker Windows容器镜像_Docker_04

7.拉取别人的镜像一定要有权限!!!!