Docker in Docker

前言

Docker in Docker,简称 dind,是一种在 docker 容器里面运行 docker 的方法,docker 官方镜像里面自己是有支持的,只不过 docker 现在的镜像是基于 Alpine Linux 的,我不太习惯,所以自己基于 ubuntu 20.04 做了一个 dind 镜像

重要

dind 方式运行容器的时候一定要加参数 --privileged,不然后台 docker 服务起不来

制作流程

运行 ubuntu:20.04 容器

docker pull ubuntu:20.04
docker run -itd --name ubuntu ubuntu:20.04 bash
docker exec -it ubuntu bash

容器内安装软件和配置

apt update
apt install docker.io systemd -y
# 安装完后确认一下是否已经安装 systemd,并确保/sbin/init为systemd的软链接
# ubuntu的docker.io只能通过systemd启动

修改内部的 docker 配置文件,这个很重要,不然无法启动容器

/etc/docker/daemon.json 文件内容

{
    "storage-driver": "vfs"
}

需要修改 storage-driver,因为 vfs 支持所有的 backing filesystem,所以直接就改成这个,因为第一层容器已经需要运行在 docker 下了,它的文件系统不一定是一样的

commit

docker commit ubuntu ubuntu-20.04-dind:0.0.0

build

Dockerfile

FROM ubuntu-20.04-dind:0.0.0
WORKDIR /root
# 启动systemd,这个是systemd的软链接
ENTRYPOINT ["/sbin/init"]

build

docker build -t ubuntu-20.04-dind:0.0.1

上传到服务器

这里以华为云为例,点击生成临时登录指令,在终端运行

01

docker tag ubuntu-20.04-dind:0.0.1 swr.cn-east-3.myhuaweicloud.com/zcteo/ubuntu-20.04-dind:0.0.1
docker push swr.cn-east-3.myhuaweicloud.com/zcteo/ubuntu-20.04-dind:0.0.1

下载地址

阿里云

docker pull registry.cn-chengdu.aliyuncs.com/zcteo/ubuntu-20.04-dind

华为云

docker pull swr.cn-east-3.myhuaweicloud.com/zcteo/ubuntu-20.04-dind