Chapter02 Docker Command

はじめに

ここではDockerの基本的なコマンドの使い方に焦点をあてて、まとめていきます。Dockerでは、イメージの取得などをはじめ、コンテナの起動から停止、削除まで「Dockerコマンド」で行います。

Docker Hub

いきなりDockerコマンドではないですが、Docker Hubについて簡単に触れておきます。これは、Docker社が運営しているDockerイメージのレポジトリーサービスです。Docker Hubがあるので、手元のローカルPC、クラウド環境、様々な環境にイメージを共有することが可能です。

例えばRのイメージであれば下記にアクセスすることで情報を確認できます。

Tagsのページを見ると何やら、異なるバージョンのRのイメージが確認できます。

Dockerでは、イメージを管理する際にタグを利用します。例えば、タグを指定せずにDocker Hubからイメージを取得すると、1番上にあるlatestが取得されます。そのため、バージョンを指定してイメージを取得したい場合は、下記のようにタグでバージョンを指定します。

ここからはDockerイメージに関するコマンドとDockerコンテナに関するコマンドに分けて、Dockerコマンドをまとめます。

Dockerコマンド~Dockerイメージ~

Docker Hubのイメージもつかめたところで、まずはDockerイメージに関するDockerコマンドを見ていきます。

pullコマンド

まずはpullコマンドです。このコマンドはDoker HubからDockerイメージを取得する際に利用するコマンドです。DockerイメージをDoker Hubではなく他の場所で管理している場合にも利用できます。下記はtensorflow.orgarrow-up-rightで公開されている機械学習用のフレームワークであるtensorflowのDockerイメージを取得する際のコマンドです。

オプションは下記の通り用意されています。-aをつけると全てのイメージを取得できます。

imagesコマンド

imagesコマンドは、取得したイメージを表示するためのコマンドです。現在はイメージがなにもないので、whalesayイメージを取得してimagesコマンドを実行してみます。whalesayイメージはDockerのロゴでもあるクジラに文字列を喋らせるイメージです

imagesコマンドを実行してみます。取得先を示すREPOSITORY、バージョンを示すTAG、イメージの識別子であるIMAGE ID、イメージ作成日であるCREATED、Dockerイメージのサイズを表すSIZEが表示されます。

オプションは下記の通り用意されています。-qをつけるとIMAGE IDのみを表示できます。

inspectコマンド

inspectコマンドはイメージの詳細を確認するためのコマンドです。docker/whalesayのイメージIDである6b362a9f73ebを使ってみます。結果は下記のようなJSON形式で表示されます。

オプションは下記の通り用意されています。

tagコマンド

tagコマンドはイメージのバージョンを管理するタグを付与するコマンドです。イメージの元になるソースイメージを指定して、タグを指定します。IMAGE IDを見ると同一IDであることがわかります。つまり実態は同じであってコピーや名前を変更したわけではありません。

rmiコマンド

rmiコマンドはDockerイメージを削除するコマンドです。docker/whalesayのイメージを削除してみます。タグが付与していたり、コンテナが参照している場合は消せないので、そのような場合、タグが付与されたイメージや-fオプションを付けて削除します。

オプションは下記の通り用意されています。

不要なコンテナを削除しておきます。

pushコマンド

pushコマンドはDocker Hubにイメージを公開する際に利用するコマンドです。

下記のようにDocker Hubにリポジトリを作成してイメージをアップすることが可能です。

Dockerコマンド~Dockerコンテナ~

次はコンテナに関するコマンドを見ていきます。

runコマンド

runコマンドはDockerコンテナの構築と起動を同時に行うコマンドです。試しにubuntuのイメージを使ってrunコマンドを実行します。デフォルトコマンド(bash)で指定したコマンドが実行されます。-itはコンテナの標準出力(-i)を開き、端末デバイスを確保するという意味のtty(-t)の略です。runコマンドはオプションが大量にあるので、いくつかをピックアップしてまとめておきます。

コンテナからexitで抜けると、コンテナのSTATUSExitedになります。コンテナを使い捨てたい場合は--rmオプションをつけます。

オプションを付けてコンテナをrunコマンドを実行します。

コンテナの起動にはバックグラウンドモード(デタッチドモード)とフォアグラウンドモードがあります。バックグラウンドモードの場合は-dオプションを付けます。コンテナの起動後、すぐにホストに戻ってきます。状況を確認するとUpのままなので、バックグラウンドで起動していることがわかります。

次はポート(-p)を指定してコンテナを起動します。Nginxのイメージを使ってコンテナを実行します。

コンテナを起動後、ポート12345を使ってブラウザからアクセスします。ホスト側のポート12345がコンテナのNginxのポート80に転送されるので、ブラウザからアクセスすることが可能です。他にもDNSサーバー、MACアドレス、ホスト名とIPアドレスを定義するなども可能。

オプションは下記の通り用意されています・・・。

start/stopコマンド

start/stopコマンドはDockerコンテナの起動と停止を行うコマンドです。さきほどのNginxのコンテナをstartコマンドで起動して、stopコマンドで停止します。

オプションは下記の通り用意されています。

rm/pruneコマンド

rmコマンドはDockerコンテナの削除を行うコマンドです。さきほどのNginxのコンテナをrmコマンドで削除します。

オプションは下記の通りです。

pruneコマンドは使用していないイメージ、コンテナ、ボリューム、ネットワークを一括で削除できます。

restart/exec/attachコマンド

restartコマンドは停止しているコンテナを再起動するコマンドです。そして、STATUSUpの状態のコンテナに入る場合はexecattachコマンドを利用します。execはWebサーバーやDBサーバーなど、バックグラウンドモードで実行されているコンテナに入る場合、シェルが動作していないとattachコマンドでは、コマンドを受け付けることができないため、そのような場合に利用します。

また、control + p + qでコンテナからデタッチできます。その場合、STATUSUpの状態でプロセスは残ります。

例えばNginxのイメージをデタッチモードで立ち上げます。そして、attachコマンドでコンテナに入りますが、シェルが動作していないので、何もコマンドを実行できません。そのようなときにexecコマンドで入ります。

Dockerコマンド~オプション~

次はコンテナの起動の際に利用するコマンドを見ていきます。ここではホストとコンテナをつなぐ際に利用するオプションである-v-uに焦点を当てます。Dockerファイルをビルドしていますが、Dockerファイルについては次のチャプターを参照ください。

-vオプション

-vは、ホストとコンテナのディレクトリ(ファイルシステム)をマウントするために利用します。このオプションを利用することで、コンテナの中から、マウントしてしているホストのディレクトリを使うことができます。

今回はホスト側のデスクトップにmounted_dir_in_hostというディレクトリを作成し、この中にサンプルのPythonコード(sample.py)があったとします。これをコンテナ側のmounted_dir_in_conというディレクトリとをマウントさせることで、コンテナから利用できるようにします。

Dockerファイルにはコンテナでマウントするディレクトリを作成します。

イメージビルドして、コンテナを起動する際にディレクトリを-vで指定して起動することでマウントできます。コンテナ側のmounted_dir_in_conに、sample.pyがあるのが確認できます。

-uオプション

-uは、コンテナに入る際にユーザーを指定する場合のオプションです。コンテナに入ると基本的にはrootで実行されます。それを回避するために-uでユーザーを指定してコンテナに入ります。コンテナに入ると名前の部分がI have no name!になっていることが確認できます。

ユーザー名を共有していないので、このように表示されますが、このユーザーは501のグループが20なので、このコンテナは501のユーザーで実行していることになります。

Last updated