前回の記事では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を指定することが出来ます。
以上
参考: