🐳
Dockerfileに追記してDooD可能にする
TL;DR
/var/run/docker.sock
をマウントして、docker-ce-cli
をインストールして、ホストのdocker
グループに所属するユーザーで触ればいい
背景
Docker outside of docker
、通称dood
したくなることがあった。でも、すでにalmalinux-9
をベースイメージにすることを決めていたので、よくあるようにdocker公式イメージにするわけにはいかなかった。
例
$ ls
Dockerfile
$ docker image build \
--build-arg UID=`id -u` \
--build-arg GID=`id -g` \
--build-arg DOCKERGID=`getent group docker | cut -d: -f3` \
-t dood-sample
.
...
$ docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
dood-sample \
docker run --rm -it hello-world
...
Hello from Docker!
...
Dockerfile
FROM mirror.gcr.io/almalinux/9-base
...
# Localユーザーを追加
ARG USERNAME=developer
ARG GROUPNAME=${USERNAME}
ARG UID=1000
ARG GID=1000
RUN userdel -r $(id -un $UID) || true && \
groupadd -g ${GID} ${GROUPNAME} && \
useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}
# Docker cliをインストール
RUN dnf -y install dnf-plugins-core \
&& dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
&& dnf install -y docker-ce-cli \
&& dnf clean all
# ホストの`docker`グループに参加する必要が
ARG DOCKERGID
RUN groupdel docker || true && \
groupdel $(getent group ${DOCKERGID} | cut -d: -f1) || true && \
groupadd -g ${DOCKERGID} docker && \
usermod -aG docker ${USERNAME}
...
Discussion