本記事は、Dockerユーザガイドの1セクションである
以下のサイトを翻訳したものです。
Working with Containers
https://docs.docker.com/userguide/usingdocker/
-----
コンテナの動作
前のセクションで、、初めてのコンテナを実行しました。2つのタイプのコンテナをdocker runコマンドで実行しました。
- フォアグラウンドでの対話型コンテナ
- バックグラウンドでのデーモン型コンテナ
そして、いくつかのDockerコマンドを学習しました:
- docker ps - コンテナをリスト
- docker logs - コンテナの標準出力を参照する
- docker stop - 実行中のコンテナを停止する
Tips:
dockerコマンドを学習する別の方法は、対話形式のチュートリアルです。
http://goo.gl/dB58ZF
dockerクライアントはとてもシンプルです。それぞれのアクションは1つのコマンドで実行できます、そしてそれそれのコマンドは一連のフラグや属性値をとることができます。
# Usage: [sudo] docker [command] [flags] [arguments] ..
# Example:
$ sudo docker run -i -t ubuntu /bin/bash
以下の例は、docker versionコマンドを使って、Dockerクライアントやデーモンの代わりに現在のバージョン情報を返却しています。
$ sudo docker version
このコマンドは使用中のDockerクライアントとデーモンのバージョンを提供するだけでなく、Go(Dockerで使用しているプログラミング言語)のバージョンも提供します。
Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
Server version: 0.8.0
Git commit (server): cc3a8c8
Go version (server): go1.2
Last stable version: 0.8.0
Dockerクライアントで何ができるかを参照
オプション無しでdockerバイナリを実行することによってDockerクライアントにおけるすべての有効なコマンドを参照することができます。
$ sudo docker
現在有効なすべてのコマンドのリストを参照することができます。
Commands:...
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
Dockerコマンドの使い方を参照
更に拡大して、Dockerの特定のコマンドについての使い方を確認することができます。
dockerの後に[コマンド]をタイプすることで、対象コマンドの使い方を参照することができます:
$ sudo docker attach
Help output ...
もしくは、dockerバイナリに「--help」フラグをつけても可能です。
$ sudo docker attach --help
ヘルプテキストとすべての有効なフラグを表示します:
Usage: docker attach [OPTIONS] CONTAINER
Attach to a running container
--no-stdin=false: Do not attach stdin
--sig-proxy=true: Proxify all received signal to the process (non-TTY mode only)
注意:
Dockerの全コマンドはこちらを参照してください。
https://docs.docker.com/reference/commandline/cli/
Docker上でのWebアプリケーションの実行
dockerクライアントについて少し学習してきましたので、重要なことへ移ってきましょう:もっとコンテナを実行することです。
しかしこれまで特に役に立たないコンテナばかりでした。このため、Docker上でサンプルWebアプリケーションを実行してみましょう。
Webアプリケーションとして Python Flask アプリケーションを実行してみます。docker runコマンドを使って開始してみましょう。
$ sudo docker run -d -P training/webapp python app.py
さあ何を実行したのか確認してみましょう。「-d」と「-P」という2つのフラグを指定しました。「-d」フラグはすでにバックグラウンドでコンテナを実行することを学習しています。「-P」フラグは新たに登場しました、これはDockerに対してコンテナ内のどの必須のネットワークポートをホストにマップするかを問い合わせます。この指定によりWebアプリケーションを表示サせています。
先ほどの実行でイメージ「training/webapp」を指定しました。このイメージは事前にビルドされたイメージで、単純なPython Flask Webアプリケーションが作成済みです。
訳者注:
Python Flaskはpyhon上で動作する軽量のWebフレームワークです。
http://ja.wikipedia.org/wiki/Flask
最後に、「pyhon app.py」というコマンドを指定してコンテナに実行させていました。この指定によりWebアプリケーションが開始されます。
注意:
docker runコマンドの詳細はコマンドリファレンスや Docker Run Reference を参照してください。
コマンドリファレンス: https://docs.docker.com/reference/commandline/cli/#run
Docker Run Reference: https://docs.docker.com/reference/run/
Webアプリケーションコンテナの表示
docker ps コマンドで実行中のコンテナを確認してみましょう。
$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse
docker psコマンドに新たなフラグ「-l」を指定していました。これは、docker ps コマンドをつかって最後にコンテナを実行した際の詳細を返却します。
注意:
デフォルトでは、docker ps コマンドは実行中のコンテナ情報の参照だけです。
もし停止済みのコンテナも確認シたいのであれば「-a」フラグを使います。
最初にコンテナをDocker化したコンテナの詳細を1つの重要な追加であるPORTSカラムつきで参照することができます。
PORTS
0.0.0.0:49155->5000/tcp
docker runコマンドに「-P」フラグをつけると、Dockerはイメージの中からホストへ露出されるポートをマップされます。
注意:
イメージのビルド方法を学習する際に、より詳しいDoucker上のポートの露出方法について学びます。
この場合は、Dockerは49155番ポートを5000番ポート(デフォルトPython Flaskポート)として露出させています。
ネットワークポートバインディングはDockerにおいてとても柔軟に設定可能です。最後の例における「-P」フラグはローカルのDockerホスト上のハイポート(49153から65535)から5000番ポートへ割り当てる「-p 5000」のショートカットです。「-p」フラグを使って特定のポートへDockerコンテナをバインドすることも可能です。例えば:
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
これはコンテナ側の5000番ポートをローカルホスト上の5000番ポートに割り当てています。あなたは今こう思っているかもしれませんね:ハイポートへのマッピングをするよりも、1:1 ポートマッピングをつかいたくなりませんか?1:1マッピングはローカルポート上のそれぞれのポートの1つへマップすることだけ可能という制約があります。
2つのPythonアプリケーションをテストしたいと言ってみましょう:ともにそれぞれのコンテナ内部の5000番ポートへつなぎます。Dockerのポートマッピングなしでは、Dockerホストへ一度に1つポートをマップできるだけです。
だから49155番ポートをブラウズして、アプリケーションを見てみましょう。
Pythonアプリケーションが動いていますね!
注意:
もしOS X, Windows, Linu上でboot2docker仮想マシンを使うのであれば、
localhost の代わりに仮想マシンのIPアドレスを取得する必要があります。
boot2dockerシェルで次のように実行することで取得可能です。
$ boot2docker ip
The VM's Host only interface IP address is: 192.168.59.103
この場合は、「http://192.168.59.103:49155」をブラウズしてください。
ネットワークポートショートカット
マップされたポートを返却するdocker ps コマンドを使う方法は少し使いづらいので、Dockerはdocker ポートというショートカットを用意しています。docker ポートを使うために、コンテナのIDもしくは名前を指定し、次にpublic-facing(外部に見せる)ポートを指定します。
$ sudo docker port nostalgic_morse 5000
0.0.0.0:49155
このケースでは、コンテナ内で外部の5000番ポートにマップされている対象を調べています。
Webアプリケーションログの表示
アプリケーションで何が発生しているかもう少し詳しく探し出すために、これまでに学習した別のコマンドdocker logも使ってみましょう。
$ sudo docker logs -f nostalgic_morse
* Running on http://0.0.0.0:5000/ [#s05efc41]
10.0.2.2 - - [23/May/2014 20:16:31] "GET / HTTP/1.1" 200 -
10.0.2.2 - - [23/May/2014 20:16:31] "GET /favicon.ico HTTP/1.1" 404 -
このケースでは、新たなフラグ「-f」を追加しています。これはtail -fコマンドのような動作をdocker logコマンドにさせて、コンテナの標準出力を監視します。ここでは5000番ポートで実行中のFlaskアプリケーションのログとアプリのアクセスログエントリを参照することができます。
Webアプリケーションコンテナプロセスの参照
コンテナのログに加えて、docker topコマンドを使ってコンテナ内で実行中のプロセスも調べることができます。
$ sudo docker top nostalgic_morse
PID USER COMMAND
854 root python app.py
上記の例では、コンテナ内部で python app.py のみのプロセスが動作している状態を参照することができます。
Webアプリケーションコンテナの調査
docker inspect コマンドを使ってDockerコンテナ内部の低レベル情報を取得することができます。docker inspectコマンドは、Dockerコンテナについての便利な設定や状態をハッシュ値をJSON形式にして返却します。
$ sudo docker inspect nostalgic_morse
JSON出力のサンプルを見てみましょう。
[{
"ID": "bc533791f3f500b280a9626688bc79e342e3ea0d528efe3a86a51ecb28ea20",
"Created": "2014-05-26T05:52:40.808952951Z",
"Path": "python",
"Args": [
"app.py"
],
"Config": {
"Hostname": "bc533791f3f5",
"Domainname": "",
"User": "",
...
特定の要素を要求して情報を狭めることも可能です、例えばコンテナのIPアドレスを返却するには:
$ sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' nostalgic_morse
172.17.0.5
Webアプリケーションコンテナの停止
これまでアプリケーションの動作について参照してきました。次にdockerストップコマンドとコンテナ名(nostalgic_morse)を使ってWebアプリケーションコンテナを停止してみましょう。
$ sudo docker stop nostalgic_morse
nostalgic_morse
コンテナが停止したかを確認するためにdocker ps コマンドを使って確認します。
$ sudo docker ps -l
Webアプリケーションコンテナの再起動
おっと!コンテナを停止した直後に別の開発者からコンテナを戻すように要求されました。この場合2つの選択肢があります:新規コンテナの作成、もしくは再起動です。直前のコンテナを開始してもどしてみましょう。
$ sudo docker start nostalgic_morse
nostalgic_morse
すぐに docker ps -l を再度実行して、実行中のコンテナが戻ったことを確認するか、アプリケーションのレスポンスがあるかコンテナのURLをブラウズしてください。
注意:
コンテナを停止後起動する docker restart コマンドもあります。
Webアプリケーションコンテナの削除
あなたの同僚がコンテナの使用が終わり、これ以上必要ないといってきました。docker rm コマンドを使って削除してみましょう。
$ sudo docker rm nostalgic_morse
Error: Impossible to remove a running container, please stop it first or use -f
2014/05/24 08:12:56 Error: failed to remove one or more containers
何が起こりましたか?実行中のコンテナを削除することができませんでした。これは必要かもしれない実行中のコンテナの削除から保護しています。最初にコンテナを停止してから再度試してみましょう。
$ sudo docker stop nostalgic_morse
nostalgic_morse
$ sudo docker rm nostalgic_morse
nostalgic_morse
これで、コンテナは停止し、削除されました。
注意:
削除したコンテナは戻せないことを常に忘れないで!
次のステップ
ここまではDocker Hubからダウンロードしたイメージだけ使用していました。これからは独自のイメージを構築し共有する方法を説明します。
Dockerイメージの動作へ進む
-----
これを読むとポート指定にくせがあるように読めたが
ショートカットは使わなければ大丈夫そう。
0 件のコメント:
コメントを投稿