Docker 入門 #1 — Windows に Boot2Docker をインストールして既存イメージを扱ってみる
Docker 使えるようにならないとなー、ということで、まずは Docker を使える環境を準備して、ユーザーガイドをちょっと読んでみた。 既存イメージを使ってコンテナの生成をするなどの操作をするところまで。 完全なる入門者向け (あるいは自分用) だけどメモしておく。
Docker のバージョンは 1.1.2 を使用した。
Docker についての参考文献
そもそもの Docker についての説明はこのエントリでは行わない。 次の記事が参考になる。
- Docker とは何か: 今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo #2 - Publickey
- 背景 (ウェブシステムにおける Docker の立ち位置):
Windows での Docker 環境の構築
Windows ユーザーでない場合はそれぞれの環境用のインストールガイドを参照のこと。
- Windows 上への Docker 環境インストールガイド: Microsoft Windows - Docker Documentation
Docker Engine は Linux カーネルの機能を使用しているので、Windows の上に直接 Docker 環境を構築することはできない。 VirtualBox なりなんなりで仮想マシンとして Linux マシンを Windows 上に起動する必要がある。
Boot2Docker というアプリケーションが Docker より提供されているので、(Docker Engine 用の仮想マシンを立てるつもりなら) これを使うのが便利である。 Boot2Docker を使うことで、VirtualBox 上に Docker 環境用の仮想マシンをインストールし、Docker デーモンを走らせることができる。
- Boot2Docker: boot2docker/boot2docker · GitHub
Boot2Docker のインストールで VirtualBox もインストールできるようなので、まだ VirtualBox をインストールしていない人でもいきなり Boot2Docker をインストールして良い。 次のエントリも参考になる。
使い方
「Boot2Docker Start」 というのがスタート画面のアプリケーション一覧に追加されているはずなので、これをクリックする。 すると、VirtualBox に Docker 用の仮想マシンが登録されて、Linux のインストールなどが実行される。 そして仮想マシンが起動して、そこに SSH 接続される。
この仮想マシン上で docker
コマンドを使い、Docker コンテナを作ったりする。
また、インストール時にパスを通すかどうかのオプションを選択できるが、パスを通しておけば boot2docker コマンドが使えるようになる。「Boot2Docker Start」 を使わなくても、PowerShell を開いて boot2docker
コマンドを使うことで、仮想マシンの操作ができる。
他のコマンドは boot2docker --help
で調べられる。
Docker を使ってみる
ユーザーガイドに従って Docker を使ってみる。 これ以降は、基本的に boot2docker ssh
して、仮想マシン上でコマンドを実行するものとする。
ユーザーガイドとは別にオンラインチュートリアルもあって、こっちの方が最初は良いかもしれない。
アプリケーションの Docker 化 (?)
docker run
コマンド
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world
上のようなコマンドを実行すると、何やらダウンロードしてきて、最終的に 「Hello world」 が出力される。 何をしているかというと、「ubuntu:14.04」 というイメージからコンテナを新たに生成し、そのコンテナ上で 「/bin/echo 'Hello world'」 というコマンドを実行している。
指定されたイメージは、まず Docker ホスト上で探される。 そこで見つからなければ、Docker Hub 上で探される。 今回の場合、「ubuntu:14.04」 というイメージは Docker Hub からダウンロードされる。
新たに生成されたコンテナは、指定のコマンドを実行し終えると停止 (?) するようである。 (コンテナ自体は残っている。 後で出てくるが、docker ps
コマンドに -a
オプションを渡すと、停止しているコンテナも表示される。)
-t
オプション *1 と -i
オプション *2 を渡すことで、対話型コンテナを立ち上げることもできる。
-d
オプションでコンテナのデーモン化ができる。 docker run -d ...
コマンドを実行すると、長い文字列が表示される。 これはコンテナ ID である。 コンテナの名前は (明示的に指定しなければ) 自動的につけられる。
docker ps
コマンド
docker ps
コマンドで、実行中のコンテナの情報が表示される。 コンテナ ID やコンテナ名などが確認できる。
上で書いたように、-a
オプションを付ければ停止中のコンテナも表示される。
docker logs
コマンド
docker logs {container}
コマンドを使えば、コンテナ内部の標準出力を表示できる。 {container}
としては、コンテナ ID とコンテナ名のどちらかを指定できるっぽい。
docker stop
コマンド
docker stop {container}
コマンドを使えば、動いているコンテナを止めることができる。
コンテナの扱い方
バージョン確認
docker version
コマンドで、Docker クライアントと Docker サーバーのバージョン情報が表示される。 Go のバージョンや Git コミットのリビジョンも表示される。
Docker クライアントのコマンド一覧
オプションなしの docker
コマンドで、docker
コマンドが受け付けるアクション一覧が表示される。 各アクションについては、docker {action} --help
コマンドでヘルプを表示できる。
コマンド一覧については Web 上のヘルプを参照してもよい。
Web アプリケーションを Docker 内で動かす
$ sudo docker run -d -P training/webapp python app.py
上記コマンドで、トレーニング用の web アプリケーションを Docker 内で動かすことができる。 「training/webapp」 というイメージは Docker Hub からダウンロードされる。
-P
オプションは、コンテナ内部で必要なネットワークポート (exposed port) をホストのそれにマップするように Docker に伝えるためのものである。 上のコマンドを実行した後、docker ps -l
コマンド *3 を実行すると、PORTS の項に以下のような表示が出るはずである。
PORTS 0.0.0.0:49155->5000/tcp
ローカル Docker ホストの 49155 ポートが、コンテナの 5000 ポートにマップされていることがわかる。 コンテナ側のどのポートを露出させるかを指定する方法は、後で (イメージ作成方法のところ) で説明される。 ホスト側のポートは 49000 から 49900 の間 (high port と表現されている) から自動的に選ばれる。
-P
オプションの代わりに、docker run
コマンドに -p {container_port}
オプションを渡すことで、コンテナの指定のポートをホスト側の high port にマップすることもできる。 -P
オプションは、コンテナの exposed port をホストの high port にマップするものであるが、-p
オプションはコンテナ側の指定のポートが exposed port かどうかは関係ないようである。
また、-p {host_port}:{container_port}
という形式で、コンテナの指定のポートを、ホストの指定のポートにマップすることもできる。
ちなみに、Windows 上で Boot2Docker を使っている場合は、Windows の PowerShell 上で boot2docker ip
コマンドを実行することで、Docker ホストの IP アドレスを取得できる。
docker port
コマンド
docker port {container} {private_port}
コマンドで、指定のコンテナの指定のポートがどのポートにマッピングされているかを知ることができる。
Web アプリケーションのログ表示
docker logs
コマンドの -f
オプションは、tail
コマンドの -f
オプションのようなものである。
コンテナのプロセス
docker top {container}
コマンドで、指定のコンテナのプロセス一覧を見ることができる。
コンテナの詳細
docker inspect {container}
コマンドで、指定のコンテナの詳細情報を JSON 形式で得ることができる。
さらに、-f
オプションを使うことで、特定の情報のみを取りだすこともできる。
$ sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' nostalgic_morse 172.17.0.5
コンテナの再起動
停止されたコンテナは、docker start {container}
コマンドで再度起動できる。 実行中のコンテナの再起動は docker restart {container}
コマンド。
そういえばコンテナが停止される際に、コンテナ内のプロセスがどうなるのか、とか、再起動時にはどうなるのか、とかわかってない。
コンテナの削除
停止されたコンテナは docker rm {container}
コマンドで削除できる。
そういえば同僚が 「要らなくなったコンテナのごみ掃除が大変だ!」 とか言ってたけど、これのことなのかなー。
今回はここまで
既存のイメージを使うところまではこんな感じ。 さらにイメージをビルドしたりする話が続くけど、それはまた別のエントリに。
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (5件) を見る