1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DooD(Docker outside of Docker)環境Jenkinsにおけるjenkins_homeと/var/run/docker.sockのパーミッション

Last updated at Posted at 2021-11-28

備忘

DooD(Docker outside of Docker)環境Jenkins

環境

  • Fedora Linux 35 (Workstation Edition)
  • Docker version 20.10.9, build c2ea9bc
  • dockerデーモンは起動済み
  • 操作ユーザーはdocker groupに属する (sudo usermod -aG docker $USER)
  • jenkins_home は操作ユーザーの $HOME/jenkins_home とする

環境構築

Dockerfile

明瞭さを優先し、jenkins/jenkinsにget-docker.shを用いてdockerを導入

Dockerfile
FROM jenkins/jenkins
USER root
RUN curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && rm get-docker.sh
USER jenkins

docker build および docker run

$ mkdir $HOME/jenkins_home

$ docker build . -t jenkins-dood
...

$ docker images
REPOSITORY        TAG              IMAGE ID       CREATED        SIZE
jenkins-dood      latest           b07c3629294e   21 hours ago   944MB
jenkins/jenkins   2.322-jdk11      a7aa4a28243e   4 days ago     442MB
jenkins/jenkins   latest           a7aa4a28243e   4 days ago     442MB

$ docker run -d \
  --name jenkins-dood \
  -u $(id -u):$(id -g) \
  --group-add $(awk -F: '$1 == "docker" {print $3}' /etc/group) \
  -v $HOME/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -p 8080:8080 \
  -p 50000:50000 \
  jenkins-dood

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
6b38450bc7dd   jenkins-dood   "/sbin/tini -- /usr/…"   12 seconds ago   Up 11 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins-dood

$ docker logs jenkins-dood  # 初期キーフレーズ確認などのため
...

podmanへの置き換えの可能性を考慮し、docker-composeの利用は一旦保留。

http://localhost:8080 にアクセスすることでJenkins管理画面に接続可能

コンテナ内からdockerコマンドが使用可能であることの確認

$ docker exec -it jenkins-dood /bin/bash
jenkins@6b38450bc7dd:/$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
6b38450bc7dd   jenkins-dood   "/sbin/tini -- /usr/…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins-dood
jenkins@6b38450bc7dd:/$ exit
exit
$ 

課題1: jenkins_homeのパーミッション

Jenkinsの設定などがおかれるjenkins_homeは、ローカルとシェアして永続化する。
docker run時、デフォルトではコンテナ内ではuidが1000のjenkinsユーザーとなる為、作成されるjenkins_home内のファイルもuid 1000となる。
これでは使い勝手が悪い為、docker run時に、-u $(id -u):$(id -g)オプションを指定し、jenkins_home内のファイルの所有者、所有グループをコマンド実行ユーザーに合わせる。

課題2: /var/run/docker.sock へのアクセス許可

コンテナ内からもdockerを使えるようにする為、/var/run/docker.sockを共有させている。
外の/var/run/docker.sockは、所有グループのdockerグループに対する権限許可によりアクセスを可能としている。

$ ls -l /var/run/docker.sock 
srw-rw---- 1 root docker 0 Nov 27 10:18 /var/run/docker.sock

コンテナ内のプロセスも/var/run/docker.sockへのアクセスの為には、外のdockerグループのgidのグループに参加させる必要がある為、docker run時に、--group-add $(awk -F: '$1 == "docker" {print $3}' /etc/group) オプションを指定する。

$()内の以下は、/etc/groupから、:区切りの第1項目がdockerの行の第3項目を出力する

awk -F: '$1 == "docker" {print $3}' /etc/group

参考資料

その後の参照資料

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?