つい先日、Mac OS XにDockerをインストールしたばかりですが、早速、VPSサーバを1つ空けて、Dockerをインストールしてみました。
まだどれくらいのポテンシャルがあるのか、実用に耐えうるのか見極めるまではいってませんが、ちょっと考えていることもあって、試してみるための第一歩という感じです。
Dockerに対応しているのは CentOS 6系(以上)
現在、CentOSの中でDockerに対応しているのは6系です。もちろん7がリリースされれば対応しているでしょうから、ここでは6系以上と書いておきます。
ですので、Scientific Linuxでも同様に6系以上であれば対応しているかと思います。
(正確には6.5からの対応ですが、6.4以下でもupdateかければ動作するとのこと)
まずはepelをインストール
Dockerはepelパッケージにて提供されているので、まずはepelパッケージをインストールします。
ほとんどの方がインストール済みかとは思いますが、インストール方法を書いておきます。
[bash]# yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm[/bash]
Dockerのリポジトリをダウンロードする方法もあります
また、Dockerのリポジトリを直接ダウンロードしてインストールする方法もあります。
これから始める「DockerでかんたんLAMP環境 for CentOS」 | さくらのナレッジ
[bash]# wget -P /etc/yum.repos.d http://www.hop5.in/yum/el6/hop5.repo[/bash]
yumでDockerをインストール
続いて、yumコマンドでDockerをインストールします。
[bash]# yum -y install docker-io[/bash]
インストールが終わったら起動してみます。
[bash]service docker start[/bash]
無事に起動を確認したら、OS起動時に自動起動するようにしておきましょう。
[bash]# chkconfig docker on[/bash]
実際に動作を確認してみる
いろいろなサイトでいくつか確認の方法が掲載されていましたが、ここは前述した「さくらのナレッジ」で田中社長が紹介されている「bash経由でホスト名を取得し、プロセス一覧とインターフェイス一覧を表示」するようにしてみます。
[bash]# docker run -t centos /bin/bash -c "hostname && ps aux && ifconfig"
Unable to find image ‘centos’ locally
Pulling repository centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete
5893aa9074aa
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 2.0 0.0 11300 1296 ? S 05:48 0:00 /bin/bash -c ho
root 7 0.0 0.0 13368 1052 ? R 05:48 0:00 ps aux
eth0 Link encap:Ethernet HWaddr D2:BE:CB:D4:B6:5C
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::d0be:cbff:fed4:b65c/64 Scope:Link
UP BROADCAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:90 (90.0 b) TX bytes:90 (90.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)
[/bash]
centosのコンテナイメージをダウンロードし、コンテナを起動、コンテナ内でコマンドを実行しました。
ネットワークインターフェイスを見て頂ければ分かるかと思いますが、”172.17.0.2″とローカルIPアドレスが指定されています。
もちろん、VPS本体にはグローバルなIPアドレスが指定されていますので、全く違うネットワーク空間の中にこのコンテナがあることが理解出来ます。
コンテナの操作はこんな感じ
こうやって実行したコンテナ、その後はどうなっているのでしょうか?
現在実行されているコンテナを確認してみます。
下記コマンドを実行してみて下さい。
[bash]# docker ps[/bash]
コンテナIDなどは表示されないと思います。
つまり、指定されたコマンド、今回の場合は「bash経由でホスト名を取得し、プロセス一覧とインターフェイス一覧を表示」というコマンドを実行し終えると、コンテナを破棄してしまいます。
これがコンテナの特徴であり、Dockerなどのコンテナ型仮想マシンの仕組みを分かりにくくしている大きな部分でもあります。
では、先程実行したコンテナは完全になくなったか?というとそういうわけでもありません。
下記コマンドを実行してみて下さい。
[bash]# docker ps -a[/bash]
先程実行したコンテナの情報が表示されました。
では、シェルにログインしたまま、つまり実行したままにしてみましょう。
[bash]# docker run -i -t centos /bin/bash
bash-4.1#[/bash]
シェルにログインしたままの状態になりました。
試しにこの状態で”yum update”をかけてみたら、問題なく実行されました。
コンテナから抜けるには”exit”です。
但し、”exit”で抜けるとコンテナが破棄されます。どうやら[Ctrl]+p / [Ctrl]+q で抜けると破棄されないようなのですがうちの環境では効きませんでした。
とりあえず、exitで抜けて”docker ps”で確認しても案の定何も表示されませんので、”-a”オプションを付けてみます。
[bash]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
351fa93b227c centos:centos6 /bin/bash 6 minutes ago Exited (0) About a minute ago sad_poincare
5893aa9074aa centos:centos6 /bin/bash -c ‘hostna 24 minutes ago Exited (0) 24 minutes ago high_ritchie[/bash]
“yum update”を実行した方のコンテナも表示されました。
破棄したコンテナを再度利用する場合はcommitコマンドを使うようです。
つまり、リポジトリにコミットした上で、新しくコンテナを作る、ということらしいです。
先程”yum update”を実行した方のコンテナをコミットしてみます。
[bash]# docker commit 351fa93b227c centos:new[/bash]
“commit”の後の文字列は、先程”docker ps -a”で表示した一覧の”CONTAINER ID”欄になります。
指定したIDのコンテナをコミットして再生成〜起動してくれます。
更に再生成したコンテナは”docker images”で一覧表示できます。
[bash]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos new a530524f9ab3 3 minutes ago 481.5 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[/bash]
先程、再生成したコンテナを起動し、ログインしてみます。
[bash]# docker run -i -t centos:new /bin/bash
bash-4.1#[/bash]
これでコンテナ内での作業が可能になります。
終了する場合は”exit”コマンドでコンテナから抜けることが出来ます。もちろんコンテナは破棄されます。
何はさておき、使ってみましょう
ここまででは何が便利なのかさっぱり分からない人も多いかと思います。
更にはdockerfileの使い方などを知ることでその便利さに気付くことになるかと思います。
[tmkm-amazon]4873116651[/tmkm-amazon]