Docker(ドッカー)実践編(1)

今回は、2017年2月9日の記事 「Docker(ドッカー)とは」の続きで、実際にサーバーへDocker(ドッカー)をインストールし使ってみます。ネタ元は2016年12月に行った社内勉強会の内容となりますので、一部ソフトのバージョン等に違いがあるかもしれません。バージョンは適宜読み替えを行って下さい。

 

・はじめに

今回利用した環境は「SuitePRO V4」です。Docker(ドッカー)などのコンテナをVPS上で動かす場合は、将来コンテナ数の増加によってサーバーのリソース不足が起きる可能性があります。そういった場合に備え、メモリやCPU、またディスクサイズなどのサーバーリソースを拡張出来るVPSやクラウド環境、又は最初からある程度余裕を見てサーバーリソースが大きめのVPSで構築を行うのが望ましいです。(VPSクラウドを利用する場合は6GタイプのCentOS7を使って下さい。)

 

1.VPSへのDockerインストール
2.コンテナを使ったWebサーバーの構築
3.VPS上のコンテナを確認
4.VPS内ネットワークの確認
5.VPS内のコンテナ及び、ネットワークの状態(まとめ)

 

1.VPSへのDockerインストール

・初期設定

VPSはコントロールパネルからCentOS7をインストール後、下記の設定を行った状態となっています。
1)rootパスワード設定、dockeradminユーザー作成、パスワード設定
2)yum –y update
3)SELinux disabled
4)firewalldの停止、自動起動停止
5)SSH接続元制限の解除(/etc/hosts.deny)
6)SSHポートの変更(port 220)とrootログインの禁止
7)dockeradmin の sudo設定(/etc/sudoers.d/dockeradmin)

 

・VPSへのSSH接続

ここではポート番号は ”220”、ユーザー名は “dockeradmin” とします。

# ssh –p220 dockeradmin@{VPSのIP}

 

・Dockerセットアップ

1)Dockerリポジトリの追加
-CentOS7標準リポジトリにもDockerはありますが、バージョンが古いためDocker公式リポジトリを追加設定します。

$ sudo cp /home/dockeradmin/docker.repo /etc/yum.repos.d/
 
$ sudo tee /etc/yum.repos.d/docker.repo

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

 

2)Dockerパッケージのインストール
-バージョンが1.12.XX であることを確認(2017年3月時点は1.13.XX)
-Repositoryが”dockerrepo”になっていることを確認
-途中でy/d/N の選択画面となるので、y [Enter] を入力

$ sudo yum install docker-engine
~~~省略~~~

============================================================================

 Package                        Arch                 Version                             Repository                Size
 
============================================================================

Installing:

 docker-engine                 x86_64               1.12.3-1.el7.centos                 dockerrepo                19 M
 
~~~省略~~~

 

3)Dockerデーモン自動起動設定

$ sudo systemctl enable docker.service

Created symlink from ... to ...

 

4)Dockerデーモンの起動

$ sudo systemctl start docker

 

5)Dockerデーモン起動確認

$ sudo systemctl status docker
 
● docker.service - Docker Application Container Engine
  
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   
   Active: active (running) since Wed 2016-10-26 14:18:53 JST; 21h ago
    
     Docs: https://docs.docker.com
     
 Main PID: 6294 (dockerd)
 
~~~ 省略 ~~~

 

6)Dockerグループへ作業用一般ユーザーを追加

$ sudo usermod -aG docker dockeradmin

 

7)一旦dockeradmin からログアウトし、再度SSH接続してください。

 

・コンテナの起動と基本操作

— Docker TIPS —

$ docker help dockerコマンドのヘルプを表示
$ docker help {COMMAND} {COMMAND}に関するヘルプを表示
$ docker  ps 起動中コンテナ一覧を表示する。-a オプションで停止中コンテナも表示
$ docker create コンテナを作成
$ docker run コンテナ内でコマンドを実行(コンテナを起動)
$ docker start 停止中コンテナを起動
$ docker stop 起動中コンテナを停止
$ docker stats 起動中コンテナのリソース使用状態を表示
$ docker exec コンテナ内でコマンドを実行

 

2.コンテナを使ったWebサーバーの構築

1)nginxコンテナの起動
下記コマンドを実行すると、DockerHubからDockerイメージを自動的にダウンロードします($ docker pull相当)。その後、ダウンロードしたDockerイメージからコンテナを起動します。

 

・nginxコンテナを起動するコマンド

docker run --name nginx1 -p 8001:80 -d nginx

コマンド説明)
–name nginx1 立ち上げるコンテナの名前です。
-p 8001:80 コンテナの80番ポートをVPSの8001番ポートに割り当てます。
-d nginx コンテナイメージを指定します。

 

実際に上記のコマンドを投入すると以下のようになります。

$ docker run --name nginx1 -p 8001:80 -d nginx

Unable to find image 'nginx:latest' locally  ←ローカルにイメージが無いことを確認

latest: Pulling from library/nginx  ←DockerHubからnginexのイメージをpull

43c265008fae: Pull complete
 
e4c030a565b1: Pull complete

685b7631c1ce: Pull complete
 
Digest: sha256:dedbce721065b2bcfae35d2b0690857bb6c3b4b7dd48bfe7fc7b53693731beff

Status: Downloaded newer image for nginx:latest

e61899fbca58d65a21e02c78886f894ab1e171acf98d52650bd167031a70646e

 

2)nginxコンテナ起動確認

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS

PORTS                           NAMES

e61899fbca58        nginx               "nginx -g 'daemon off"   56 seconds ago      Up 55 seconds

443/tcp, 0.0.0.0:8001->80/tcp   nginx1

 

3)ブラウザで下記URLを開くと、起動したnginxへ接続します。

http://{VPSのIP}:8001/

Webサーバーを立ち上げるだけでなく、以下でもう少し詳しくVPS上で動くコンテナを確認してみます。

 

3.VPS上のコンテナを確認

・nginxコンテナの確認

1)コンテナ内でbashを起動
ホスト側からコンテナ内でbashを起動し、コンテナ内を確認します。

$ docker exec -it nginx1 bash

root@e61899fbca58:/#

 

2)コンテナ内のプロセス起動状態確認
プロセスの起動状態確認。コンテナ内では、nginxプロセスのみが起動している(bash、psは自身のプロセス)。
-nginxのpidは”1”になっている。

root@e61899fbca58:/# ps –eaf

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 03:10 ?        00:00:00 nginx: master process nginx -g daemon off;

nginx        5     1  0 03:10 ?        00:00:00 nginx: worker process

root        16     0  0 03:25 ?        00:00:00 bash

root        20    16  0 03:25 ?        00:00:00 ps -eaf

 

3)コンテナ内のネットワークインタフェース状態確認
-コンテナ内にeth0が存在する。
-172.17.0.0/16 のセグメントからIPアドレスが振られている。

root@e61899fbca58:/# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
   
    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
       
54: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    
    inet 172.17.0.2/16 scope global eth0
      
       valid_lft forever preferred_lft forever
       
    inet6 fe80::42:acff:fe11:2/64 scope link
       
       valid_lft forever preferred_lft forever

 

4)コンテナ内のbashを終了する

root@e61899fbca58:/# exit

exit

$

 

4.VPS内ネットワークの確認

— Docker TIPS —

$docker inspect {CONTAINER} {CONTAINER}コンテナに関する詳細情報を表示

 

1)ホスト側VPSにブリッジ確認用パッケージをインストール

$ sudo yum install bridge-utils

 

2)ブリッジ状態の確認
-docker0ブリッジが存在し、vethデバイスが接続されている

$ brctl show

bridge name     bridge id               STP enabled     interfaces

docker0         8000.0242fbadc9e9       no              vethe9ca843

 

3)ブリッジに付与されているIPアドレスの確認
-172.17.0.1/16 が付与されている

$ ip addr

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
   
    link/ether 02:42:fb:ad:c9:e9 brd ff:ff:ff:ff:ff:ff
    
    inet 172.17.0.1/16 scope global docker0
      
       valid_lft forever preferred_lft forever
       
    inet6 fe80::42:fbff:fead:c9e9/64 scope link
       
       valid_lft forever preferred_lft forever

 

4)コンテナに割り振られているIPアドレス情報の確認(コンテナ内に入らず、docker inspectコマンドを使用する)
-172.17.0.2が付与されている

$ docker inspect nginx1 | grep IPAddress
           
            "SecondaryIPAddresses": null,
            
            "IPAddress": "172.17.0.2",
                   
                    "IPAddress": "172.17.0.2",

 

5)ホスト側からコンテナに付与されたIPへPING

$ ping -c 1 172.17.0.2

PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.

64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.050 ms

 

6)ホスト側からコンテナ内のnginxへ接続

$ curl -I http://172.17.0.2/

HTTP/1.1 200 OK

Server: nginx/1.11.5

Date: Wed, 26 Oct 2016 07:40:34 GMT

Content-Type: text/html

Content-Length: 612

Last-Modified: Tue, 11 Oct 2016 15:03:01 GMT

Connection: keep-alive

ETag: "57fcff25-264"

Accept-Ranges: bytes

 

5.VPS内のコンテナ及び、ネットワークの状態(まとめ)

3、4で実施したコマンドでの確認結果を要約すると、以下の図のような状態になっています。

図:VPSの内部状況(ネットワーク)

 

 

 

 

 

 

 

いわさき
テクノロジー&オペレーション開発本部所属             (監修:とみなが)                     

オススメ記事

関連サービス

VPS VPSクラウド