- クラウド技術
【AWS】初心者がDocker上にJenkinsを構築してみた【Linux】
- #AWS

最近AWSについて勉強している橋本です。
AWSを学び始めた時に付いて回るのが、そうDockerとJenkinsです。
DockerとJenkinsでCI/CD環境を構築しろ!と言われるのがインフラエンジニアの宿命です。
そこで今回は手始めに、Docker上にJenkinsを構築する手順を
初心者にもわかりやすく紹介します。
ちなみに、Dockerが何か?Jenkinsが何か?という詳しい説明は
この記事ではやりません。
他の有益な記事を参考にしてください。
目次
構築したいシステムの概要
赤枠の部分をこの記事では作成します。
最終的には、ソースコードをGitlabにプッシュしたら、
自動的にウェブサイトがデプロイされるように構築したいと考えています。
AWS CodePipelineは構築していないので、できるかどうか今のところ分かりませんが、
とりあえずjenkins on dockerサーバを構築します。
Gitlabの構築は別の記事で書こうと考えていますが、まだ書いていません。書いたらURLを貼ります。
EC2の設定
Docker上にJenkinsを構築するために、始めにEC2の設定を行います。
ウェブフックを使用してAWS CodePipelineに通知を行うだけなので、
そこまで性能はいらないと考えています。以下のように構築しました。
Amazon Linux2
t2.micro
今回はテストとして環境構築を行うため、パブリックサブネットに構築を行いました。
他のインスタンスの詳細の設定についてはデフォルトです。
30GBのストレージまで取得できるようなので、30GBにしときます。おそらく8GBでも大丈夫です。
タグには、わかりやすく名前でも付けておきましょう。
セキュリティグループは、上記のように3ポート使用します。
8080ポートを開放しているのは、Jenkinsのデフォルトのポートが8080だからです。
これでEC2の設定は完了です。
Dockerをインストール
ターミナルなどでSSH接続でEC2にログインします。
ログインしたら、以下のコマンドを上から順番に実行してください。
-
12sudo yum update -y
バージョン管理を行うためのコマンドです。
-
12sudo mkdir /opt/jenkins_home
ディレクトリを作成するコマンドです。7.によるコマンドで、
dockerコンテナをマウントする際に使用するディレクトリを作成しています。 -
12sudo chown -R 1000 /opt/jenkins_home
ディレクトリの所有者をec2-userに変更するコマンドです。
このコマンドを実行しないと、7.によるコマンドで、
ディレクトリの権限が無いためマウントできないというエラーが発生します。 -
12sudo amazon-linux-extras install docker
dockerをインストールするコマンドです。
-
12sudo service docker start
dockerを起動するコマンドです。
-
12sudo docker pull jenkins/jenkins:lts
jenkinsのdockerイメージをダウンロードするコマンドです。
:lts:タグのことです。
「sudo docker pull jenkins/jenkins:2.277.1-lts」のように
別タグを指定すると別バージョンのjenkinsイメージをダウンロードできます。また、「sudo docker pull jenkins/jenkins」のようにタグを指定しない場合は、
デフォルトの設定で最新版のjenkinsイメージがダウンロードされます。「sudo docker pull jenkins/jenkins:latest」も同様に
最新版のjenkinsイメージがダウンロードされます。 -
12sudo docker run --name myjenkins_test -d -p 8080:8080 -p 50000:50000 -v<span style="background-color: inherit; color: inherit; font-family: inherit; font-size: var(--hcb-font-size,14px);">/opt/jenkins_home:/var/jenkins_home jenkins/jenkins:lts</span>
Jenkinsのdockerコンテナを作成するコマンドです。
–name:–nameオプションは、dockerコンテナの名前を指定するコマンドです。
上記の場合はコンテナ名を「myjenkins_test」にします。-p:コンテナのポートをホストに公開するオプションです。
8080:Jenkinsのポータルにアクセスするためのポートです。
50000:Jenkinsのスレーブにアクセスするためのポートです。-v:マウントする際のコマンドで、
「-v EC2のディレクトリ:dockerコンテナ内のディレクトリ」で指定します。
dockerコンテナ内のディレクトリは基本的に「/var/jenkins_home」です。EC2のディレクトリは、私の場合は「/opt/jenkins_home」にしていますが、
プロジェクトで適宜変更してください。-vオプションでマウントしなかった場合、dockerを停止すると、
dockerコンテナも削除されます。
そのためjenkinsの設定も消えてしまいます。消えないようにするためには、EC2のディレクトリ(/opt/jenkins_home)を
dockerコンテナ内にあるjenkinsの設定を行っているディレクトリ(/var/jenkins_home)にマウントします。補足:Linuxでは/optのディレクトリに実行時に書き換えられない
アプリケーションソフトウェアパッケージを格納します。
Linuxのディレクトリの使い分けについて(https://www.linuxmaster.jp/linux_skill/2010/02/06linux.html)
その他のよく使うDockerコマンドについて
-
12sudo docker ps -a
dockerコンテナが実行されているかを確認するコマンドです。
実行されている場合:up 2 minites ago のように時間表示されており、
停止している場合:Exited 2 minites ago の表示になっています。12sudo docker stop 0b5aad08487bdockerコンテナの停止コマンドです。
「0b5aad08487b」の部分は、停止したいdockerコンテナのIDを指定してください。 -
12sudo service docker stop
dockerを停止するコマンドです。
-
12sudo docker rm bd04503377ef
dockrtコンテナを削除するコマンドです。
「sudo docker ps -a」でコンテナIDを確認して削除できます。
「bd04503377ef」の部分は、停止したいdockerコンテナのIDを指定してください。
Jenkinsにブラウザでアクセス
ここまでの設定を行うと、「http://パブリックIPアドレス:8080/」で
Jenkinsにアクセスできます。
私の場合は、「http://13.112.165.130:8080/」でした。(このURLは、使えません。)
Administrator passwordについて
始めてJenkinsにアクセスすると、Administrator passwordを求められるので、
パスワードの確認を行います。
パスワードは、dockerコンテナ内の/var/jenkins_home/secrets/initialAdminPasswordに
書かれているので、まずはdockerコンテナに入ります。
-
12sudo docker ps -a
dockerコンテナIDを確認するコマンドです。
-
12sudo docker exec -it 3f2611369769 bash
dockerコンテナにアクセスするコマンドです。
1.で確認したdockerコンテナに変更してコマンドを実行してください。 -
12cat /var/jenkins_home/secrets/initialAdminPassword
Administrator password確認コマンドです。
これで、Docker上にJenkinsを構築することができました!
「Install suggested plugins」をクリックして初期設定を行ってください。
EC2やコンテナの再起動時のコマンド
EC2インスタンスをずっと起動させておくわけにはいかないので、
コンテナを再起動する方法を紹介します。
EC2を再起動した後に、SSH接続し、以下のコマンドを実行してください。
-
12sudo service docker start
dockerを起動させるコマンドです。
-
12sudo docker ps -a
dockerコンテナが実行されているかを確認するコマンドです。
マウントしたdockerコンテナのコンテナIDを確認します。 -
12sudo docker start bd04503377ef
dockerコンテナを起動させるコマンドです。
これで、設定を保存したdockerコンテナを起動することができます。
「bd04503377ef」の部分はコンテナIDを指定します。
まとめ
この記事では、Docker上にJenkinsの構築を行いました。
-
EC2の設定
-
yumのアップデート
-
ディレクトリの作成・権限変更
-
dockerの起動
-
dockerイメージのダウンロード
-
コンテナ作成
-
Administrator passwordの確認
やってみた感想としては、簡単な環境を構築するにも意外と引っかかる点が多く、
思ったよりも時間がかかったなと思いました。
特にディレクトリの権限やコンテナ作成の際のdockerコンテナのマウントに関しては、
何回もやり直しました。
この記事が皆さんのDocker構築の一助になれば幸いです。