【AWS】初心者がDocker上にJenkinsを構築してみた【Linux】

最近AWSについて勉強している橋本です。

AWSを学び始めた時に付いて回るのが、そうDockerJenkinsです。
DockerとJenkinsでCI/CD環境を構築しろ!と言われるのがインフラエンジニアの宿命です。

そこで今回は手始めに、Docker上にJenkinsを構築する手順を
初心者にもわかりやすく紹介します。

ちなみに、Dockerが何か?Jenkinsが何か?という詳しい説明は
この記事ではやりません。
他の有益な記事を参考にしてください。

構築したいシステムの概要

赤枠の部分をこの記事では作成します。

最終的には、ソースコードをGitlabにプッシュしたら、
自動的にウェブサイトがデプロイされるように構築したいと考えています。

AWS CodePipelineは構築していないので、できるかどうか今のところ分かりませんが、
とりあえずjenkins on dockerサーバを構築します。

Gitlabの構築は別の記事で書こうと考えていますが、まだ書いていません。書いたらURLを貼ります。

EC2の設定

Docker上にJenkinsを構築するために、始めにEC2の設定を行います。

ウェブフックを使用してAWS CodePipelineに通知を行うだけなので、
そこまで性能はいらないと考えています。以下のように構築しました。

【EC2の設定項目】

Amazon Linux2

t2.micro

今回はテストとして環境構築を行うため、パブリックサブネットに構築を行いました。
他のインスタンスの詳細の設定についてはデフォルトです。


30GBのストレージまで取得できるようなので、30GBにしときます。おそらく8GBでも大丈夫です。

タグには、わかりやすく名前でも付けておきましょう。

セキュリティグループは、上記のように3ポート使用します。
8080ポートを開放しているのは、Jenkinsのデフォルトのポートが8080だからです。

これでEC2の設定は完了です。

Dockerをインストール

ターミナルなどでSSH接続でEC2にログインします。

ログインしたら、以下のコマンドを上から順番に実行してください。

  1. sudo yum update -y
    

    バージョン管理を行うためのコマンドです。

  2. sudo mkdir /opt/jenkins_home
    

    ディレクトリを作成するコマンドです。7.によるコマンドで、
    dockerコンテナをマウントする際に使用するディレクトリを作成しています。

  3. sudo chown -R 1000 /opt/jenkins_home
    

    ディレクトリの所有者をec2-userに変更するコマンドです。
    このコマンドを実行しないと、7.によるコマンドで、
    ディレクトリの権限が無いためマウントできないというエラーが発生します。

  4. sudo amazon-linux-extras install docker
    

    dockerをインストールするコマンドです。

  5. sudo service docker start
    

    dockerを起動するコマンドです。

  6. sudo 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イメージがダウンロードされます。

  7. sudo docker run --name myjenkins_test -d -p 8080:8080 -p 50000:50000 -v 
    /opt/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

    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コマンドについて

  • sudo docker ps -a
    

    dockerコンテナが実行されているかを確認するコマンドです。
    実行されている場合:up 2 minites ago のように時間表示されており、
    停止している場合:Exited 2 minites ago の表示になっています。

    sudo docker stop 0b5aad08487b
    

    dockerコンテナの停止コマンドです。
    「0b5aad08487b」の部分は、停止したいdockerコンテナのIDを指定してください。

  • sudo service docker stop
    

    dockerを停止するコマンドです。

  • sudo 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コンテナに入ります。

  1. sudo docker ps -a
    

    dockerコンテナIDを確認するコマンドです。

  2. sudo docker exec -it 3f2611369769 bash
    

    dockerコンテナにアクセスするコマンドです。
    1.で確認したdockerコンテナに変更してコマンドを実行してください。

  3. cat /var/jenkins_home/secrets/initialAdminPassword
    

    Administrator password確認コマンドです。

これで、Docker上にJenkinsを構築することができました!
「Install suggested plugins」をクリックして初期設定を行ってください。

EC2やコンテナの再起動時のコマンド

EC2インスタンスをずっと起動させておくわけにはいかないので、
コンテナを再起動する方法を紹介します。
EC2を再起動した後に、SSH接続し、以下のコマンドを実行してください。

  1. sudo service docker start
    

    dockerを起動させるコマンドです。

  2. sudo docker ps -a
    

    dockerコンテナが実行されているかを確認するコマンドです。
    マウントしたdockerコンテナのコンテナIDを確認します。

  3. sudo docker start bd04503377ef
    

    dockerコンテナを起動させるコマンドです。
    これで、設定を保存したdockerコンテナを起動することができます。
    「bd04503377ef」の部分はコンテナIDを指定します。

まとめ

この記事では、Docker上にJenkinsの構築を行いました。

  1. EC2の設定

  2. yumのアップデート

  3. ディレクトリの作成・権限変更

  4. dockerの起動

  5. dockerイメージのダウンロード

  6. コンテナ作成

  7. Administrator passwordの確認

やってみた感想としては、簡単な環境を構築するにも意外と引っかかる点が多く、
思ったよりも時間がかかったなと思いました。

特にディレクトリの権限やコンテナ作成の際のdockerコンテナのマウントに関しては、
何回もやり直しました。

この記事が皆さんのDocker構築の一助になれば幸いです。

Smallitのサービス