Docker コマンドラインを使う

docker

利用可能なコマンドを一覧表示するには、パラメータを付けずに docker を実行するか、docker help を実行します。

$ docker
Usage: docker [OPTIONS] COMMAND [ARG...]
       docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
  -D, --debug              Enable debug mode
      --help               Print usage
  -H, --host value         Daemon socket(s) to connect to (default [])
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Commands:
    attach    Attach to a running container
    # […]

説明

Docker のシステム構成によっては、それぞれの docker コマンドの前に sudo を付ける必要があるかもしれません。 docker コマンドを実行する度に sudo を実行しないようするには、システム管理者は docker という Unix グループを作成し、そこへのユーザを追加できます。

Docker のインストールや sudo 設定については、各オペレーティング・システム向けの インストール方法 をご覧ください。

環境変数

以下は、 docker コマンドラインでサポートされている環境変数の一覧です。

変数

説明

DOCKER_API_VERSION

デバッグ用に通信時の API バージョンを上書き(例: 1.19

DOCKER_CERT_PATH

認証鍵(authentication keys) の場所。この変数は、 docker CLI と dockerd デーモン の両方で使用

DOCKER_CONFIG

クライアント設定ファイルの場所

DOCKER_CONTENT_TRUST_SERVER

使用する Notary サーバの URL。デフォルトはレジストリと同じ URL

DOCKER_CONTENT_TRUST

Docker が Notary を使ってイメージの署名と確認をする場合に指定。 build、 careate、 pull、 push 、 run 用の --disable-content-trust=false と同じ

DOCKER_CONTEXT

使用する docker context の名前( DOCKER_HOST 環境変数と、 docker context use によるデフォルトの context 設定を上書き)

DOCKER_DEFAULT_PLATFORM

コマンドを扱うデフォルトのプラットフォームで、 --platform プラグでも指定可能

DOCKER_HIDE_LEGACY_COMMANDS

これを指定すると、Docker は「レガシーな」(過去の)トップレベルコマンド( docker rmdocker pull )を非表示にし、オブジェクト型の管理コマンド(例: docker container )のみ表示します。将来のリリースでは、この環境変数が削除される時点で、デフォルトになる可能性があります。

DOCKER_HOST

接続しようとするデーモンのソケット

DOCKER_STACK_ORCHESTRATOR

docker stack 管理コマンドの利用時に使う、デフォルトのオーケストレータを設定

DOCKER_TLS_VERIFY

Docker で TLS を使い、リモート認証をする時に指定。この変数は、 docker CLI と dockerd デーモン の両方で使用

BUILDKIT_PROGRESS

構築BuildKit バックエンド(builder-buildkit) を使用時、進捗の出力タイプ( autoplaintty )を指定。plain を使うと、コンテナの出力を表示(デフォルト auto

Docker は Go 言語で開発されているので、 Go ランタイムが利用する環境変数も使えます。特に次のものは便利です。

  • HTTP_PROXY

  • HTTPS_PROXY

  • NO_PROXY

これら Go 言語の環境変数は大文字と小文字を区別しません。変数の詳細については Go 言語の仕様 をご確認ください。

設定ファイル

Docker コマンドラインは、ホームディレクトリ $HOME にある .docker ディレクトリ内に保管されている設定ファイルを、デフォルトで使います。

Docker は設定用ディレクトリ内にある大部分のファイルを管理しますので、自分ではこれらを変更すべきではありません。しかしながら、 docker コマンドの挙動については config.json ファイルによって詳細に調整できます。

環境変数やコマンドラインのオプションによって、 docker コマンドの挙動を変更可能です。また、オプションとして config.json でも同様にいくつかの挙動を変更できます。環境変数と --config フラグが指定された場合、環境変数よりもフラグが優先されます。コマンドラインのオプションは環境変数による属性を上書きするだけでなく、 config.json ファイルで指定した 属性(proterty) も上書きします。

.docker ディレクトリの変更

異なるディレクトリを指定するには、 DOCKER_CONFIG 環境変数か --config コマンドライン・オプションを使います。両方の指定がある場合、 --config オプションが DOCKER_CONFIG 環境変数を上書きします。以下の例は、 ~/testconfigs/ ディレクトリに置かれている config.json ファイルを使って、 docker ps コマンドを上書きします。

$ docker --config ~/testconfigs/ ps

このフラグが適用できるのは、対象コマンドの実行時のみです。設定を維持し続けたい場合は、シェル上(例 ~/.profile~/.bashrc )で環境変数 DOCKER_CONFIG を指定してください。以下の例は HOME/newdir/.dokcer を新しいディレクトリとして指定します。

$ echo export DOCKER_CONFIG=$HOME/newdir/.docker > ~/.profile

Docker CLI 設定ファイル( config.json )の属性

デフォルトでは、設定ファイルは ~/.docker/config.json に保管されます。異なる場所を使うには、 .docker ディレクトリの変更(change-the-docker-directory) を参照ください。

警告

~/.docker 設定ディレクトリ内の設定ファイルと他のファイルには、プロキシの認証情報や、証明書ストア関連、イメージレジストリの証明書といった、機微情報を含む可能性があります。他人と設定ファイル内容を共有する前にレビューを行い、バージョン管理システムにファイルをコミットするのを防いでください。

--format フラグの指定が無い場合、いくつかのコマンドは、以下のフィールドによってデフォルトの出力をカスタマイズできます。

属性(property)

説明

configFormat

docker config ls 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker config ls ドキュメントの 出力形式(config_ls-format-the-output) セクションを参照

imagesFormat

docker images / docker image ls 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker image ls ドキュメントの 出力形式(image_ls-format-the-output) セクションを参照

nodesFormat

docker node ls 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker node ls ドキュメントの 出力形式(node_ls-format-the-output) セクションを参照

pluginsFormat

docker plugin ls 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker plugin ls ドキュメントの 出力形式(plugin_ls-format-the-output) セクションを参照

psFormat

docker ps / docker container ps 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker ps ls ドキュメントの 出力形式(docker_ps-format-the-output) セクションを参照

secretFormat

docker secret ls 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker secret ls ドキュメントの 出力形式(secret_ls-format-the-output) セクションを参照

serviceInspectFormat

docker service inspect 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker service inspect ドキュメントの 出力形式(service_inspect-format-the-output) セクションを参照

servicesFormat

docker service ls 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker service ls ドキュメントの 出力形式(service_ls-format-the-output) セクションを参照

statsFormat

docker stats 出力のデフォルト形式を変更します。サポートしているフォーマット命令の一覧は、 docker stats ドキュメントの 出力形式(docker_stats-format-the-output) セクションを参照

HTTP ヘッダの調整

HttpHeader 属性は、Docker クライアントがデーモンに対して送信するとき、全てのメッセージに含めるヘッダを指定します。Docker は、これらのヘッダを解釈したり理解しようとしません。つまり、単純にメッセージの中に追加するだけです。Docker は設定したヘッダ自身に対する変更を許可しません。

認証情報ストアのオプション

属性 credsStore は、デフォルトの証明書ストアを提供する、外部のバイナリを指定します。この属性を指定すると、 docker login は、 $PATH 上に見える docker-credentail-<value> で指定したバイナリに、認証情報の保管を試みます。この属性を指定しなければ、認証情報は設定上の auths 属性に保管されます。詳しい情報は docker login ドキュメントの 認証情報ストア(docker_login-credentials-store) のドキュメントをご覧ください。

属性 credsHelpers は、指定のレジストリに対する認証情報の保管・収集時、 credSotreauths よりも優先して使う 認証情報ヘルパー(credential helper) を指定します。この属性を指定しなければ、指定のレジストリに対して認証情報の保管・収集時、 docker-credential-<value> バイナリの利用を試みます。詳しい情報は docker login ドキュメントの 認証情報ヘルパー(docker_login-credential-helper) のドキュメントをご覧ください。

docker stack 用のオーケストレータ・オプション

属性 stackOrchestrator は、 docker stack 管理コマンドの実行時に使われる、デフォルトのオーケストレータを指定します。有効な値は "swarm""kubernetes""all" です。kの属性は DOCKER_STACK_ORCHESTRATOR 環境変数や、 --orchestrator フラグで上書きできます。

コンテナ用のプロキシ設定を自動化

属性 proxies は、コンテナ上へ自動的にプロキシ環境変数を設定します。また、コンテナを docker build する時の、 --build-arg にも設定できます。プロキシの "default" を設定すると、クライアントが接続する、あらゆる docker デーモンに対して適用するか、ホスト(docker デーモン)ごとの設定で適用します。設定は “https://docker-daemon1.example.com” のようにします。以下の属性が、各環境で設定できます。

属性(property)

説明

httpProxy

コンテナに対する HTTP_PROXYhttp_proxy のデフォルト値であり、 docker build 時の --build-arg でも同じ

httpsProxy

コンテナに対する HTTPS_PROXYhttps_proxy のデフォルト値であり、 docker build 時の --build-arg でも同じ

ftpProxy

コンテナに対する FTP_PROXYftp_proxy のデフォルト値であり、 docker build 時の --build-arg でも同じ

noProxy

コンテナに対する NO_PROXYno_proxy のデフォルト値であり、 docker build 時の --build-arg でも同じ

警告

プロキシ設定には機微情報を含む場合があります(たとえば、プロキシで認証が必要な場合)。環境変数はコンテナの設定に平文として保管されるため、リモート API を通した調査や、 docker commit を使ったイメージのコミット時に調査される可能性があります。

コンテナからデタッチするデフォルトのキー手順

コンテナにアタッチ後は、 CTRL-p CTRL-q キー・シーケンスで使ってデタッチできます。このデタッチ用キー・シーケンスは detachKeys 属性を使ってカスタマイズできます。カスタマイズでは <シーケンス> 値の属性を指定します。 <シーケンス> の書式は [a-Z] までの文字列をカンマ区切りにしたリストにするか、 ctrl- に以下のいずれかを組み合わせます。

  • a-z (小文字のアルファベット文字列)

  • @ (アット記号)

  • [ (左かっこ)

  • \\ (2つのバックスラッシュ)

  • _ (アンダースコア)

  • ^ (キャレット)

Docker クライアントで起動するコンテナ全てにカスタマイズが適用されます。ユーザはコンテナごとにデフォルトのキー・シーケンスを変更可能です。ユーザが指定するには、 --detach-keys フラグを docker attachdocker execdocker rundocker start コマンドで使います。

CLI プラグインのオプション

属性 plugin には CLI プラグインに対する設定を含みます。キーはプラグイン名で、値にはオプションを割り当てます。いずれもプラグインによって指定されているものです。

設定ファイル例

以下は、様々な形式のフィールドを利用する config.json ファイルの例です。

{
  "HttpHeaders": {
    "MyHeader": "MyValue"
  },
  "psFormat": "table {{.ID}}\\t{{.Image}}\\t{{.Command}}\\t{{.Labels}}",
  "imagesFormat": "table {{.ID}}\\t{{.Repository}}\\t{{.Tag}}\\t{{.CreatedAt}}",
  "pluginsFormat": "table {{.ID}}\t{{.Name}}\t{{.Enabled}}",
  "statsFormat": "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}",
  "servicesFormat": "table {{.ID}}\t{{.Name}}\t{{.Mode}}",
  "secretFormat": "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}",
  "configFormat": "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}",
  "serviceInspectFormat": "pretty",
  "nodesFormat": "table {{.ID}}\t{{.Hostname}}\t{{.Availability}}",
  "detachKeys": "ctrl-e,e",
  "credsStore": "secretservice",
  "credHelpers": {
    "awesomereg.example.org": "hip-star",
    "unicorn.example.com": "vcbait"
  },
  "plugins": {
    "plugin1": {
      "option": "value"
    },
    "plugin2": {
      "anotheroption": "anothervalue",
      "athirdoption": "athirdvalue"
    }
  },
  "proxies": {
    "default": {
      "httpProxy":  "http://user:pass@example.com:3128",
      "httpsProxy": "https://my-proxy.example.com:3129",
      "noProxy":    "intra.mycorp.example.com",
      "ftpProxy":   "http://user:pass@example.com:3128",
      "allProxy":   "socks://example.com:1234"
    },
    "https://manager1.mycorp.example.com:2377": {
      "httpProxy":  "http://user:pass@example.com:3128",
      "httpsProxy": "https://my-proxy.example.com:3129"
    }
  }
}

実験的機能(experimetal features)

実験的機能により、今後追加されるプロダクト機能に 早期アクセス(early access) できます。これら機能はテストとフィードバックを意図しているため、今後のリリースでは警告のない機能変更や、機能削除の可能性があります。

Docker 20.10 からは、デフォルトでは実験的 CLI 機能は有効であり、有効化する設定は不要です。

Notary

自身で Notary サーバを使っている場合で、もしも自己証明の証明書や、内部の証明機関を使っているのであれば、docker 設定ディレクトリにある tls/<レジストリのURL>/ca.crt 証明書を置き換える必要があります。

あるいは、自分の証明書を信頼できるようにするためには、自分のシステム上のルート証明機関一覧に証明書を追加する方法もあります。

使用例

あらゆるコマンドでヘルプ一覧を表示するには、実行するコマンドの後に --help オプションを付けます。

$ docker run --help

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

Options:
      --add-host value             Add a custom host-to-IP mapping (host:ip) (default [])
  -a, --attach value               Attach to STDIN, STDOUT or STDERR (default [])
<...>

1文字のコマンドラインのオプションは、連結できます。 docker run -i -t --name test busybox sh は、 docker run -it -name test busybox sh に書き換えられます。

ブール値

ブール値のオプションとは -d=false のような形式です。何らかのフラグを設定 しない 場合のデフォルト値は、ヘルプテキストで確認できます。ブール値にフラグ値を指定しなければ、デフォルト値に関係なくフラグは true になります。

例えば、 docker run -d を実行すると、値は true になります。そのため、コンテナは「デタッチド」モードとしてバックグラウンドで動作します。

オプションのデフォルトは true (例: docker build --rm=true )ですが、デフォルトではない値を指定するには false を明示します。

$ docker build --rm=false .

複数回の指定

-a=[] のようなオプションは、コマンドライン上で複数回使えます。例えば、次のようなコマンドです。

$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash

$ docker run -a stdin -a stdout -a stderr ubuntu /bin/ls

オプションによっては、 -v のように複雑になる場合もあります。

$ docker run -v /host:/container example/mysql

注釈

pty 実装に限界があるため、 -t-a stderr オプションを同時に使わないでください。 pty モードの stderr (標準エラー出力)は、単純に stdout (標準出力)になります。

文字列と整数

--name="" のように文字が含まれるオプションは、1つしか指定できません。 -c=0 のように整数の場合も、1つしか指定できません。