Edited at

jenkinsコンテナ上でdockerを利用する

More than 1 year has passed since last update.

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が利用できました。