開発用サーバーをDockerで運用したい 〜その1〜

こんにちは。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 で破棄されたコンテナも含めてコンテナの起動状態が確認できる

それでは次回もお楽しみに!

Codeigniter,Laravelを利用してサーバーサイドプログラミングを担当してます。マンガとゲームとアニメとやきとんが大好きです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です