ここ1,2年で注目を集めている仮想化技術の1つ「Docker」について、今更感がありますが試していきたいと思います。
他の仮想化技術との違いや特徴、開発環境として使っていくにはどうすればいいかなどを紹介していきたいと考えています。
これまでの連載
- Dockerであそぶ(1)DockerToolboxのインストール
- Dockerであそぶ(2)Centos7を実行する ← 本記事!
- Dockerであそぶ(3)Apacheを使う
- Dockerであそぶ(4)Apacheの設定を変える
- Dockerであそぶ(5)Apache-PHP連携
- Dockerであそぶ(6)Apache-PHP-Mariadb連携
- Dockerであそぶ(7)PhpMyAdminのインストール
- Dockerであそぶ(8)docker-composeでコンテナをまとめて管理
- Dockerであそぶ(9)AWS EC2でdocker-composeを使う
- Dockerであそぶ(10)docker-machineを使ってAWS(EC2)にDockerホストを構築する
イメージを取得する
前回はHelloWorldを出力し動作確認をするところにとどめましたが、いよいよコンテナを起動してみたいと思います。
まずは、コンテナのイメージを取得します。自分で1から作ることもできるはず(未確認)ですが、公式サイト(Docker Hub)からよく使われるディストリビューションであればダウンロードすることが可能です。
Centosの最新版(7.1)を使ってみます。
以下のURLにアクセスします。
https://hub.docker.com/
一番上に表示されているものが「official(公式)」のイメージになります。「centos」というのがイメージの名前になります。
一般ユーザーが作成したイメージもこのサイトに登録することができ、その場合は「ユーザー名/任意の名前」とするのが慣例のようです。
たとえば私であれば「sudoy/centos7」といった具合です。
では、イメージの名前がわかりましたのでDocker Quickstart Terminalを起動します。
起動したら、以下のコマンドを実行してください。
$ docker pull centos:latest
イメージ名の後ろに付いている「latest」は「タグ」と呼ばれるもので、この場合は最新版ということを表します。詳しくはDocker Hubで検索した時に「DETAILS」をクリックしてみてください。
実行結果は以下のようになるはずです。
sudoy@SUDOY-NOTE MINGW64 ~ $ docker pull centos:latest latest: Pulling from library/centos fa5be2806d4c: Pull complete 0cd86ce0a197: Pull complete e9407f1d4b65: Pull complete c9853740aa05: Pull complete e9fa5d3a0d0e: Pull complete Digest: sha256:c96eeb93f2590858b9e1396e808d817fa0ba4076c68b59395445cb957b524408 Status: Downloaded newer image for centos:latest
ちゃんとイメージを取得できたか確認しましょう。以下のコマンドを実行してください。
$ docker images
sudoy@SUDOY-NOTE MINGW64 ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6ba66e537a 4 weeks ago 960 B centos latest e9fa5d3a0d0e 4 weeks ago 172.3 MB
前回HelloWorldを出力するときに使ったイメージと、いま取得した「centos」のイメージが登録されていることがわかります。
一番右の「VIRTUAL SIZE」をみると、centosのイメージがわずか172MB程度であることもわかります。(少ない!!)
イメージを実行する
イメージを取得することができましたので、実行してみましょう。以下のコマンドを実行してください。
$ docker run -it centos:latest bash
sudoy@SUDOY-NOTE MINGW64 ~ $ docker run -it centos:latest bash [root@fdc464d19656 /]#
コマンドを実行するとすぐにプロンプトが変わり、centosへ接続されたことが確認できたかと思います。
この一瞬で仮想マシンが起動したことになります。(早い!!)
オプションの意味はそれぞれ以下のようになっていますが、ひとまずおまじないと思ってください。
オプション | 意味 |
---|---|
-i (–interactive) | コンテナの標準入力を開く。/bin/bashなどでコンテナを操作する際に指定。 |
-t (–tty) | tty(端末デバイス)を確保する。/bin/bashなどでコンテナを操作する際に指定。 |
以下のコマンドを実行してコンテナに足あとを残しておきましょう。
# touch techprojin
[root@15ad0cb87291 /]# touch techprojin [root@15ad0cb87291 /]# ls bin etc lib lost+found mnt proc run srv techprojin usr dev home lib64 media opt root sbin sys tmp var
exitでコンテナから抜けます。
コンテナに再接続する…?
では、もう一度同じようにコンテナを起動し、先ほど作成したファイルが存在するか確認してみましょう。
sudoy@SUDOY-NOTE MINGW64 ~ $ docker run -it centos:latest bash [root@d68d43f3676f /]# ls bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr
先ほどルートディレクトリに作成したはずの「techpjin」ファイルがなくなっているのがわかります。
Dockerでは、「docker run」コマンドを実行するたびに新しいコンテナ(仮想マシン)が作成され、exitで終了するとそこでコンテナは停止します。
1回目にファイルを作成したコンテナと、2回目にrunコマンドで実行したコンテナは別の仮想マシン(コンテナ)という扱いになります。
そのため、作成したはずの「techpjin」ファイルはなくなってしまったのです。
では最後に、これまで作成しコンテナの一覧を参照するコマンドを紹介します。
$ docker ps -a
sudoy@SUDOY-NOTE MINGW64 ~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d68d43f3676f centos:latest "bash" 4 minutes ago Exited (0) 6 seconds ago silly_stallman 15ad0cb87291 centos:latest "bash" 20 minutes ago Exited (0) 10 minutes ago fervent_wright cf1e6811679d hello-world "/hello" 2 hours ago Exited (0) 2 hours ago desperate_lichterman
これまで作成したコンテナは全部で3つ。第1回で作成した「Hello World」、今回作成した「centos」が2つということがわかります。
上から2つ目のコンテナが「techpjin」ファイルを作成したコンテナ、一番上のコンテナが2回目のコマンドによって作成されたコンテナになります。
なお、-aオプションをつけずに実行すると現在実行中のコンテナの一覧が表示されます。
今はコンテナを起動していませんので、何も表示されないはずです。
では今回はここまでにしたいと思います。