
前回の記事ではDockerを使ってNginxリバースプロキシ + Jenkinsの環境を構築しました。
-

Dockerを用いたJenkins+Nginx+SSL化の作業メモ
今回はCI/CDに使われるJenkinsサーバーの環境構築について取り上げます。 Jenkinsを使うだけであればGoogle Cloud Platform Marketplaceなどで ...
続きを見る
実際に使ってみるとJenkinsコンテナを使っていることでいくつか問題が生じます。例えばagentにdockerイメージを指定したい場合、単純にコンテナ内でDockerインストールするだけでは動きません。
Dockerコンテナ内でDockerを動かす状況になってしまうため、いわゆるDocker on Dockerの環境を構築する必要があります。
まずホスト側のDockerソケットをマウントする必要があります。(ホストとDockerデーモンを共有します)
docker-composeの例:
version: "3.8"
services:
jenkins:
build:
context: .
restart: unless-stopped
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
volumes:
jenkins_home:
加えてコンテナにDockerクライアントをインストールする必要があります。Dockerfile内でインストール手順を書きます。
インストール方法はリポジトリを追加する方法もありますが、下記の例ではスクリプトを使った簡単な方法でインストールしています。
Dockerfileの例:
FROM jenkins/jenkins:2.234 # デフォルトではPermission Errorが起こる USER root RUN apt-get update # Jenkins agentでDocker動作のため RUN curl -sSL https://get.docker.com/ | sh
jenkins/jenkinsイメージはデフォルトではroot権限を持たないユーザによって実行されています。そのままではソケットにアクセスする権限がないためPermission errorが起こってしまいます。
そのため上の例ではUserをrootに変更しています。rootユーザを使いたくない場合は下記の例が参考になります。
以上の手順でJenkins Pipelineにてagentにdockerを指定することが出来ます。

deployの失敗はまた別の話
以上
参考:
