β

build docker image in docker

nosa.me 138 阅读

我们在设计 docker 打包服务的时候遇到一个问题:如何在 docker 中 build docker image

这篇文章 中介绍使用

--privileged

参数可以在启动的 docker 中运行新的 docker,但是我发现 systemctl start docker 的时候报错:Failed to get D-Bus connection: No connection to service manager。

更简单的办法是把宿主机的  /var/run/docker.sock 挂载到 docker 的  /var/run/docker.sock,而且此时 docker 和宿主机共享 image,使得在 docker 中 build image 可以大大减小网络传输。

举个例子:
# docker run -t -v /var/run/docker.sock:/var/run/docker.sock -i 0d2e243b2977 /bin/bash
[root@b8bd7326f448 /]# mkdir test
[root@b8bd7326f448 /]# cd test
[root@b8bd7326f448 test]# cat Dockerfile
FROM 18573b5f8de7
ADD xxx /xxx
[root@b8bd7326f448 test]# touch xxx
[root@b8bd7326f448 test]# docker build .
Sending build context to Docker daemon  2.56 kB
Sending build context to Docker daemon
Step 0 : FROM 18573b5f8de7
—> 18573b5f8de7
Step 1 : ADD xxx /xxx
—> fa7718637b8a
Removing intermediate container 7d4615157279
Successfully built fa7718637b8a
[root@b8bd7326f448 test]# docker tag fa7718637b8a docker-in-docker-test
[root@b8bd7326f448 test]# docker push docker-in-docker-test
The push refers to a repository [10.19.26.15:5000/docker-in-docker-test] (len: 0)
fa7718637b8a: Image already exists
18573b5f8de7: Image successfully pushed
0f88a20aa712: Image successfully pushed
Digest:sha256:37eeddc4483dbad69136832dee304eb49cb186a1d80a20bb8a19431176340d9f

另外,我没找到如何在 Dockerfile 中定义「把宿主机的 /var/run/docker.sock 的挂载到 docker 的 /var/run/docker.sock」,但是如果使用 kubernetes,可以在 pod 配置文件中定义,比如:



apiVersion: v1
kind: Pod
metadata:
  name: docker-in-docker
  labels:
    name: docker-in-docker
spec:
  containers:
  - name: docker-in-docker
    image: 10.19.26.15:5000/docker-in-docker
    ports:
      - containerPort: 80
        hostPort: 80
    volumeMounts:
      - mountPath: "/var/run/docker.sock"
        name: "docker-socket"
  volumes:
    - name: "docker-socket"
      hostPath:
        path: "/var/run/docker.sock"

http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Related posts:

  1. kubernetes 搭建
作者:nosa.me
未来不会有sa
原文地址:build docker image in docker, 感谢原作者分享。

发表评论