Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

Windows10上のVM(CentOS)にDockerをいれてどんなものか体感する手順。

Dockerについて前々から気になっていたのでWindows10にDockerをいれてどんなものなのか体感するまでの 手順を書きたいと思います。Window10でやってますが、別にVirtualBoxが入ればWindows10でなくても問題ないです。
はじめに書いておきますが、わりと簡単に体感できます。
Linuxとかに慣れているひとであれば1hourくらいで体感できるのではないでしょうか。

まず、基本的にDockerはLinux上で動作するものということなのでLinuxVMにいれます。
Windows版もあるみたいですがHyper-Vとか必要っぽいので。

Dockerとは?

Dockerに興味があるひとがこの記事にたどり着いていると思うので説明不要だと思いますが、簡単に言えば仮想サーバ構築ツールです。
VMと異なるのはサーバごとにOSのインストールは不要で、1つのサーバ上に複数のサーバの構築ができます。
構築したサーバはイメージ化して配布できるので誰がやっても同じ環境が構築できます。
また、各種サーバアプリのイメージが公開されており、コマンド1つで構築可能です。
僕はインフラ周りはあまりやらないのですが、テスト環境構築とかで使えるのではないでしょうか。

www.docker.com

Oracle VirtualBoxをインストール

VMはなんでもいいんですが、使い慣れているVirtualBoxをインストールします。
特に何も注意すべきところはないのでインストーラを次へ次へでOKです。

Oracle VM VirtualBox

CentOSをダウンロード

Linuxもなんでもいいんですが、RedHat系で人気のあるCentOS 7をダウンロードします。
以下のサイトからMininal ISOをダウンロードしてください。

Download CentOS

仮想マシンを作成

VirtualBoxを起動して、新規を選択し、名前にCentOSと入れるとOSが選択されます。
あとはそのまま次へ次へで仮想マシンを作成します。

作成した仮想マシンの設定でネットワークを"NAT"から"ブリッジアダプター"に変更します。
NATでもできなくないですが、ポートフォワードを設定するのがめんどいので。

f:id:finalstream:20180917004323p:plain

ブリッジにし忘れると以下のように運が悪いとドハマリします。

final.hateblo.jp

仮想マシンを起動してCentOSをインストール

起動したらダウンロードしたISOを指定して、Install CentOS 7を選択します。 あとはGUIなので次へ次へですが、ネットワークはONにしといたほうがよいかもです。
インストール中にrootのパスワードを設定します。
環境にもよりますが、インストールは10minくらいで終わると思います。
再起動してログインできればOKです。
ログインしたら以下のコマンドをたたいてipアドレスを確認します。 以下の例でいうと2:のinetの右横のがipアドレス(10.154.54.86)です。

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:48:1e:42 brd ff:ff:ff:ff:ff:ff
    inet 10.154.54.86/24 brd 10.154.54.255 scope global noprefixroute dynamic enp0s3
       valid_lft 5420sec preferred_lft 5420sec
    inet6 fe80::b4fc:2848:14de:b0ca/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

RLoginをダウンロード

VirtualBoxだとカーソルが持ってかれて使いにくいのでWindowsからCentOSを操作できるように ターミナルソフトをいれます。なんでもいいですが、インストール不要で使いやすいRLoginを使います。
以下のサイトからダウンロードして任意の場所に解凍します。

rlogin/telnet/ssh(クライアント)ターミナルソフト

RLoginでCentOSに接続

RLogin.exeを起動します。
新規接続でsshを選択して、さきほど確認したipアドレスをいれます。 あとはユーザをroot、パスワードを決めたやつをいれてOKします。
初回接続の際にいろいろ聞かれますが、はいでOK。

Dockerをインストール

いよいよDockerです。RLoginの画面で以下のコマンドを流すだけでインストールされます。

[root@localhost ~]# yum install -y  docker

Dockerを起動

起動は以下のコマンドを実行するだけです。

[root@localhost ~]# systemctl start docker

起動しているか確認。active(running)になっていればOK。

[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 月 2018-09-17 01:48:28 JST; 7s ago
     Docs: http://docs.docker.com
 Main PID: 10950 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─10950 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-pat...
           └─10954 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/...

 917 01:48:26 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:26.886529003+09:00" level=info msg="libcontainerd: new containerd process, pid: 10954"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.049257313+09:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.050844195+09:00" level=info msg="Loading containers: start."
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.070560827+09:00" level=info msg="Firewalld running: true"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.282047259+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0....IP address"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.479554825+09:00" level=info msg="Loading containers: done."
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.523279502+09:00" level=info msg="Daemon has completed initialization"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.523307835+09:00" level=info msg="Docker daemon" commit="6e3bb8e/1.13.1" graphdriver=overlay2 version=1.13.1
 917 01:48:28 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.538125695+09:00" level=info msg="API listen on /var/run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.

DockerでWEBサーバを構築

上記までの手順ではDockerのエンジンだけインストールされているのでこっから本領発揮のとこです。
apache webサーバを構築してみます。 Dockerは各種アプリのイメージが公式的に公開されており、そのイメージをダウンロードしてローカルサーバで動かす仕組みとなってます。
どんなイメージがあるかは以下のサイトで確認できると思いますが、RedminePostgreSQL、Jenkinsなどわりとなんでもあります。

https://hub.docker.com/explore/

なので以下のコマンドを流すだけで、構築ができてしまいます。

[root@localhost ~]# docker run -d -p 80:80 --name httpd httpd

起動したかは以下のコマンドで、httpdがいればOKです。

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
3fc96caa505a        httpd               "httpd-foreground"   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp   httpd

WEBサーバの起動を確認

Windowsからブラウザを起動して、ipアドレスをアドレスバーにいれてたたくと さみしいapacheのサンプル画面がでれば起動しているということです。

f:id:finalstream:20180917020828p:plain

DockerをGUIで操作

dockerですが、CUIで操作するのは結構たいへんです。
GUIで操作するツールも用意されています。

これもDockerでいれちゃいます。

[root@localhost ~]# docker run -d -p 8080:8080 --name rancher-server rancher/server

途中でファイアウォールが有効になっているうまくうごかないところがあるので切っておきます。

[root@localhost ~]# systemctl stop firewalld

起動後、Windowsの画面のブラウザからipアドレス:8080でアクセスすると以下の画面が表示されればOKです。
スペックによりますが、起動は1~2minくらいかかります。

f:id:finalstream:20180917024544p:plain

デフォルトは英語ですが、右下のところで日本語に変更できます。
まず管理者メニューのアクセスコントロールでLOCALを選択し、管理者を登録します。

その次にインフラストラクチャでホストを選択します。
ホストを追加して保存します。

以下のコマンドをコピー&ペーストし実行しホストを登録します Rancher:と書いてあるのでコマンドをターミナルで流します。
こうすることでサーバとの紐づけ自動で行ってくれます。

# 内容は環境によって異なります。以下は私の環境での例です。
sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://10.154.54.86:8080/v1/scripts/06051ED6561D2F86C07A:1514678400000:UCPy9qbQ1dQ2KCue0CLu076A

あとはホストの画面で見れば、Dockerで動いているもの(コンテナ)が確認できます。

最後に

まだまだ奥が深いDockerですが、ここまでなんとなくDockerについて手軽な感じが伝わったかと思います。
僕もまだまだ勉強中ですが、素敵なDockerライフを。