我想在Kubernetes的Docker中运行Docker

你知道,有时候我们会遇到想要使用Docker中的Docker的情况,比如使用CI或批处理等等。这种情况下,我们可以通过挂载与Docker守护进程通信的UNIX域套接字(/var/run/docker.sock)来解决。

比如说,如果想在java8的Docker镜像中使用docker命令,Dockerfile会是这样的。

FROM openjdk:8-jre

ENV DOCKER_CLIENT_VERSION=1.12.3
ENV DOCKER_API_VERSION=1.24
RUN curl -fsSL https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_CLIENT_VERSION}.tgz \
  | tar -xzC /usr/local/bin --strip=1 docker/docker

ADD bin/hoge /bin/hoge

EXPOSE 8080

CMD ["java", "-jar", "/bin/hoge"]

将Docker客户端放在嵌套的映像中。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hoge
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hoge
    spec:
      containers:
      - image: fuga/hoge:latest
        name: hoge
        volumeMounts:
          - mountPath: /var/run/docker.sock
            name: docker-sock-volume
            readOnly: true
    volumes:
      - name: docker-sock-volume
        hostPath:
        path: /var/run/docker.sock
        type: File

用这个方法,现在在DockerImage中可以顺利使用docker命令了。享受舒适的DockerLife,绝对不会出错。

参考一下

在Docker容器中使用docker命令(仅安装Docker客户端二进制文件的方法)- Qiita