こんにちは。shiro96です。
前回の記事では経緯と構想を書いたので、今回はDockerインストールと、コンテナを1つ立ち上げてみたいと思います。
Dockerのインストール
対象となるサーバーはCentOS 6.5なのでDockerがサポートされています。
EPELリポジトリも追加済なので、Dockerをインストールしてみました。
# yum install docker-io -y
...
...
Complete!
# which docker
/usr/bin/docker
# docker -v
Docker version 1.4.1, build 5bc2ff8/1.4.1
何事もなく無事完了しました。
Dockerの起動
Dockerを起動してみました。
ついでに自動起動設定もオンにしておきます。
# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
# chkconfig docker on
CentOSをDockerコンテナとして動かす
Dockerのインストールと起動が終わったので、CentOSをコンテナとして実行してみたいと思います。
Docker Hub RegistoryにはDockerのイメージがいっぱいあります。
CentOSをにあるlatestをいれてみたいと思います。
gitと同じ様に、Dockerにはpullというコマンドが用意されていて、Docker Hub Registoryからイメージをダウンロードできます。
# docker pull centos
FATA[0000] Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
っと、、、エラーがでちゃいました。。。。
docker -dしろって書いてあるので、やってみましょう。
# docker -d
INFO[0000] +job serveapi(unix:///var/run/docker.sock)
INFO[0000] WARNING: You are running linux kernel version 2.6.32-431.1.2.0.1.el6.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.8.0.
docker: relocation error: docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
libdevmapperが見つかってないようなので、いれてみましょう。
# yum install device-mapper -y
...
...
Complete!
入りました。では、再チャレンジです。
# docker pull centos
centos: The image you are pulling has been verified
511136ea3c5a: Pull complete
5b12ef8fd570: Pull complete
0bc55ae673f7: Pull complete
Status: Downloaded newer image for centos
いいですね!
ダウンロードしたイメージはdocker imagesで確認できます。
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos 0bc55ae673f7 2 days ago 215.8 MB
やっと起動です。
と思いきや、、ここでもう一つトラブル発生。
突然SSHの接続が切れ、HTTPアクセスも不可能に。。
どうやらカーネルのバージョンがあがったらしく、再起動が必要のようでした。
VPSコンソールからサーバーを再起動させてSSH再接続。
大丈夫そうです。
気を取り直して、先程ダウンロードしてきたcentosのイメージから、dockerコンテナを立ち上げました。
# docker run -i -t -d centos
-dオプションをつけるとバックグラウンドで起動ができます。
起動確認をしてみましょう。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5320a07093e2 centos:latest "/bin/bash" 8 minutes ago Up 8 minutes loving_goodall
docker psで立ち上がっているコンテナの一覧を確認できます。
コンテナを立ち上げると、CONTAINER IDが割り当てられていました。
gitのcommit番号みたいなもんでしょうか?
コンテナへの接続
起動中のコンテナに接続するためにはdocker attach [CONTAINER ID]で接続できます。
# docker attach 5320a07093e2
[root@5320a07093e2 /]#
コンテナ内のCentOSはまっさらな状態なので、試しにwhichとvimをいれてみます。
[root@5320a07093e2 /]# yum install which vim
...
...
Complete!
[root@5320a07093e2 /]# which vim
/usr/bin/vim
こんな感じで、イメージからコンテナを作成できてしまえば、あとはいつも通り必要なミドルウェアを入れていけばOKとなります。
Dockerの落とし穴
whichとvimをインストールしたので、一旦コンテナから出てみましょう。
[root@5320a07093e2 /]# exit
exitするとコンテナから出る事ができますが、このタイミングで立ち上げたコンテナが破棄されます。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
先程あったCONTAINER ID 5320a07093e2がありません。
-aオプションを付けると、破棄されたコンテナが確認できます。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5320a07093e2 centos:latest "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago lonely_galileo
たった4文字の「exit」で頑張って立ち上げたコンテナが消えてしまいました。。。
これでは使い物になりません。
次回はコンテナの状態を維持する方法をやってみたいと思います。
今回のまとめ
- docker pull {image}:{tag} でDocker Hub Registoryからimageをダウンロードできる
- docker run -i -t -d {image}:{tag} でダウンロードしたimageからコンテナをバックグラウンド起動できる
- docker ps でコンテナの起動状態が確認できる
- docker attach [CONTAINER ID]でコンテナに接続ができる
- exitするとコンテナが破棄される
- docker ps -a で破棄されたコンテナも含めてコンテナの起動状態が確認できる
それでは次回もお楽しみに!