本記事を作成することになったきっかけ
下記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の仮想環境を構築する方法
新規をクリックします。
名前をJenkins
マシンフォルダーはデフォルト
タイプはLinux
バージョンはRed Hat(64-bit)
にします。
バージョンをRed Hat(64-bit)にした理由は、CentOSがRedHat系列のLinuxで、CentOS-7-x86_64-Minimal-1810が64bit用だからです。
続きをクリックします。
メモリーサイズが表示されます。
2048MBにしてクリックします。
仮想ハードディスクを作成するを選択して作成をクリックします。
VDIを選択して続きをクリックします。
可変サイズを選択して続きをクリックします。
上のパスは特に弄りません。
サイズを20GBにします。
作成をクリックします。
Jenkinsサーバーを構築するための環境を構築することができました。
アダプター1の割り当てをNATからブリッジアダプターに変更します。
名前は人によって違うかも・・・。
僕の家はWi-Fiでネットワーク接続しているので、Wi-Fiとなっているen0を設定しています。
有線の方は多分Ethernetかな・・・?
設定できたらOKをクリックします。
起動をクリックしま・・・と、その前に、VirtualBoxにマウスカーソルの操作権限を取られて全く動かせない人が続出します。解決方法は、左Commandキーを1度押すだけでいいので、その操作だけを必ず覚えて次の手順へ進みましょう。発症するタイミングは人それぞれです。
では気を取り直して、起動をクリックします。
人によってはここでセキュリティとプライバシーの設定が必要になるのでVirtualBox.appのキーボードからの入力の監視を許可してあげます。
設定が終わったらVirtualBoxを再起動して、再度Jenkinsの仮想環境を起動します。
人によってはプライバシーのほうも許可しないといけないのでこちらもチェックしてまたVirtualBoxを再起動します。
※それが終わってからJenkinsという仮想環境を起動してもなぜか下記の画面に行かなかったので断念して一度作成した環境を削除してからここまでの手順をもう一度繰り返します。
ここでダウンロードしておいたCentOS7のISO(CentOS-7-x86_64-Minimal-1810.iso)を指定しますが、Empty(空)となっています。指定する必要があるので右のフォルダをクリックします。
Addをクリックし、ISOを保存した先まで移動して選択します。
Chooseをクリックします。
Startをクリックします。
上下キーで選択、Returnキーで決定です。
Install CentOS7にカーソルをあわせて、Returnキーを押します。
CentOS7のインストールが始まるので少し待ちます。
意外とすぐ終わります。
言語設定です。
日本語を選択して続行をクリックします。
※画面の解像度を変更してしまうとかなり操作しづらくなるのでデフォルトのサイズのまま操作します。
下のほうにスクロールします。
自動パーティシ・・・択されましたをクリックします。
何も弄らずに完了をクリックします。
すると、△マークが消えました
続いて、ネットワークとホスト名をクリックします。
右上のEthernet(enp0s3)をクリックします。
終わったら完了をクリックします。
インストールの開始をクリックします。
ROOTパスワードを作成するのでROOTパスワードをクリックします。
ここでは分かりやすくパスワードを123456にします。
入力したら完了を2回クリックします。
続いて、ユーザーを作成します。
下の画像のように入力します。
フルネームはjenkinsにします。
ユーザー名はフルネームを入力するたびに自動で入力されます。
このユーザーを管理者にするとこのアカウントを使用する場合にパスワードを必要とするにチェックを忘れずに行います。
パスワードは123456にしておきます。
終わったら、左上の完了を2回クリックします。
あとはインストールが完了するまで待ちます。
終わったら、右下の設定完了をクリックします。
終わったら再起動をクリックします。
なんかこんな感じでエラーログが出て再起動できない場合は、設定が原因です。
設定→ディスプレイ→グラフィックスコントローラーをVMSVGAからVBoxVGAに変更します。※これ直すのに丸1日かかりました。
無効な設定が見つかりましたと出ますが、問題ありません。OKを押して再度起動します。
起動時にISOの選択画面が出てもキャンセルでOKです。
無事、CentOS7が起動しました。
localhost login:jenkins
password:123456
でログインします。
画面クリアのショートカットキーを覚えます
clear
とコマンドを打つと文字が全て消えますが、効率が悪いので、ショートカットキーを必ず覚えるようにします。
Command+l(エル)で、clearコマンドと同様の動作が行われます。
IPアドレスを調べます
ip a
と入力すると、IPアドレスを調べることができます。
enp0s3のinetを見ると192.168.0.6となっています。
これが、この仮想環境のIPアドレスになります。
terminalでアクセスするための設定をします
VirtualBoxマネージャーを開いた状態で、ファイル→ホストネットワークマネージャーを選択します。
作成をクリックします。
IPアドレスは192.168.56.101であることを確認します。
vboxnet0が作成されたことを確認し、閉じるをクリックします。
多分みんな同じIPアドレスになると思うのですが、違ったら以降の手順で使うIPアドレスを読み替える必要があります。
さっき作ったVMの設定→ネットワーク→アダプター2にホストオンリーアダプターを設定します。
OKをクリックします。
仮想環境を起動し、ログインします。
localhost login:jenkins
password:123456
nmtuiコマンドを実行します。
このコマンドは、ネットワークの設定をコマンドではなく視覚的に設定できるようにするためのコマンドです。いわるゆGUIというやつですね。
一応コマンドでもできるっぽいですが、そのやり方は割愛します。色んなファイルを開いてviテキストで編集して、とか面倒ですからね。
nmtui画面は上下キーおよびReturnキーで操作します。
上下キーで移動し、Edit a connectionをReturnキーで選択します。
enp0s3をReturnキーで選択します。
IPv6をReturnキーでIgnoreに変更します。
Automatically connectは[X]になっていることを確認できればOKです。
OKにカーソルを合わせ、選択します。
続いて、* * * *を選択します。
(本当はenp0s8とかになっているはずですが、なんかバグってますね。知り合いも同じ表示になってました。)
Profile nameがバグってたらenp0s8にしておきます。
Ipv4 CONFIGURATIONをManualに変更し、Addressesを192.168.56.101/24にします。
続いて、Ipv6をIgnoreに変更します。
Automatically connectは[X]になっていることが確認できればOKです。
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を入力します。
そうすると、terminalでVirtualBox上のCentosにアクセスできます。
これで、以降はVirtualBoxで仮想マシンを起動してCentOSを起動し、適当に最小化しておけば、mac側からCentosを操作することが可能になりました。VirtualBoxで表示される画面での操作はやりづらいですからね。
yumコマンドが使えるかどうかチェック
ためしにyum listを実行します。
本来はこれでyumのアップデートが始まったあと、yumでインストールしたソフトが一覧表示されるのですが、もし上手く行かなかったときの記事を知り合いが書いています。
僕は何もしなくても上手く行きましたが、もし上手く行かないようでしたら参考にしてみてください。
https://qiita.com/yuri2509/items/6715fe853515a8719518
Dockerをインストール
一度ネットワークに接続できるかどうかを確認します。
ping google.com
繋がってたら画像のようになります。
延々とログが流れ続けるので、Control+cで中断します。
googleでdocker for centosと検索し、Install Docker Engine on CentOS | Docker DocumentationのWebページを開きます・
このページを元に、コマンドを上からどんどん入力します。
一応コマンド載せますが、公式ホームページに載ってるコマンドは日々変わるのでコマンド全然違う可能性あります。
まずは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を入力して進めます。
最後に完了しました!と表示されていたらDockerのインストール完了です。
dockerを起動します。
sudo systemctl start docker
何も起こりませんが問題ありません。
公式サイトのコマンド集にはありませんが、起動時に自動でDockerを起動するためのコマンドを実行します。
sudo systemctl enable docker
dockerがインストールされたかどうかを確認するために、下記コマンドでdockerのプロセスを表示してみます。
docker ps
今は管理者で実行しているのでうまく動きますが、CentOSインストール時にjenkinsユーザーを作成したと思います。そちらにsuコマンドを使ってユーザーをjenkinsユーザーに変更し、docker psを実行しても権限がないため失敗します。そのため、下記コマンドを実行して実行できるようにしておきます。
sudo usermod -aG docker jenkins
その設定を反映するには、一度exitでssh接続を解除して再度ssh接続します。
これで、jenkinsユーザーでもdocker psを実行して動作するようになります。
docker composeのインストール
googleでdocker compose installationと検索します。
Install Docker Compose | Docker Documentationを開きます。
少し下に行くとmacとかWindowsとかのタブがあるのでLinuxを選択します。
そこに表示されているコマンドを入力していきます。こちらも日々変わるので、公式サイルを参考にしたほうがいいですが、コマンドは一応載せておきます。
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
すぐ終わります。
コマンドの通り、/usr/local/binにdocker-composeがインストールされます。
cdでディレクトリを移動し、pwdコマンドでパスを表示し、llコマンドでパーティション(-rw-r--r--ってなってるやつ)を表示してみました。
実行権限がないので、このままではdocker-composeの実行権限がありません。そのため、実行権限を付与します。
下記コマンドを実行して実行権限を付与することができます。
sudo chmod +x /usr/local/bin/docker-compose
パーティションが-rw-r--r--から-rwxr-xr-xに変化しましたね!
これは実行権限が付与されたことを表します。
docker-composeがインストールされていたら、バージョンを表示することができるので、その方法で確認します。
docker-compose -v
docker-compose version 1.27.1となっていますね。インストール成功です。
dockerを利用してjenkinsサーバーを構築
docker jenkins imageでgoogle検索します。
jenkins/jenkinsのほうを開きます。こちらはjenkinsのチームがメンテしているDockerイメージです。
jenkinsとなっているほうは公式イメージですが、こちらは間違いなので注意!
そうすると、右側にインストールするためのコマンドが載っているのでコピペしてterminalで実行します。※CentOSにssh接続でログインしている状態でやります
docker pull jenkins/jenkins
これでjenkinsのDockerイメージを取得することができました。
以下のコマンドでjenkinsのDockerイメージがあることを確認します。
docker images
余談ですが、Dockerのデータはどこにあるのでしょう?
それは、Dockerの情報を表示することで調べることができます。
docker info
いっぱい情報が表示されます。
この中にdockerのルートディレクトリが書かれているのですが、探すのが大変です。
そのため、以下のコマンドですぐに見つけることができます。
docker info | grep -i root
grepコマンドは、文字列を検索するのに便利です。
docker infoで表示される文字列から、rootが含まれている行を抽出して表示してくれます。-iをつけることで、大文字小文字の区別なく検索することができます。
/var/lib/dockerがDockerのルートディレクトリであることが確認できました。
docker関連のデータはこの中に保存されます。
続いて、jenkinsのデータを入れるためのディレクトリを作成します。
/home/jenkins/jenkinsの形で作成します。
まずはhomeディレクトリに移動してjenkinsディレクトリを作成し、更にその中にjenkinsディレクトリを作成します。
cd /home
mkdir jenkins
cd jenkins
mkdir jenkins
pwd
これでjenkinsディレクトリを作成することができました。
最後にpwdコマンドで現在のディレクトリを表示しています。
練習のために、mvコマンドを使ってディレクトリ名を変更してみます。
修正前
/home/jenkins/jenkins
修正後
/home/jenkins/jenkins-data
以下のコマンドを実行します。
cd /home
cd jenkins
mv jenkins jenkins-data
ll
cd jenkins-data
pwd
無事ディレクトリ名を変更することができました。
続いて、/home/jenkins/jenkinsの中にdocker-compose.ymlを作成します。
下記コマンドを実行して新規ファイルを作成します。
vi docker-compose.yml
軽くviの説明をしておくと、デフォルトはコマンドを受け付ける通常モードで、iでインサートモードにして文字を入力でき、escでインサートモード解除して通常モードになり、通常モードで「:wq」を実行すると保存して終了、「:q」で閉じる、「:q!」で保存せず強制終了です。
これだけの知識があればとりあえずなんとかなると思います。多分。
viでどんどん書き込んでいきます。
まずはバージョン3を指定します。
version: '3'
続いて、jenkinsのコンテナ名を指定します。
version: '3'
services:
jenkins:
container_name: jenkins
Dockerイメージを指定します。
これは、docker imagesを実行したときのRepositoryに記載のあるイメージ名を指定します。必ず確認してから記述する癖をつけるといいと思います。
version: '3'
services:
jenkins:
container_name: jenkins
image: jenkins/jenkins
続いてポートを指定します。
jenkinsはhttpサーバーなので8080にします。
左側がjenkinsサーバーのポート番号、右側がmacでアクセスする時のポート番号になります。
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となっている情報は古いです。
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の配下に記述しています。
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:
最終的には以下の形になります。
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:
escキーで通常モードに戻り、:wqで保存します。
終わったら、jenkins_homeディレクトリの権限を変更します。
sudo chown 1000:1000 jenkins_home -R
docker-compose.ymlのあるディレクトリに移動して、dockerコンテナを起動します。
docker-compose up -d
末尾の-dはバックグラウンドで実行という意味です。
下記コマンドを実行します。
docker ps
これで、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
「1a193f6a36674f58856aed0b3041bc13」という文字が見えますが、これをコピーしてメモします。
ラストスパートです。
VirtualBox上のCentOSのIPアドレスはなんでしたか?
そう、192.168.56.101でしたね。
では、それにhttpサーバーを示すポート番号8080をくっつけて、「192.168.56.101:8080」とwebブラウザのURLに入力します。
行けるか・・・?
無事、jenkinsにアクセスすることができました〜!
マンモスうれぴ〜!
これでVirtualBoxのCentOS7にDockerコンテナでJenkinsサーバーを構築し、ローカルPCからJenkinsサーバーにアクセスすることができました。
仕上げに、先程メモした1a193f6a36674f58856aed0b3041bc13を貼り付けてアクセスできることを確認します。(この文字列は人によって違うよ!)
大丈夫そうですね。
Jenkinsの使い方については以下で解説しています。良かったら併せてこちらも読んでみてください。
【Jenkinsとは?】Jenkinsのインストールから使い方まで世界一分かりやすく解説します
https://qiita.com/JUN_WEB_FREE/items/c7b42528a87911386391
dockerを勉強するのにオススメのサイト
今回特にdockerについての解説はしていませんが、以下のサイトが分かりやすいので超オススメです!