VirtualBoxのCentOS7にDockerコンテナでJenkinsサーバーを構築し、ローカルPCからJenkinsサーバーにアクセスする方法

## 本記事を作成することになったきっかけ
下記Udemyの講座では、VirtualBoxとCentOS7とDockerを利用するので、その手順を忘れないようにしたいと思い、作成しました。
【Jenkins, From Zero To Hero: Become a DevOps Jenkins Master】
https://www.udemy.com/course/jenkins-from-zero-to-hero/

## バージョン
VirtualBox、Dockerのインストール、CentOS7のISOのダウンロードが必要ですが、その手順は新しいものが出るたびに変わって記事にしても数ヶ月後には使えなくなることが多いので割愛し、バージョンだけ載せます。
VirtualBox 6.1.14 platform packages
Docker 19.03.12
Docker Compose 1.26.2
CentOS-7-x86_64-Minimal-1810.iso
※http://repos-tx.psychz.net/centos/7.6.1810/isos/x86_64/
にCentOSのisoあるのでクリックしてダウンロードします。

## 対象の読者
mac利用者
UdemyのJenkins, From Zero To Hero: Become a DevOps Jenkins Masterの講座で何言ってるか分からなかった人

## VirtualBox上にCentOSの仮想環境を構築する方法
![スクリーンショット 2020-09-08 0.23.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/b3c0c13f-5f5c-72e2-df3c-2b1945d159f6.jpeg)

新規をクリックします。

![スクリーンショット 2020-09-08 0.25.22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/ab6ebdcc-f0c9-a977-ef97-9b15e8192dcb.jpeg)

名前をJenkins
マシンフォルダーはデフォルト
タイプはLinux
バージョンはRed Hat(64-bit)
にします。
バージョンをRed Hat(64-bit)にした理由は、CentOSがRedHat系列のLinuxで、CentOS-7-x86_64-Minimal-1810が64bit用だからです。

続きをクリックします。

![スクリーンショット 2020-09-08 0.28.58.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/a2eddc6c-1f86-337e-3c8a-dc12c6a46407.jpeg)

メモリーサイズが表示されます。
2048MBにしてクリックします。

![スクリーンショット 2020-09-08 0.30.59.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/2fc71bfd-a31f-cffc-62a6-93d686d30199.jpeg)

仮想ハードディスクを作成するを選択して作成をクリックします。

![スクリーンショット 2020-09-08 0.31.47.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/e4dbff9a-a0bd-50a3-0a2d-b8696a1f79e8.jpeg)

VDIを選択して続きをクリックします。

![スクリーンショット 2020-09-08 0.32.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/0b022387-f5c3-9c0a-da7f-3c951dede739.jpeg)

可変サイズを選択して続きをクリックします。

![スクリーンショット 2020-09-08 0.34.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/42be86d5-1798-0940-a8b3-5e4d373afb7c.jpeg)

上のパスは特に弄りません。
サイズを20GBにします。

作成をクリックします。

![スクリーンショット 2020-09-08 0.35.44.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/815031d1-9bd5-abea-3627-0f5bddd199b0.jpeg)

Jenkinsサーバーを構築するための環境を構築することができました。

設定をクリックしてネットワークを開きます。
![スクリーンショット 2020-09-08 0.36.55.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/9a6184e8-1e90-d47d-d287-a732c9effa26.jpeg)

アダプター1の割り当てをNATからブリッジアダプターに変更します。
名前は人によって違うかも・・・。
僕の家はWi-Fiでネットワーク接続しているので、Wi-Fiとなっているen0を設定しています。
有線の方は多分Ethernetかな・・・？

![スクリーンショット 2020-09-08 0.38.36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/e6f05bed-382d-c60d-ac02-70aba0f19088.jpeg)

設定できたらOKをクリックします。

![スクリーンショット 2020-09-08 0.40.52.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/84a7f7ec-222e-6199-2ddb-839d194135a3.jpeg)

起動をクリックしま・・・と、その前に、VirtualBoxにマウスカーソルの操作権限を取られて全く動かせない人が続出します。解決方法は、左Commandキーを1度押すだけでいいので、その操作だけを必ず覚えて次の手順へ進みましょう。発症するタイミングは人それぞれです。
では気を取り直して、起動をクリックします。

人によってはここでセキュリティとプライバシーの設定が必要になるのでVirtualBox.appのキーボードからの入力の監視を許可してあげます。

![スクリーンショット 2020-09-08 0.43.08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/79c86db3-dce4-d011-1bd6-78859858d2df.jpeg)

設定が終わったらVirtualBoxを再起動して、再度Jenkinsの仮想環境を起動します。

![スクリーンショット 2020-09-08 0.45.13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/0cbbccf4-2666-58e2-d305-786bd7d8d0a1.jpeg)

人によってはプライバシーのほうも許可しないといけないのでこちらもチェックしてまたVirtualBoxを再起動します。

※それが終わってからJenkinsという仮想環境を起動してもなぜか下記の画面に行かなかったので断念して一度作成した環境を削除してからここまでの手順をもう一度繰り返します。

![スクリーンショット 2020-09-08 0.49.35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/59b3a924-d7d7-618a-3d67-b2e3541fb3ef.jpeg)

ここでダウンロードしておいたCentOS7のISO(CentOS-7-x86_64-Minimal-1810.iso)を指定しますが、Empty(空)となっています。指定する必要があるので右のフォルダをクリックします。
Addをクリックし、ISOを保存した先まで移動して選択します。
Chooseをクリックします。

![スクリーンショット 2020-09-09 1.20.30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/185f9ddd-49ca-8923-caf4-a84e8894f1a5.jpeg)

Startをクリックします。

![スクリーンショット 2020-09-08 0.56.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/63fb4b57-42a6-db55-6cec-01cddde9555e.jpeg)


上下キーで選択、Returnキーで決定です。
Install CentOS7にカーソルをあわせて、Returnキーを押します。

![スクリーンショット 2020-09-08 1.01.35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/2e3dba4b-2818-0476-0c50-3fb6c8bb1542.jpeg)

CentOS7のインストールが始まるので少し待ちます。
意外とすぐ終わります。

![スクリーンショット 2020-09-08 1.02.37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/90a62dd1-39b8-5708-a0ed-be89ef475d0d.jpeg)

言語設定です。
日本語を選択して続行をクリックします。
※画面の解像度を変更してしまうとかなり操作しづらくなるのでデフォルトのサイズのまま操作します。

![スクリーンショット 2020-09-08 1.04.33.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/5622c95c-2a1a-67a1-1afb-a1fc3eef3ed3.jpeg)

![スクリーンショット 2020-09-08 1.05.05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/735ffe37-577c-3f8c-15e8-4b1d35081306.jpeg)

下のほうにスクロールします。

![スクリーンショット 2020-09-08 1.05.52.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/67cb67a0-aa26-ef88-82d7-c7dcf11a5592.jpeg)

自動パーティシ・・・択されましたをクリックします。

![スクリーンショット 2020-09-08 1.07.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/d2256834-33ca-1c8b-f755-9bebee87cf4f.jpeg)

何も弄らずに完了をクリックします。

![スクリーンショット 2020-09-08 1.08.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/e4c35f4e-e41c-1d1f-9dcf-5d68d08f2a55.jpeg)

すると、<font color="orange">△</font>マークが消えました

続いて、ネットワークとホスト名をクリックします。

![スクリーンショット 2020-09-08 1.16.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/3fdd3639-0a17-658f-663d-c22a12c60af7.jpeg)

右上のEthernet(enp0s3)をクリックします。

![スクリーンショット 2020-09-08 1.17.14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/b6b7f4f8-421c-4c07-ef4b-ac1710cb3831.jpeg)

終わったら完了をクリックします。

![スクリーンショット 2020-09-08 1.08.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/e4c35f4e-e41c-1d1f-9dcf-5d68d08f2a55.jpeg)

インストールの開始をクリックします。

![スクリーンショット 2020-09-08 1.09.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/cd109b06-aef0-a20d-4448-504bc394de88.jpeg)

ROOTパスワードを作成するのでROOTパスワードをクリックします。

![スクリーンショット 2020-09-08 1.11.59.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/83f5bb70-ba41-0418-3713-67f66695e1d0.jpeg)

ここでは分かりやすくパスワードを123456にします。

![スクリーンショット 2020-09-08 1.12.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/e6940b35-9cef-72f4-7ba9-fba590e1d084.jpeg)

入力したら完了を2回クリックします。

![スクリーンショット 2020-09-08 1.19.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/bb6c06a6-4f34-edc5-c467-b1fcc49c5ca0.jpeg)

続いて、ユーザーを作成します。

![スクリーンショット 2020-09-08 1.21.03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/bd1df229-fa5f-33ba-5c6f-6d365d3dea74.jpeg)

下の画像のように入力します。
フルネームはjenkinsにします。
ユーザー名はフルネームを入力するたびに自動で入力されます。
このユーザーを管理者にするとこのアカウントを使用する場合にパスワードを必要とするにチェックを忘れずに行います。
パスワードは123456にしておきます。

![スクリーンショット 2020-09-08 1.22.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/99cfb7ef-2fb0-6a7d-83b8-fbbd2b4bd585.jpeg)

終わったら、左上の完了を2回クリックします。

あとはインストールが完了するまで待ちます。

![スクリーンショット 2020-09-08 1.22.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/0ef2634d-db4d-7efb-53b3-7bf763a47a55.jpeg)

終わったら、右下の設定完了をクリックします。

![スクリーンショット 2020-09-08 1.25.24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/db4d12e6-0b09-eced-52ba-f9b7e2e5ea98.jpeg)

終わったら再起動をクリックします。

![スクリーンショット 2020-09-09 1.33.37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/7127b3eb-8d55-54d0-c309-48d599a5a216.jpeg)

なんかこんな感じでエラーログが出て再起動できない場合は、設定が原因です。
設定→ディスプレイ→グラフィックスコントローラーをVMSVGAからVBoxVGAに変更します。※これ直すのに丸1日かかりました。

![スクリーンショット 2020-09-09 1.41.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/aebc9508-3d71-34db-26fc-2bbb18d5a722.jpeg)

無効な設定が見つかりましたと出ますが、問題ありません。OKを押して再度起動します。

起動時にISOの選択画面が出てもキャンセルでOKです。

![スクリーンショット 2020-09-09 1.43.24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/f90ff9f3-bc15-86b7-cfd5-c479e09f318d.jpeg)

無事、CentOS7が起動しました。
localhost login:jenkins
password:123456
でログインします。

## 画面クリアのショートカットキーを覚えます

```
clear
```

とコマンドを打つと文字が全て消えますが、効率が悪いので、ショートカットキーを必ず覚えるようにします。
Command+l(エル)で、clearコマンドと同様の動作が行われます。

![スクリーンショット 2020-09-09 1.57.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/62503e25-ca8d-b3c7-fbdd-380847792336.jpeg)


## IPアドレスを調べます

```
ip a
```

と入力すると、IPアドレスを調べることができます。

![スクリーンショット 2020-09-09 1.58.49.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/7b3df034-19f9-c0c8-1f73-8e0517f358b5.jpeg)

enp0s3のinetを見ると192.168.0.6となっています。
これが、この仮想環境のIPアドレスになります。

## terminalでアクセスするための設定をします
VirtualBoxマネージャーを開いた状態で、ファイル→ホストネットワークマネージャーを選択します。

[ファイルタブ]
![スクリーンショット 2020-09-09 2.08.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/a810e9a9-3dcd-3581-a747-07bee2f352b1.jpeg)

![スクリーンショット 2020-09-09 2.08.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/7c003f35-9229-e3e0-72db-0425451b6b77.jpeg)

作成をクリックします。

![スクリーンショット 2020-09-09 2.09.14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/49a10a69-c770-d8be-cfc5-b41587642289.jpeg)

IPアドレスは192.168.56.101であることを確認します。
vboxnet0が作成されたことを確認し、閉じるをクリックします。
多分みんな同じIPアドレスになると思うのですが、違ったら以降の手順で使うIPアドレスを読み替える必要があります。


さっき作ったVMの設定→ネットワーク→アダプター2にホストオンリーアダプターを設定します。

![スクリーンショット 2020-09-09 2.10.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/b19a048e-ccad-4fe6-14da-06bebb215524.jpeg)

OKをクリックします。

仮想環境を起動し、ログインします。
localhost login:jenkins
password:123456

nmtuiコマンドを実行します。
このコマンドは、ネットワークの設定をコマンドではなく視覚的に設定できるようにするためのコマンドです。いわるゆGUIというやつですね。
一応コマンドでもできるっぽいですが、そのやり方は割愛します。色んなファイルを開いてviテキストで編集して、とか面倒ですからね。

![スクリーンショット 2020-09-09 2.13.34.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/f4261e76-93e0-d266-b900-18a9f05b13be.jpeg)

nmtui画面は上下キーおよびReturnキーで操作します。
上下キーで移動し、Edit a connectionをReturnキーで選択します。

![スクリーンショット 2020-09-09 2.14.10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/482b643f-5455-2de1-9484-37ddc876177c.jpeg)

enp0s3をReturnキーで選択します。

![スクリーンショット 2020-09-09 2.15.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/017fb745-d3fe-f176-8eae-a2b840ab4e3a.jpeg)

IPv6をReturnキーでIgnoreに変更します。
Automatically connectは[X]になっていることを確認できればOKです。

OKにカーソルを合わせ、選択します。

続いて、＊　＊　＊　＊を選択します。
(本当はenp0s8とかになっているはずですが、なんかバグってますね。知り合いも同じ表示になってました。)

![スクリーンショット 2020-09-09 2.17.13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/51269d34-b5a9-783f-a9e8-84da30bdc1dd.jpeg)

Profile nameがバグってたらenp0s8にしておきます。
Ipv4 CONFIGURATIONをManualに変更し、Addressesを192.168.56.101/24にします。

![スクリーンショット 2020-09-09 2.19.16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/c378773d-0706-99ae-86ef-4716c73e1ac6.jpeg)

続いて、Ipv6をIgnoreに変更します。
Automatically connectは[X]になっていることが確認できればOKです。

![スクリーンショット 2020-09-09 2.20.46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/0e8bad5e-427d-b977-54fb-fafb570cd2fa.jpeg)

OKを選択し、Back→Quitで終了します。

続いて、下記コマンドを入力します。

```
service NetworkManager restart
service network restart
```

※パスワードを求められたら、123456を入力します。

これで、macからterminalを利用してVirtualBoxのCentOSにアクセスするための準備が整いました。

## terminalでアクセスします。
Command+Spaceでspotlight検索を開き、terminal.appと打ってReturnキーを入力し、terminalを起動します。
Windowsと異なるmacの強みですね。

Windowsの方はputtyとかteratermを使うといいと思います。
(ここまでの手順で結構Windowsと違うと思うのでWindowsの方は見てないと思いますが・・・)

terminalでssh接続をするために、下記コマンドを入力します。

```
ssh root@192.168.56.101
```

パスワードを求められたら123456を入力します。

![スクリーンショット 2020-09-09 2.25.54.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/6a6eae99-b044-ae21-1aa6-1af8ecaad342.jpeg)

そうすると、terminalでVirtualBox上のCentosにアクセスできます。
これで、以降はVirtualBoxで仮想マシンを起動してCentOSを起動し、適当に最小化しておけば、mac側からCentosを操作することが可能になりました。VirtualBoxで表示される画面での操作はやりづらいですからね。

## yumコマンドが使えるかどうかチェック
ためしにyum listを実行します。
本来はこれでyumのアップデートが始まったあと、yuｍでインストールしたソフトが一覧表示されるのですが、もし上手く行かなかったときの記事を知り合いが書いています。

僕は何もしなくても上手く行きましたが、もし上手く行かないようでしたら参考にしてみてください。
https://qiita.com/yuri2509/items/6715fe853515a8719518

## Dockerをインストール
一度ネットワークに接続できるかどうかを確認します。

```
ping google.com
```

![スクリーンショット 2020-09-12 20.45.09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/a1b2f550-0807-bc9b-5a24-051ec42a295a.jpeg)

繋がってたら画像のようになります。
延々とログが流れ続けるので、Control+cで中断します。

![スクリーンショット 2020-09-12 20.46.19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/9e584fd5-6ebe-3e17-11c7-f7309284ab75.jpeg)

googleでdocker for centosと検索し、Install Docker Engine on CentOS | Docker DocumentationのWebページを開きます・

![スクリーンショット 2020-09-12 20.47.19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/29f67add-0546-e401-ea8c-7bb72ea87299.jpeg)

![スクリーンショット 2020-09-12 20.48.35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/10bb211d-ef8f-47d4-3664-78ab46e8d8ae.jpeg)

このページを元に、コマンドを上からどんどん入力します。
一応コマンド載せますが、公式ホームページに載ってるコマンドは日々変わるのでコマンド全然違う可能性あります。

まずはDockerの古いバージョンのアンインストール(Dockerが入ってなければやる意味なし)

```
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
```

引数に一致しませんってログがいっぱい出ます。つまりdockerはインストールされていないということですね。

続いて、yumを便利にするソフトyum-utilsをインストールします。

```
sudo yum install -y yum-utils
```

続いて、docker用のリポジトリを作成します。

```
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
```

これで、以下のディレクトリにdocker-ce.repoが作成されました。
/etc/yum.repos.d
┗docker-ce.repo

ようやく、dockerをインストールするところまで来ました。
以下を実行します。

```
sudo yum install docker-ce docker-ce-cli containerd.io
```

途中で止まってても大丈夫です。それはミラーサイトを検索している最中です。そのため、キー入力は控えましょう。入力してしまうとインストールが途中で中断されたりするので再度コマンドを実行する必要があります。(僕は一度やらかしました)
途中で[y/d/N]とか[y/N]とか出てきたらyを入力して進めます。

![スクリーンショット 2020-09-12 21.13.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/6f624377-741d-7733-b209-d22521d24419.jpeg)

最後に完了しました！と表示されていたらDockerのインストール完了です。
![スクリーンショット 2020-09-12 21.14.10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/5c5903c2-9f09-0af8-3eb7-447c01154361.jpeg)

dockerを起動します。

```
sudo systemctl start docker
```

![スクリーンショット 2020-09-12 21.17.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/221be834-ccc4-a77f-39a7-c535fd85a8a5.jpeg)

何も起こりませんが問題ありません。

公式サイトのコマンド集にはありませんが、起動時に自動でDockerを起動するためのコマンドを実行します。

```
sudo systemctl enable docker
```

![スクリーンショット 2020-09-12 21.20.37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/b71fc33b-4634-b631-5f83-a2171b5feb53.jpeg)

dockerがインストールされたかどうかを確認するために、下記コマンドでdockerのプロセスを表示してみます。
```
docker ps
```

![スクリーンショット 2020-09-12 21.25.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/acb577d7-9a74-7327-613f-5973d7c8d825.jpeg)


今は管理者で実行しているのでうまく動きますが、CentOSインストール時にjenkinsユーザーを作成したと思います。そちらにsuコマンドを使ってユーザーをjenkinsユーザーに変更し、docker psを実行しても権限がないため失敗します。そのため、下記コマンドを実行して実行できるようにしておきます。


```
sudo usermod -aG docker jenkins
```

その設定を反映するには、一度exitでssh接続を解除して再度ssh接続します。
これで、jenkinsユーザーでもdocker psを実行して動作するようになります。

## docker composeのインストール

googleでdocker compose installationと検索します。


![スクリーンショット 2020-09-12 21.28.57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/0e555cd3-b14e-75b2-5b15-d5cafb5c2e9e.jpeg)

Install Docker Compose | Docker Documentationを開きます。

![スクリーンショット 2020-09-12 21.28.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/13239700-1da7-72e3-6088-7a7f33fc218c.jpeg)

少し下に行くとmacとかWindowsとかのタブがあるのでLinuxを選択します。

![スクリーンショット 2020-09-12 21.30.24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/6d323f8a-63e7-f803-180a-b461c26f31c9.jpeg)

そこに表示されているコマンドを入力していきます。こちらも日々変わるので、公式サイルを参考にしたほうがいいですが、コマンドは一応載せておきます。

docker composeのインストールコマンドです

```
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

すぐ終わります。

![スクリーンショット 2020-09-12 21.32.50.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/191ccb88-a55f-f685-f6e9-49fe51ec5fcd.jpeg)

コマンドの通り、/usr/local/binにdocker-composeがインストールされます。

![スクリーンショット 2020-09-12 21.37.08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/81e60e1b-eb9d-db81-2a3c-181f6488b652.jpeg)

cdでディレクトリを移動し、pwdコマンドでパスを表示し、llコマンドでパーティション(-rw-r--r--ってなってるやつ)を表示してみました。

実行権限がないので、このままではdocker-composeの実行権限がありません。そのため、実行権限を付与します。

下記コマンドを実行して実行権限を付与することができます。

```
sudo chmod +x /usr/local/bin/docker-compose 
```

![スクリーンショット 2020-09-12 21.38.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/38e0122c-80f8-f145-b2ba-96e749c3676a.jpeg)

パーティションが-rw-r--r--から-rwxr-xr-xに変化しましたね！
これは実行権限が付与されたことを表します。

docker-composeがインストールされていたら、バージョンを表示することができるので、その方法で確認します。

```
docker-compose -v
```

![スクリーンショット 2020-09-12 21.40.56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/3e2ac512-6787-9558-6927-fb2676f05564.jpeg)

docker-compose version 1.27.1となっていますね。インストール成功です。

## dockerを利用してjenkinsサーバーを構築

docker jenkins imageでgoogle検索します。

![スクリーンショット 2020-09-12 21.53.45.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/1b932309-0536-7712-1eaa-f5f5e0c931eb.jpeg)

jenkins/jenkinsのほうを開きます。こちらはjenkinsのチームがメンテしているDockerイメージです。
jenkinsとなっているほうは公式イメージですが、こちらは間違いなので注意！

![スクリーンショット 2020-09-13 0.35.29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/97856bf9-709b-5467-2da8-88b515b8d13e.jpeg)

そうすると、右側にインストールするためのコマンドが載っているのでコピペしてterminalで実行します。※CentOSにssh接続でログインしている状態でやります

```
docker pull jenkins/jenkins
```

![スクリーンショット 2020-09-12 21.57.24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/fbf1f141-9248-6412-b556-17f75011411a.jpeg)

これでjenkinsのDockerイメージを取得することができました。
以下のコマンドでjenkinsのDockerイメージがあることを確認します。

```
docker images
```

![スクリーンショット 2020-09-12 21.58.24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/a08e0343-9376-1904-4e15-218ab11a0f8e.jpeg)

余談ですが、Dockerのデータはどこにあるのでしょう？
それは、Dockerの情報を表示することで調べることができます。

```
docker info
```

![スクリーンショット 2020-09-12 22.00.49.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/5eddf1e9-30a1-dcb1-e385-8214b556c3b0.jpeg)

いっぱい情報が表示されます。
この中にdockerのルートディレクトリが書かれているのですが、探すのが大変です。

そのため、以下のコマンドですぐに見つけることができます。

```
docker info | grep -i root
```

grepコマンドは、文字列を検索するのに便利です。
docker infoで表示される文字列から、rootが含まれている行を抽出して表示してくれます。-iをつけることで、大文字小文字の区別なく検索することができます。

![スクリーンショット 2020-09-12 22.03.19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/6ce97d7a-3401-3279-f21f-07fcde8be697.jpeg)

/var/lib/dockerがDockerのルートディレクトリであることが確認できました。
docker関連のデータはこの中に保存されます。

続いて、jenkinsのデータを入れるためのディレクトリを作成します。
/home/jenkins/jenkinsの形で作成します。
まずはhomeディレクトリに移動してjenkinsディレクトリを作成し、更にその中にjenkinsディレクトリを作成します。

```
cd /home
mkdir jenkins
cd jenkins
mkdir jenkins
pwd
```

![スクリーンショット 2020-09-12 22.22.00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/c21cdcf0-e22d-8438-808c-8f140716d05e.jpeg)


これでjenkinsディレクトリを作成することができました。
最後にpwdコマンドで現在のディレクトリを表示しています。

練習のために、mvコマンドを使ってディレクトリ名を変更してみます。

修正前

```
/home/jenkins/jenkins
```

修正後

```
/home/jenkins/jenkins-data
```

以下のコマンドを実行します。

```
cd /home
cd jenkins
mv jenkins jenkins-data
ll
cd jenkins-data
pwd
```

![スクリーンショット 2020-09-12 22.25.11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/19104f5f-bbf5-d9eb-5b9e-d273f994b5c8.jpeg)

無事ディレクトリ名を変更することができました。

続いて、/home/jenkins/jenkinsの中にdocker-compose.ymlを作成します。

下記コマンドを実行して新規ファイルを作成します。

```
vi docker-compose.yml
```

![スクリーンショット 2020-09-12 22.28.02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/328991f0-937a-e4d5-2870-2c3c69ab67a2.jpeg)

軽くviの説明をしておくと、デフォルトはコマンドを受け付ける通常モードで、iでインサートモードにして文字を入力でき、escでインサートモード解除して通常モードになり、通常モードで「:wq」を実行すると保存して終了、「:q」で閉じる、「:q!」で保存せず強制終了です。
これだけの知識があればとりあえずなんとかなると思います。多分。

viでどんどん書き込んでいきます。
まずはバージョン3を指定します。

```docker-compose.yml
version: '3'
```

続いて、jenkinsのコンテナ名を指定します。

```docker-compose.yml
version: '3'
services:
  jenkins:
    container_name: jenkins
```

Dockerイメージを指定します。
これは、docker imagesを実行したときのRepositoryに記載のあるイメージ名を指定します。必ず確認してから記述する癖をつけるといいと思います。


```docker-compose.yml
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins

```

続いてポートを指定します。
jenkinsはhttpサーバーなので8080にします。
左側がjenkinsサーバーのポート番号、右側がmacでアクセスする時のポート番号になります。

```docker-compose.yml
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
```

続いて、ボリュームを作成します。
Dockerにはボリュームという概念があります。Dockerコンテナって作成してから壊すとコンテナ上のすべてのデータが吹き飛ぶんですよね。吹っ飛ばしたくないデータがある場合はどうすればいいのでしょう？答えはボリュームに保存すればいいのです。
今はとりあえずそんくらいの認識があればいいでしょう。
一度escキーでインサートモードから通常モードにして:wqで保存して終了し、ボリューム用の領域を作成します。
以下のディレクトリにいることを確認します。

/home/jenkins/jenkins-data

続いて、ボリューム用の領域であるjenkins_homeディレクトリを作成します。

```
mkdir jenkins_home
```

この中に、Dockerコンテナ上のデータを保存できます。
作成し終わったらdocker-compose.ymlの編集に戻ります。


```
vi docker-compose.yml
```

ボリュームを指定します。左がさっき作ったディレクトリ(コピー先)、右がDockerコンテナ上のディレクトリ(コピー元)です。
右側のディレクトリが/var/lib/jenkins_homeではなく、/var/jenkins_homeとなっている情報は古いです。

```docker-compose.yml
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
    volumes:
      - "$PWD/jenkins_home:/var/lib/jenkins_home"
```

続いて、ネットワークに関する情報4行を記述します。
1つはjenkins:の配下に、もう一つはdocker-compose.ymlの配下に記述しています。

```docker-compose.yml
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
    volumes:
      - "$PWD/jenkins_home:/var/lib/jenkins_home"
   networks:
      - net
networks:
  net:
```


最終的には以下の形になります。

```docker-compose.yml
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
    volumes:
      - "$PWD/jenkins_home:/var/lib/jenkins_home"
    networks:
      - net
networks:
  net:
```

![スクリーンショット 2020-09-12 23.10.56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/db425354-d26d-ef31-c98d-3ca7bd989d34.jpeg)


escキーで通常モードに戻り、:wqで保存します。

終わったら、jenkins_homeディレクトリの権限を変更します。

```
sudo chown 1000:1000 jenkins_home -R
```


docker-compose.ymlのあるディレクトリに移動して、dockerコンテナを起動します。

```
docker-compose up -d
```

末尾の-dはバックグラウンドで実行という意味です。

![スクリーンショット 2020-09-12 23.12.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/422cd814-7c06-66f3-ff2d-8dec60a716c1.jpeg)

下記コマンドを実行します。

```
docker ps
```

![スクリーンショット 2020-09-12 23.29.35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/d91551e9-9f23-275c-8c3d-d4578dc4de0a.jpeg)

これで、JenkinsサーバーがDockerコンテナ上で動きました。

```
[もし表示されなかったら]
下記コマンドでjenkinsが表示されていたら
Dockerコンテナの起動に失敗しています。
docker ps -a

下記のコマンドでログを表示することができ、
エラー原因を調査できます。
docker-compose logs jenkins

Dockerコンテナ側のボリュームが/var/lib/jenkins_home
ではなく、/var/jenkins_homeとなっている情報は古いと
先ほど書きましたが、それはこのログを表示することで
解決するに至りました。
```

jenkinsで生成されたパスワードが必要なので、dockerでログを表示する下記コマンドを実行します。

```
docker logs -f jenkins
```

![スクリーンショット 2020-09-12 23.34.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/787a22d2-36eb-935f-ffaf-82dd3f82cbcf.jpeg)


「1a193f6a36674f58856aed0b3041bc13」という文字が見えますが、これをコピーしてメモします。


ラストスパートです。

VirtualBox上のCentOSのIPアドレスはなんでしたか？
そう、192.168.56.101でしたね。
では、それにhttpサーバーを示すポート番号8080をくっつけて、「192.168.56.101:8080」とwebブラウザのURLに入力します。

![スクリーンショット 2020-09-12 23.41.57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/4e60a117-5e19-f98d-5b9b-11b323f49176.jpeg)

行けるか・・・？

![スクリーンショット 2020-09-12 23.42.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/2da69bfb-e503-cea6-f6f1-4410ac5e7c3f.jpeg)


無事、jenkinsにアクセスすることができました〜！
マンモスうれぴ〜！

これでVirtualBoxのCentOS7にDockerコンテナでJenkinsサーバーを構築し、ローカルPCからJenkinsサーバーにアクセスすることができました。

仕上げに、先程メモした1a193f6a36674f58856aed0b3041bc13を貼り付けてアクセスできることを確認します。(この文字列は人によって違うよ！)

![スクリーンショット 2020-09-12 23.43.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646483/411c984f-a132-c0e6-20a0-2624c35242a4.jpeg)

大丈夫そうですね。
Jenkinsの使い方については以下で解説しています。良かったら併せてこちらも読んでみてください。

【Jenkinsとは？】Jenkinsのインストールから使い方まで世界一分かりやすく解説します
https://qiita.com/JUN_WEB_FREE/items/c7b42528a87911386391

## dockerを勉強するのにオススメのサイト
今回特にdockerについての解説はしていませんが、以下のサイトが分かりやすいので超オススメです！

キツネの惑星
https://kitsune.blog/engineer/docker