初心者がDockerと戯れてみた

2014-08-09
Docker

そろそろimmutable infra structure的な所も知見を貯めておかないと行けないなのでやってみた。
巷でもコンテナ♪コンテナ♪と声が聞こえるし。

(1) docker使えるVPSを契約

現時点で、CoreOSやCentOS7を使ってのdockerの使用実績があるのはSakuraが一番っぽい。
なんと2週間お試しがあるので、とりあえずはタダ。要クレジットカードだが。☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ  

(2) CoreOSをぶっこむ。

参考サイト さくらのVPSにCoreOSをインストールしてDocker専用機にする - Qiita

かんたんにまとめると。

  • CoreOSのisoイメージをマウントして起動
  • coreos-installっていうコマンドでOSをインストールするイメージ。

インストール時に、ymlで記述したネットワーク設定とかを指定しておくと、インストール後のOSのネットワーク設定を指定できる。
※そうしておかないと、ログインも出来ない文鎮CoreOSが出来る。

しかし・・・・。 CoreOSのインストールや、SSH接続までは順調だったが、dockerコマンドで試しにwordpress立ち上げようとしたら、SSH接続が死んだ。

そして、何も出来なくなった・・・。再起動しても駄目・・・。リモートコンソールも駄目・・・。完全なる文鎮。
というわけで、CoreOSはまだまだ不安定という素晴らしい知見を得た。 そもそも、試したいのはdockerであって、CoreOSじゃないし。CoreOSに拘って時間を浪費するなかれという方針で決定。

(3) CentOS7をぶっこむ。

sakuraでは、カスタムインストールっていう項目から出来ました。 でも結構時間かかる(30分くらい)から気をつけて。  

(4) dockerインストール

参考サイト DockerをCentOS 7にインストールする方法 - Life with open mind

CentOSは仕事で慣れているので、スムーズ。 dockerのインストールもepelリポジトリから、ワンタッチyum。

(5) dockerと戯れる。

やっと本題。だけど、イマイチ戯れ方が分からない・・・。

サービス単位でdocker立ち上げても、ピンと来ないので、centosのイメージを使って、今までのVM的に使ってみる。
まずは、dockerのcentosのイメージをゲッツして、runだ!

1
2
3
4
5
6
7
8
$ docker pull centos
$ docker images centos
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos6 b1bd49907d55 9 days ago 212.5 MB
centos centos7 b157b77b1a65 9 days ago 243.7 MB
centos latest b157b77b1a65 9 days ago 243.7 MB
$ docker run centos:centos7 cat /etc/centos-release
CentOS Linux release 7.0.1406 (Core)

上のコマンドの意味は、centos7の仮想イメージを立ち上げて、catを実行しています。 実行自体は、一瞬で終わるので、いかにコンテナ仮想化が軽量であるのかってのが、よく分かる。

次に、centos7を起動して、bashを実行。itオプションで標準入出力をhostに繋げる。

1
2
3
4
5
$ docker run -it centos:centos7 /bin/bash
bash-4.2# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.0 0.0 11740 1628 ? Ss 13:46 0:00 /bin/bash
root 6 0.0 0.0 19748 1204 ? R+ 13:46 0:00 ps aux

おお、centos7からcentos7を立ち上げて繋がった!Σd(゚∀゚d)イカス!

次に、立ち上げたコンテナ内でファイルを作ってみて、もう一度立ち上げて見てみよう。

1
2
3
4
5
6
7
8
9
10
$ docker run -it centos:centos7 /bin/bash
bash-4.2# touch /tmp/hogehoge
bash-4.2# ls -l /tmp
total 0
-rw-r--r--. 1 root root 0 Aug 9 13:53 hogehoge
bash-4.2# exit
exit
$ docker run -it centos:centos7 /bin/bash
bash-4.2# ls -l /tmp
total 0

な、ない(;・∀・) 作ったはずのファイルが無い!

その通り、centos7というベースイメージで立ち上げているので、ベースイメージに変更がない限りは、毎回同じ状態で立ち上がる!
では、次はファイルを作った状態をベースイメージに変更して立ち上げてみる。

dockerでcentos7を立ち上げて適当なファイルを作る。

1
2
3
4
$ docker run -it centos:centos7 /bin/bash
bash-4.2# touch /tmp/hogehoge
bash-4.2# exit
exit

dockerのプロセス一覧を表示。(aオプションで終了したプロセスも表示) 直近のプロセスのハッシュ名で、commit

1
2
3
4
5
6
7
8
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ca702f64d97 centos:centos7 /bin/bash 37 seconds ago Exited (0) 24 seconds ago silly_almeida
e2e18316f3d1 centos:centos7 /bin/bash 52 minutes ago Exited (130) 37 seconds ago loving_wozniak
1b8b61ac078d centos:centos7 /bin/bash 52 minutes ago Exited (1) 52 minutes ago mad_hawking
01a0dca7417a centos:centos7 /bin/bash 57 minutes ago Exited (0) 52 minutes ago berserk_darwin
$ docker commit 8ca702f64d97 centos:test
ba7f5029cb26a6e4fc33189245e846b22b2e451ae13784a925a358660ea1408f

commitしたイメージ名で立ち上げ直して、ファイルがあるかどうかチェック

1
2
3
4
$ docker run -it centos:test /bin/bash
bash-4.2# ls -l /tmp
total 0
-rw-r--r--. 1 root root 0 Aug 9 14:45 hogehoge

ある!ファイルがある! ベースのOSイメージに変更を加える手順はこれにて理解できました。 まあ、VM使っている時と似たような感じですね。起動速度は超爆速ですがね!!

本日のまとめ

  1. dockerと戯れるならcentos7がお勧め。CoreOSはまだ不安定っぽい。
  2. 有名なディストリビューションであれば、officialなベースイメージが落っこちているのでdocker pullでゲット
  3. ベースイメージを発展させて行くには、commitして保存する必要がある。

次はベースイメージから、開発用サーバのベースを作ってみよう。