Translate

2015年3月6日金曜日

The Docker User Guide: Dockerizing Applications: A "Hello world" を翻訳してみた



今頃気づいたのですが、The Docker User Guideを翻訳している人って
別にいたんですね。
読んでみるとこちらのほうが、翻訳がエレガントでした..

もし読みやすい方を探している方はコッチを参照することをおすすめします。

Dockerとは - Docker User Guide
http://qiita.com/zembutsu/items/bbf740839c887835f2ee



とはいえせっかく翻訳したので、私の拙い訳も
一応公開します。

今回の記事は、以下のサイトを翻訳したものです。
Dockerizing Applications: A "Hello world"
 https://docs.docker.com/userguide/dockerizing/



---

"Hello world"アプリケーションのDocker化


それで Docker に関する全てについてですか?

Dockerはコンテナ内部でのアプリケーション実行を許可します。コンテナ内部でアプリケーションを実行させるには、次のコマンドを使います:docker run
 注意:
 もしBoot2DockerのようなリモートDockerデーモンを使用しているのであれば、
 ドキュメンテーション内の例にあるdockerコマンドの先頭のsudoをタイプしないで
 ください。

 訳者注:
 rootによるログインを許可している場合も不要です。



Hello world


今すぐ次のコマンドを試してみてください。

 $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
 Hello world

そしてこれがあなたの一番最初のコンネナ起動になります。

それで、何が起こったのでしょう?docker runコマンドが実行した内容を順番に見て行きましょう。

最初に、実行したいdockerバイナリとコマンドを指定し、実行します。docker runコンビネーションはコンテナを実行します。

次に、イメージ「ubuntu:14.04」を特定します。これは実行するコンテナの元となります。Dockerはイメージを呼び出します。この場合は、Ubuntu 14.04 OS イメージを使用します。

イメージを特定すると、Dockerは、最初にDockerホスト上のイメージを見に行きます。もし発見できなかった場合は、Docker Hubのパブリックイメージをダウンロードします。

次に、なにのコマンドを新規コンネな内で実行するかDockerと対話します:


 /bin/echo 'Hello world'

コンテナが起動すると、DockerはあらたにUbuntu14.04環境を新規生成します。そして内部で/bin/echo コマンドを実行します。結果はコマンドライン上で見ることができます:

 Hello world

それで、この後コンテナに何が起こるの?ええと、Dockerコンテナは指定したコマンドが有効な限り実行し続けます。この例ではできるだけ早くHello worldechoして、コンテナを停止します。


対話型(Interactive)コンテナ


再度docker runコマンドを試してみましょう、今度はコンテナに新たなコマンドを指定します。

 $ sudo docker run -t -i ubuntu:14.04 /bin/bash
 root@af8bae53bdd3:/#

ここでは再度docker runコマンドで「ubuntu:14.04」イメージを指定しています。ただし、2つのフラグを追加しています:「-t」と「-i」です。「-t」フラグはpseudo-ttyもしくは新しいコンテナ内部のターミナルを割り当てます。そして「-i」フラグはコンテナの標準入力(STDIN)を使った対話型接続を許可します。

/bin/bas
hを実行するためのコンテナのための新たなコマンドも指定しています。これはコンテナ内部でBashを起動することを指定しています。


そして、コンテナが起動したら、コマンドプロンプトが表示されます:


 root@af8bae53bdd3:/#

いくつかのコマンドを試してみましょう:

 root@af8bae53bdd3:/# pwd
 /
 root@af8bae53bdd3:/# ls
 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var


カレントディレクトリを表示するためにpwdを実行し、/ ルート・ディレクトリに入っていることを表示しています。また典型的なLinuxファイルシステムのようなルートディレクトリ上のディレクトリリスト表示を実行しています。

コンテナ内部で遊ぶことができ、終わったらexitコマンドもしくはCtrl-Dを入力して終了することができます。

 root@af8bae53bdd3:/# exit


一つ前のコンテナの場合のように、一度Bashプロセスを終了すると、コンテナが停止します。


デーモン化したHello world


コマンドを実行して終了したコンテナは使い道がありますが、あまり役に立ちません。Dockerを使っておそらく実行しようとする多くのアプリケーションのように、デーモンとして実行するコンテナを作成してみましょう。

もう一度、docker runコマンドを使います:

 $ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

なに待ってるの?"Hello world"がありますよ、ここで実行結果を見てみましょう。それはかなり簡単に見られるべきです。docker runを実行しましたが、この場合「-d」フラグを使います。「-d」フラグはDockerにコンテナの実行を問い合わせ、それをデーモン化するために、バックグラウンドに配置します。

同じイメージ「ubuntu:14.04」をまた指定しています。

最後に、実行コマンドを指定しています:

 /bin/sh -c "while true; do echo hello world; sleep 1; done"

これは(hello)worldの最も愚かなデーモンです:永遠にhello worldechoし続けます。

そしてなぜたくさんのhello worldが見えないのでしょう?代わりにDockerは次のような本当に長い文字列を返しました:

 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

この長い文字列は、コンテナIDと呼ばれるものです。コンテナごとに一意に定義されており、そこで動作していることを表してます。

 注意:
 コンテナIDは、少し長くて扱いづらいです。それらが動作するコンテナを名前付けるより短いIDを使う方法を後ほど紹介します。

hello worldデーモンが何を発生させたかを見るためにコンテナIDを使用します。

最初にコンテナが動作しているか確認してみましょう。そのためにはdocker psコマンドを使います。docker psコマンドはDockerデーモンに対して知っているすべてのコンテナの情報を問い合わせます。


 $ sudo docker ps
 CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES
 1e5535038e28  ubuntu:14.04  /bin/sh -c 'while tr  2 minutes ago  Up 1 minute        insane_babbage

このようにデーモン化されたコンテナを照会することができます。docker psコマンドは有益な情報を得ることができます。この時のコンテナIDは短縮されています: 1e5535038e28

ビルドに使用したイメージ(ubuntu:14.04)、実行中のコマンド、ステータス、自動的に割り当てられた名前(insane_babbage)が参照可能です。

 注意:
 Dockerは自動的にコンテナに名前をつけます、もう少し後で名前の指定方法を学習します。

OK、ここで動作中であることを知りました。しかし実行を指示したことをコンテナが実行していますか?それを見るためにはdocker log コマンドを使ってコンテナの内部を参照します。Dockerにアサインされたコンテナ名を使いましょう。

 $ sudo docker logs insane_babbage
 hello world
 hello world
 hello world
 ...

docker logコマンドはコンテナ内部を参照し標準出力を表示します:この場合はhello worldコマンドの出力になります。

すごい!デーモンが動作しています、そしてこれがあなたにとって初めてのDockerアプリケーションになります!

自分でコンテナを作成できることが確認できたので、片付けをしてデーモン化したコンテナを終了してみましょう。このためには、docker stopコマンドを使います。

 $ sudo docker stop insane_babbage
 insane_babbage

docker stopコマンドはDockerに対して実行中のコンテナ対して礼儀正しく停止を指示します。もし成功したのであれば、停止させたコンテナの名前を返却します。

docker psコマンドを使って動作状態を確認してみましょう。


 $ sudo docker ps
 CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES

完璧です、コンテナは停止済みです。


次のステップ


Dockerをはじめることがいかに簡単かわかったと思いますので、より先進的なタスクの実行方法を学習しましょう。

コンテナの動作へ進む

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...