Docker Engine クイックスタート¶
このクイックスタートを進めるにあたり、Docker Engine のインストール完了を前提にしています。Docker Engine がインストール済み・設定済みかを確認するには、次のコマンドを実行します。
# インストールした Docker の正常動作を確認
$ docker info
インストールに成功しているのであれば、システム情報を表示します。もしも docker: command not found
(訳:docker コマンドが見つかりません)や /var/lib/docker/repositories: permission denied
(訳:権限がありません)のような表示が出る場合は、Docker のインストールが不完全か、コマンドでマシン上の Docker Engine にアクセスする権限がありません。Docker Engine の標準インストールでは、docker
コマンドを実行するには docker
グループに所属するユーザ、もしくは root
の必要があります。
Docker Engine のシステム設定によっては、各 docker
コマンドの前に sudo
が必要になる場合があります。docker
コマンドで sudo
を使わないようにする方法の1つに、docker
という名称の Unix グループを作成し、ユーザを docker グループに追加して docker
コマンドを使えるようにできます。
Docker Engine のインストールや sudo
設定に関しては、 インストール を参照ください。
構築済みイメージのダウンロード¶
ubuntu
イメージをダウンロード(pull)するには、次のように実行します。
# ubuntu イメージのダウンロード(pull)
$ docker pull ubuntu
このコマンドは Docker Hub 上の ubuntu
イメージをローカルのイメージ・キャッシュにダウンロードします。 イメージを検索するには docker search
コマンドを実行します。詳しい情報は イメージの検索 をご覧ください。
注釈
イメージのダウンロードに成功したら、12文字のハッシュ 539c0211cd76: Download complete
が表示されます。これはイメージ ID を短くしたものです。この短いイメージ ID(short image ID)は、完全イメージ ID (full image ID)の先頭から12文字です。完全イメージ ID を確認するには docker inspect
か docker images --no-trunc=true
を実行します。
ダウンロードしたイメージの一覧を表示するには docker images
を実行します。
対話型シェルの実行¶
Ubuntu イメージの対話型シェルを使うには、次のように実行します:
$ docker run -i -t ubuntu /bin/bash
-i
フラグは対話型 (interactive;インタラクティブ) のコンテナを起動します。-t
フラグは疑似ターミナル (pseudo-TTY) を起動し、stdin
と stdout
(標準入出力)を接続(attach)します。イメージ名は ubuntu
です。コマンド /bin/bash
を使ってログインできます。
シェルを終了せずに tty
を取り外す(detach)には、エスケープ・シーケンス Ctrl-p
+ Ctrl-q
を使います。コンテナから出たあとも、停止するまでコンテナは存在し続けます。
Docker を他のホスト・ポートや Unix ソケットに接続¶
警告
docker
デーモンが標準で利用する TCP ポートと Unix docker ユーザ・グループの変更は、ホスト上の非 root ユーザが root アクセスを得られるという、セキュリティ・リスクを増やします。docker
に対する管理を確実に行ってください。TCP ポートの利用時、ポートにアクセスできる誰でも Docker に対する完全なアクセスが可能です。そのため、オープンなネットワーク上での利用は望ましくありません。
Docker デーモンに -H
オプション使用したら、指定した IP アドレスとポートをリッスンします(ポートを開きます)。標準では、unix:///var/run/docker.sock
をリッスンし、ローカルの root ユーザのみ接続できます。これを 0.0.0.0:2375
や特定のホスト IP を指定することで、誰でもアクセス可能にできますが、推奨されていません。理由は、デーモンが稼働しているホスト上の root アクセスを、誰もが簡単に得られるためです。
同様に、Docker クライアントも -H
オプションを使い、任意のポートに接続可能です。Docker クライアントは、Linux 版では unix:///var/run/docker.sock
に接続し、Windows 版では tcp://127.0.0.1:2376
に接続します。
-H
は次の書式でホストとポートを割り当てます:
tcp://[ホスト]:[ポート番号][パス] または unix://パス
例:
tcp://
→127.0.0.1
に TCP 接続時、TLS 暗号化が有効であればポート2376
を、通信がプレーンテキストの場合(暗号化していない)はポート2375
を使います。tcp://host:2375
→ 対象ホストのポート 2375 に TCP で接続します。tcp://host:2375/パス
→ 対象ホストのポート 2375 に TCP で接続し、あらかじめリクエストのパスを追加します。unix://ソケット/の/パス
→ソケット/の/パス
にある Unix ソケットに接続します。
-H
の後ろに何も指定しなければ、標準では -H
を指定していないのと同じ挙動になります。
また、-H
は TCP の指定を省略できます。
`host:` または `host:port` または `:port`
Docker をデーモン・モードで起動するには、次のようにします。
$ sudo <path to>/docker daemon -H 0.0.0.0:5555 &
ubuntu
イメージをダウンロードするには、次のようにします。
$ docker -H :5555 pull ubuntu
また、複数の -H
オプションを使えます。例えば TCP と Unix ソケットの両方をリッスンしたい場合に使えます。。
# docker をデーモン・モードで実行
$ sudo <path to>/docker daemon -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
# 標準の Unix ソケットを使い、Ubuntu イメージをダウンロード
$ docker pull ubuntu
# あるいは、TCP ポートを使用
$ docker -H tcp://127.0.0.1:2375 pull ubuntu
長時間動作するワーカー・プロセスの開始¶
# とても便利な長時間動作プロセスの開始
$ JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")
# これまでのジョブの出力を収集
$ docker logs $JOB
# ジョブの停止(kill)
$ docker kill $JOB
コンテナの制御¶
# 新しいコンテナの起動
$ JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")
# コンテナの停止
$ docker stop $JOB
# コンテナの起動
$ docker start $JOB
# コンテナの再起動
$ docker restart $JOB
# コンテナを SIGKILL で停止
$ docker kill $JOB
# コンテナを削除
$ docker stop $JOB # Container must be stopped to remove it
$ docker rm $JOB
TCP ポートにサービスを割り当て¶
# コンテナにポート 4444 を割り当て、netcat でリッスンする
$ JOB=$(docker run -d -p 4444 ubuntu:12.10 /bin/nc -l 4444)
# どの外部ポートがコンテナに NAT されているか?
$ PORT=$(docker port $JOB 4444 | awk -F: '{ print $2 }')
# 公開ポートに接続
$ echo hello world | nc 127.0.0.1 $PORT
# ネットワーク接続の動作を確認
$ echo "Daemon received: $(docker logs $JOB)"
コンテナの状態を保存¶
現在のコンテナの状態をイメージとして保存(commit;コミット)するには、 docker commit
コマンドを使います。
$ docker commit <コンテナ> <何かの名前>
コンテナのコミットとは、元になったイメージと現在のコンテナの差分情報のみを、Docker Engine が保存します。どのようなイメージがあるかを確認するには、次のコマンドを実行します。
# イメージ一覧を表示
$ docker images
コミットによって新しいイメージを手に入れました。これを使い、新しいインスタンス(訳者注:コンテナのこと)を作成可能です。
次はどこに行きますか¶
- Docker ユーザ・ガイド の中に進む
- リポジトリを通したイメージの共有 について読む
- コマンドラインの練習 を参照
参考
- Quickstart Docker Engine
- https://docs.docker.com/engine/quickstart/