404 字
2 分钟
DinD在docker容器跑docker
DinD 也就是 Docker-in-Docker,容器里单独跑一个 dockerd,它有自己的 /var/lib/docker、自己的镜像、容器、网络、volume。宿主机 Docker 只看到一个 dind 容器,看不到里面创建的子容器
services: dev: image: ubuntu:24.04 container_name: dev-env command: sleep infinity working_dir: /workspace volumes: - .:/workspace environment: DOCKER_HOST: tcp://docker:2375 depends_on: - docker
docker: image: docker:dind container_name: dev-docker privileged: true environment: DOCKER_TLS_CERTDIR: "" volumes: - dind-data:/var/lib/docker
volumes: dind-data:进入容器运行
apt updateapt install -y docker.io docker-compose-plugin
docker psdocker run --rm hello-worlddocker
最佳
示例目录
dev-dind/├── docker-compose.yml├── Dockerfile└── ssh/ └── authorized_keys生成ssh密钥对
ssh-keygen -t ed25519 -C "dev-container"复制密钥
mkdir -p sshcp ~/.ssh/id_ed25519.pub ssh/authorized_keys创建dockerfile与docker-compose.yml
FROM docker:27-cli AS docker-cli
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
ENV DOCKER_HOST=tcp://dind:2375
RUN echo 'export DOCKER_HOST=tcp://dind:2375' > /etc/profile.d/docker-host.sh \ && echo 'export DOCKER_HOST=tcp://dind:2375' >> /home/dev/.bashrc \ && echo 'export DOCKER_HOST=tcp://dind:2375' >> /root/.bashrc
RUN apt-get update \ && apt-get install -y --no-install-recommends \ openssh-server \ bash \ git \ curl \ nano \ vim \ openjdk-21-jdk \ sudo \ ca-certificates \ && rm -rf /var/lib/apt/lists/*
COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/dockerCOPY --from=docker-cli /usr/local/libexec/docker/cli-plugins/docker-compose /usr/local/libexec/docker/cli-plugins/docker-compose
RUN chmod +x /usr/local/bin/docker \ && chmod +x /usr/local/libexec/docker/cli-plugins/docker-compose
RUN useradd -m -s /bin/bash dev \ && echo "dev ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN mkdir -p /run/sshd \ && mkdir -p /home/dev/.ssh \ && chown -R dev:dev /home/dev/.ssh \ && chmod 700 /home/dev/.ssh
RUN ssh-keygen -A
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config \ && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config \ && echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
WORKDIR /workspace
CMD ["/usr/sbin/sshd", "-D", "-e"]这里自行决定要不要java
services: dev: build: . container_name: dev-ssh ports: - "2222:22" volumes: - .:/workspace - ./ssh/authorized_keys:/home/dev/.ssh/authorized_keys:ro environment: DOCKER_HOST: tcp://dind:2375 depends_on: - dind networks: - devnet
dind: image: docker:27-dind container_name: dev-dind privileged: true environment: DOCKER_TLS_CERTDIR: "" volumes: - dind-data:/var/lib/docker networks: - devnet
volumes: dind-data:
networks: devnet:docker compose up -d --buildssh dev@127.0.0.1 -p 2222 DinD在docker容器跑docker
https://blog.inept.top/posts/dokcer-dind/