jenkinsおじさんを触り始めてみました。dockerでjenkins利用した時にjenkins上でdocker build
したいなーと思っています。できるかとかはまだ試せていません。
一旦以下を参考にホストのdocker daemonを利用するjenkinsのDockerfileを作成しました。
Docker in Docker のベタープラクティス - Qiita
参考URL
ホストマシンのdocker daemonのソケット権限確認
今回ホストマシンのdocker daemonを利用するために/var/run/docker.sockを利用します。
アクセス権限が必要になるのでGIDを取得します。
$ls -lshn /var/run/docker.sock
0 lrwxr-xr-x 1 501 20 65B 7 29 11:23 /var/run/docker.sock -> /Users/uhoi/Library/Containers/com.docker.docker/Data/docker.sock
今回私の場合は501ですね。
dockerfile
DOCKER_GROUP_GID
に先ほど取得したホストのGIDを設定します。
FROM jenkins/jenkins:lts
# docker daemonの動いているホストのGIDを指定する
# docker run -v /var/run/docker.sock:/var/run/docker.sock で
# ホストのdocker daemonを共有する前提
ENV DOCKER_GROUP_GID 501
USER root
# docker のバイナリをinstall
RUN wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz
RUN tar -xvf docker-18.03.1-ce.tgz
RUN mv docker/* /usr/bin/
# jenkins userでもdockerが使えるようにする
RUN groupadd -o -g ${DOCKER_GROUP_GID} docker
RUN usermod -g docker jenkins
# jenkinsのuidは1000
# jenkinsユーザを利用するのがベストプラクティス
USER jenkins
build
$ docker build -t jenkins-master:latest .
run
$ docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins-master
-v /var/run/docker.sock:/var/run/docker.sock
でホストのdocker daemonを共有しています。
dockerが利用できるか確認
$ docker exec -it jenkins /bin/bash
jenkins@6dde32d18460:/$ docker info
Containers: 61
Running: 30
Paused: 0
Stopped: 31
Images: 62
Server Version: 1.13.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 388
Dirperm1 Supported: true
Logging Driver: json-file
...
jenkins container上でdockerが利用できました。