Dockerコンテナを実行する
DockerコンテナのもとになるDockerイメージができましたので、いよいよDockerコンテナを起動してみます。
コンテナの実行
Dockerコンテナの起動は、docker runコマンドを実行します。docker runコマンドの書式は次のとおりです。
$ docker run [オプション] --name [コンテナ名] [イメージ名:タグ名]
主なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
| -d | バックグラウンドで実行 |
| -i | コンテナの標準入力 |
| -p [ホストのポート番号]:[コンテナのポート番号] | ホストとコンテナのポートマッピング |
| -v [ホストのディレクトリ]:[コンテナのディレクトリ] | ホストとコンテナのディレクトリを共有 |
たとえば、「httpd-container」という名前のコンテナを「apache:1.0」という名前のDockerイメージをもとにバックグラウンド起動し、ホストとコンテナの80番ポートをマッピングさせる場合は次のようになります。
$ docker run -p 80:80 -d --name httpd-container apache:1.0
動作確認を行うには、boot2dockerに割り当てられているIPアドレスの80番ポートにブラウザでアクセスします。IPアドレスを忘れてしまった場合は、コンソールを一旦exitコマンドで終了します。そこで次のコマンドを実行し、割り当てられているIPアドレスを確認します。確認が出来たら、boot2docker sshコマンドでboopt2dockerに再度アクセスできます。
$ boot2docker ip 192.168.59.103
ブラウザを開き、該当のIPアドレスの80番ポートにアクセスすると、Docker上で起動しているコンテナでWebサーバが起動しているのが確認できます。
docker runコマンドは、他にもたくさんのオプションがあります。詳細については以下の公式サイトを参照してください。
コンテナの確認
Docker上で動作するコンテナを確認するときは、docker psコマンドを使います。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS N AMES 35f7f42a2e01 apache:1.0 "/usr/sbin/httpd -D 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp h ttpd-container
Dockerコンテナには、コンテナごとにCONTAINER IDが割り当てられます。実行例をみると、httpd-containerというコンテナ(CONTAINER ID: 35f7f42a2e01)が起動しているのが分かります。なお、docker psコマンドに-aオプションをつけると停止しているコンテナもすべて表示することができます。
コンテナの起動/停止/再起動
Dockerコンテナの起動/停止/再起動は次のコマンドを使います。コマンドの引数にコンテナのCONTAINER IDを指定します。なお、CONTAINER IDはコンテナを一意に指定できればよいので、すべての桁を指定しなくても、先頭の3桁程度でかまいません。
$ docker start [CONTAINER ID] $ docker stop [CONTAINER ID] $ docker restart [CONTAINER ID]
コンテナの削除
Dockerコンテナを削除するには、docker rmコマンドを使います。docker rmコマンドの引数に削除したいコンテナのCONTAINER IDを指定します。たとえば、CONTAINER IDが123456789abcのコンテナを削除するときは次のようになります。
$ docker rm 123456789abc
Dockerは本記事で説明した以外にもたくさんのコマンドが用意されています。主なコマンドは次のとおりです。
| コマンド | 説明 |
|---|---|
| attach | 起動中のコンテナに接続 |
| build | Dockerfileファイルからイメージを作成 |
| commit | コンテナの状態を確定しイメージを作成 |
| cp | コンテナ内のファイルをホストにコピーする |
| create | コンテナの生成 |
| diff | コンテナが実行されてから変更されたファイル差分を確認する |
| exec | 指定したコンテナの中でコマンドを実行 |
| images | イメージの状態表示 |
| load | tarアーカイブ形式のファイルをイメージとして取り込む |
| login | レジストリ(DockerHub)にログイン |
| logout | レジストリ(DockerHub)からログアウト |
| logs | コンテナの標準出力 |
| ps | コンテナの状態を確認 |
| pull | イメージのダウンロード |
| push | イメージのアップロード |
| restart | コンテナの再起動 |
| rm | コンテナの削除 |
| rmi | イメージの削除 |
| run | コンテナの実行 |
| save | イメージをtarアーカイブ形式のファイルに出力 |
| search | イメージの検索 |
| start | コンテナの開始 |
| stop | コンテナの停止 |
| top | コンテナのプロセス確認 |
| version | バージョン確認 |
コマンドの詳細については、以下の公式サイトを参照してください。
おわりに
今回の記事では、DockerをつかったWebアプリケーションの実行環境の構築手順について駆け足で紹介しました。Dockerは、システム開発の現場で多発する「こっちではうごくけど、あっちではうごかない」というインフラ環境に起因する問題を解決するための、業務アプリケーションの配置/実行基盤として注目されています。しかしながらDockerは単なる便利なツールではなく、これまではインフラエンジニアの仕事だった実行環境の構築が、業務アプリケーション開発者によってコードで出来るようになるという大きなパラダイムシフトを起こしています。そのため、システム開発の広い範囲をカバーできる知識や経験をもつエンジニアが今後増えていくと思われます。
「でも、インフラなんてやったことが無いし……」と思われていても全く心配はありません。インフラ技術の習得もプログラミングの習得と同じです。つまり、「まずは自分で手を動かしてみる」ことに尽きると思っています。

