最近在做CI持续集成环境的容器化,其中一个工作是:在容器中构建容器镜像。
对于这个需求,网上有一些 Docker in Docker 的方法,具体需要修改宿主机的配置。这种方式在单机环境下、对安全要求不高的情况下可以实施,但是在Kubernetes 集群中、以及安全要求高的情况下可能存在问题和风险。
其实,可以通过下述工作变通的实现这个功能:
1. 建立一*立的 Docker 服务器
假定 IP 为:192.168.1.10;
该服务器的 docker 加参数 -H tcp://192.168.1.10:2376 运行,开通 REST API,专门提供给容器使用,用于构建容器镜像;
2. Docker 容器执行 docker 命令时加 -H 参数
如:docker -H tcp://192.168.1.10:2376 build -f Dockerfile -t test .
这样就可以了:)
加了这个参数后,Dockerfile 里的命令都按照我们设想的运行。比如:COPY,会把容器内的文件COPY 到制作好的镜像里。而镜像储存在 192.168.1.10上;最后可以用 docker -H tcp://192.168.1.10:2376 push 把做好的镜像推送到公司内网镜像服务器里。