Docker の設定と動作確認 †Docker を使って、サーバー環境の移動を試してみます。
1 CentOS VM の用意(所要時間約 20分) †VM を作成し、CentOS 6.5 (64bit) をインストールDVDからインストールします。 2 Docker のインストール(所要時間約 2分) †用意出来た VM上の CentOS にログインし、Docker をインストールします。 Extra Packages for Enterprise Linux (EPEL) リポジトリの追加 $ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm docker-io パッケージのインストール $ sudo yum install docker-io --- 中略 --- Installed: docker-io.x86_64 0:0.11.1-4.el6 Dependency Installed: libcgroup.x86_64 0:0.40.rc1-5.el6_5.1 lxc.x86_64 0:0.9.0-2.el6 lxc-libs.x86_64 0:0.9.0-2.el6 Complete! docker のベースになっている lxc 関連ファイルが依存関係を満たすため同時にインストールされます。 Docker デーモンの起動 $ sudo service docker start マシン起動時の Docker デーモン自動起動設定 $ sudo chkconfig docker on インストールが完了したら docker の情報を確認します。 $ sudo docker info [sudo] password for beat: Containers: 0 Images: 0 Storage Driver: devicemapper Pool Name: docker-253:0-797918-pool Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 2195.8 Mb Data Space Total: 102400.0 Mb Metadata Space Used: 0.7 Mb Metadata Space Total: 2048.0 Mb Execution Driver: lxc-0.9.0 Kernel Version: 2.6.32-431.17.1.el6.x86_64 まだインストール直後なのでコンテナもイメージも 0、 3 ベースイメージの取得 (所用時間約 5分) †docker pull コマンドで Django を動作させるサーバーの元になる CentOS のイメージを Docker 公式リポジトリから取得します。 $ sudo docker pull centos 取得した CentOS ベースイメージを確認します。 $ sudo docker images [sudo] password for beat: REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos centos6 0b443ba03958 5 weeks ago 297.6 MB centos latest 0b443ba03958 5 weeks ago 297.6 MB centos 6.4 539c0211cd76 14 months ago 300.6 MB 二つのイメージがダウンロードされました。 $ sudo docker run -i -t -p :8000 centos:centos6 bash bash-4.1# docker image の公式リポジトリは海外のサーバーにあるため、ネットワークの状況や取得するイメージによっては 4 Django 依存パッケージのインストール (所要時間約 2分) †コンテナの shell でインストールを行います。 bash-4.1# yum install python-setuptools easey_install で pip をインストール bash-4.1# easy_install pip 5 Django のインストールと動作確認(所用時間約 3分) †pip で Django をインストールします。 bash-4.1# pip install django コンテナのインタフェースのIPアドレスを確認します。 bash-4.1# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 92:C4:5C:74:DC:F3 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::90c4:5cff:fe74:dcf3/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:238 (238.0 b) TX bytes:328 (328.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Django の最も簡単な動作確認を行います。 bash-4.1# cd /home/ bash-4.1# django-admin.py startproject mysite bash-4.1# cd mysite bash-4.1# python manage.py runserver 172.17.0.2:8000 Validating models... 0 errors found May 26, 2014 - 11:30:12 Django version 1.6.5, using settings 'mysite.settings' Starting development server at http://172.17.0.2:8000/ Quit the server with CONTROL-C. 正常に起動したら VM の CentOS 上のwebブラウザで上記URLにアクセスします。 6 仮想環境のイメージ化(所用時間約 10分) †3 から 5 までの手順を行ったコンテナは bash を抜けると終了してしまい、同じイメージから再度起動しても加えた変更残っていません。 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d17bf0933bfb centos:centos6 bash About 10 minits ago Exited (0) 10 seconds ago agitated_hypatia 95aaa7e741df centos:centos6 bash 5 hours ago Exited (1) 5 hours ago romantic_ptolemy 47ee760a5dca centos:centos6 bash 5 hours ago Exited (0) 5 hours ago cranky_sinoussi 4711136aef8a centos:centos6 bash 5 hours ago Exited (1) 5 hours ago kickass_albattani 5de34b44f509 centos:centos6 bash 5 hours ago Exited (0) 5 hours ago sick_darwin 7b8865d3587b centos:centos6 bash 5 hours ago Exited (0) 5 hours ago dreamy_einstein 上記のような形式で、それまでに起動させたコンテナが表示されます。 $ sudo docker commit d17bf0933bfb django-test イメージが正常に作成されたか確認します。 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE django-test latest f7961339d47b About 2 seconds ago 374.4 MB centos centos6 0b443ba03958 5 weeks ago 297.6 MB centos latest 0b443ba03958 5 weeks ago 297.6 MB centos 6.4 539c0211cd76 14 months ago 300.6 MB 作成したイメージを起動し、先ほど shell 上で加えた変更が利用可能のままになっていることを確認します。 $ sudo docker run -i -t -p :8000 django-test:latest bash bash-4.1# cd /home/mysite bash-4.1# python manage.py runserver 172.17.0.2:8000 Validating models... 0 errors found May 26, 2014 - 11:30:12 Django version 1.6.5, using settings 'mysite.settings' Starting development server at http://172.17.0.2:8000/ Quit the server with CONTROL-C. 内部に変更が保存されており、ブラウザで Django にアクセス出来ることも確認できたら shell を抜けてコンテナを終了します。 $ sudo docker ps -a [sudo] password for beat: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 94cbb5bca398 django-test:latest bash 4 minutes ago Exited (0) 12 seconds ago backstabbing_goldstine d17bf0933bfb centos:centos6 bash About an hour ago Exited (0) About an hour ago agitated_hypatia 95aaa7e741df centos:centos6 bash 5 hours ago Exited (1) 5 hours ago romantic_ptolemy 47ee760a5dca centos:centos6 bash 5 hours ago Exited (0) 5 hours ago cranky_sinoussi 4711136aef8a centos:centos6 bash 5 hours ago Exited (1) 5 hours ago kickass_albattani 5de34b44f509 centos:centos6 bash 5 hours ago Exited (0) 5 hours ago sick_darwin 7b8865d3587b centos:centos6 bash 5 hours ago Exited (0) 5 hours ago dreamy_einstein 最後に起動したコンテナを export します。export 対象はコンテナIDか自動で付けられる識別名で指定します。 $ sudo docker export 94cbb5bca398 > django-test-export.tar $ ls -alh django-test-export.tar -rw-rw-r--. 1 beat beat 362M 5月 26 21:07 2014 django-test-export.tar export したイメージのサイズは django images で確認した django-test の VRTUAL SIZE より少し小さくなり、 7 新たな VM の作成(所用時間約 20分) †コンテナイメージを移動して動作させる先の環境として、1 と同じ構成の VM を再度作成します。 8 Docker のインストール(所要時間約 3分) †2 の手順と同じ手順を行います。 9 仮想環境の再現(所用時間約 3分) †6 の手順で export して作成したアーカイブファイルを scp などで新たな VM 上にコピーし、 $ sudo -s # cat django-test-export.tar | docker import - beat:django-test 0698f1626b7a1e3946de1ec3a3abc38cba6ba91726676341208062e49216bac7 正しく import されたか確認します。 $ sudoo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE beat django-test 5df9c99c50ff 7 minutes ago 364 MB 10 移動したコンテナでの Django 動作確認(所要時間約 2分) †import したイメージを起動します。 $ sudo docker run -i -t -p 8000 beat:django-test bash bash-4.1# bash-4.1# cd /home/mysite bash-4.1# python manage.py runserver 172.17.0.2:8000 Validating models... 0 errors found May 26, 2014 - 13:11:59 Django version 1.6.5, using settings 'mysite.settings' Starting development server at http://172.17.0.2:8000/ Quit the server with CONTROL-C. VM 上の web ブラウザから 172.17.0.2:8000 へアクセスして Django ページの表示が確認できれば 時間から見た効果 †今回の試行では、
で同じサーバー環境を別途一から作るのよりわずかに効率化できた程度ですが、 使ってみた感想 †イメージとコンテナを別々に操作する概念と、コンテナ内へネットワークからアクセスする方法が Dockerfile †今回の試行例では 3〜5 の作業を shell から直接コマンドを入力して行っていますが、
などを一括して行うことができます。 コンテナのネットワーク †docker サービスを起動すると、コンテナ内との接続用にブリッジ docker0 が作られます。 $ /sbin/ifconfig docker0 docker0 Link encap:Ethernet HWaddr 00:00:00:00:00:00 inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::389f:86ff:feca:5735/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:54 errors:0 dropped:0 overruns:0 frame:0 TX packets:38 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:9164 (8.9 KiB) TX bytes:3427 (3.3 KiB) このブリッジは iptables による IPマスカレードで外部ネットワークと接続します。 vethKT14kb Link encap:Ethernet HWaddr FE:92:46:C6:45:B1 inet6 addr: fe80::fc92:46ff:fec6:45b1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:238 (238.0 b) TX bytes:238 (238.0 b) コンテナ内部からはこの veth**--docker0 経由で外部のネットワークへ出て行くことが出来ますが、 $ sudo docker run -i -t -p 8000 beat:django-test bash の代わりに $ sudo docker run -i -t -p 192.168.0.161:80:8000 beat:django-test bash とコンテナ内部の 8000 ポートをホストOS eth0 の IPアドレス 80番へリダイレクトして起動すれば、 更新履歴 †2014/06/13 Docker に関するページの階層整理 Satoshi OTSUKA
|