我想在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