Docker コマンドラインの利用

読む時間の目安: 9 分

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 run コマンドの実行時に sudo をつけることが必要かもしれません。 sudo をつけずに docker コマンドを実行できるようにするには、システム管理者が docker という名のグループを生成して、そこにユーザーを追加するようにします。

Docker のインストールや sudo の設定に関する詳細は、各オペレーティングシステムにおける インストール のドキュメントを参照してください。

環境変数

以下に示す環境変数が docker のコマンドラインにおいてサポートされているので、わかりやすく一覧として示します。

  • DOCKER_API_VERSION 利用している API バージョン(たとえば 1.19 など)
  • DOCKER_CONFIG クライアントの設定ファイルが置かれている場所。
  • DOCKER_CERT_PATH 認証鍵データが置かれている場所。
  • DOCKER_CLI_EXPERIMENTAL CLI において試験的機能(experimental feature)を有効にします。(enabled または disabled
  • DOCKER_DRIVER 利用するグラフドライバー。
  • DOCKER_HOST デーモンソケットの接続先。
  • DOCKER_NOWARN_KERNEL_VERSION 利用しているカーネルが Docker の利用に不適切であっても警告を表示しません。
  • DOCKER_RAMDISK これが設定されている場合、’pivot_root’ を無効にします。
  • DOCKER_STACK_ORCHESTRATOR 管理コマンド docker stack を利用している場合に、デフォルトオーケストレーターを設定します。
  • DOCKER_TLS これが設定されている場合、TLS を利用します。
  • DOCKER_TLS_VERIFY これが設定されている場合、TLS を利用し、リモートを検証します。
  • DOCKER_CONTENT_TRUST これが設定されている場合、Notary を用いてイメージの署名と検証を行います。 build, create, pull, push, run においては --disable-content-trust=false とすることと同じです。
  • DOCKER_CONTENT_TRUST_SERVER 利用する Notary サーバーの URL。このデフォルトは Registry と同一 URL です。
  • DOCKER_HIDE_LEGACY_COMMANDS これが設定されている場合、「かつての古い」トップレベルコマンド(docker rmdocker pull)を、ヘルプ出力に表示しないようにします。 ただしオブジェクト指定を行うタイプの「管理コマンド」(たとえば docker container)では表示します。 将来のリリースにおいては、これがデフォルトになるかもしれません。 その際には本環境変数は削除されます。
  • DOCKER_TMPDIR Docker の一時的なファイルが置かれている場所。
  • DOCKER_CONTEXT 利用するコンテキストを指定します。 (これは環境変数 DOCKER_HOST と docker context use によって設定されたデフォルトコンテキストをオーバーライドします。)
  • DOCKER_DEFAULT_PLATFORM --platform フラグを持つコマンドにおいてデフォルトのプラットフォームを指定します。

Docker は Go 言語を使って開発されているため、Go 言語のランタイムにおいて用いられる環境変数はすべて利用することができます。 特に以下のものが大変便利です。

  • HTTP_PROXY
  • HTTPS_PROXY
  • NO_PROXY

この Go 言語環境変数は、英字の大文字小文字を区別しません。 こういった環境変数の詳細については Go 言語の仕様 を参照してください。

設定ファイル

Docker コマンドラインが利用する設定ファイルは、デフォルトで $HOME ディレクトリ配下の .docker というディレクトリに保存されます。

Docker はこの設定ディレクトリにあるファイルのほとんどを管理しているため、編集はしないでください。 ただし config.json ファイルだけは 編集可能 です。 これは docker コマンドが所定の動作となるように制御します。

docker コマンドの動作は、環境変数やコマンドラインオプションを使って変更することができます。 config.json ファイル内にオプションを指定して、動作変更ができるものもあります。 環境変数と --config フラグが同時に設定されている場合、環境変数よりもフラグの設定値が優先されます。 コマンドラインオプションは環境変数をオーバーライドします。 また環境変数は config.json ファイルに指定されたプロパティをオーバーライドします。

.docker ディレクトリの変更

設定ディレクトリを別ディレクトリに指定する場合は、環境変数 DOCKER_CONFIG を利用するか、あるいはコマンドラインオプション --config を利用します。 両方が指定された場合、--config オプションが環境変数 DOCKER_CONFIG をオーバーライドします。 以下の例は、~/testconfigs/ ディレクトリ内にある config.json を利用して docker ps コマンドの設定内容をオーバーライドするものです。

$ docker --config ~/testconfigs/ ps

このフラグは実行されたコマンドにだけ適用されます。 指定内容を永続的に利用したい場合は、シェル(~/.profile または ~/.bashrc)内において環境変数 DOCKER_CONFIG を設定するようにします。 以下の例では、別ディレクトリ $HOME/newdir/.docker を利用しています。

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

config.json 内のプロパティ

config.json ファイルは JSON 形式により複数のプロパティを設定します。

HttpHeaders プロパティは Docker クライアントからデーモンに向けて送信されるメッセージのすべてに対して、付与するヘッダー文字列を指定します。 Docker はその文字列内容を解釈したり理解するようなことはありません。 単にメッセージに対して文字列を付与するだけです。 なおこのメッセージの付与を通じて、他のメッセージを変更するようなことはできません。

psFormat プロパティは docker ps の出力におけるデフォルト書式を指定します。 docker ps コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの表書式を採用します。、 サポートされているフォーマットディレクティブの一覧は docker ps出力書式 の節 を参照してください。

imagesFormat プロパティは docker images の出力におけるデフォルト書式を指定します。 docker images コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの表書式を採用します。、 サポートされているフォーマットディレクティブの一覧は docker images出力書式 の節 を参照してください。

pluginsFormat プロパティは docker plugin の出力におけるデフォルト書式を指定します。 docker plugin コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの表書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker plugin出力書式 の節 を参照してください。

servicesFormat プロパティは docker service の出力におけるデフォルト書式を指定します。 docker service ls コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの JSON 書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker service ls出力書式 の節 を参照してください。

serviceInspectFormat プロパティは docker service inspect の出力におけるデフォルト書式を指定します。 docker service inspect コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの JSON 書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker service inspect出力書式 の節 を参照してください。

statsFormat プロパティは docker stats の出力におけるデフォルト書式を指定します。 docker stats コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの表書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker stats出力書式 の節 を参照してください。

secretFormat プロパティは docker secret ls の出力におけるデフォルト書式を指定します。 docker secret ls コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの表書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker secret ls出力書式 の節 を参照してください。

nodesFormat プロパティは docker node ls の出力におけるデフォルト書式を指定します。 docker node ls コマンドに --format フラグが指定されていない場合、Docker クライアントはこの nodesFormat の値を利用します。 この nodesFormat が設定されていない場合、クライアントはデフォルトの表書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker node ls出力書式 の節 を参照してください。

configFormat プロパティは docker config ls の出力におけるデフォルト書式を指定します。 docker config ls コマンドに --format フラグが指定されていない場合、Docker クライアントはこのプロパティを利用します。 このプロパティが設定されていない場合、クライアントはデフォルトの表書式を採用します。 サポートされているフォーマットディレクティブの一覧は docker config ls出力書式 の節 を参照してください。

credsStore プロパティは、デフォルトの資格証明ストア(credential store)として提供する外部バイナリを指定します。 このプロパティが設定されていない場合、docker login は、$PATH 上の docker-credential-<value> によって指定されたバイナリに資格証明の保存を試みます。 このプロパティが設定されていない場合、資格証明は config の auths プロパティに保存されます。 詳細は docker login資格証明ストア の節 を参照してください。

credHelpers プロパティは、指定 Registry に対しての資格証明の保存や取得を行う際に、credsStoreauths よりも優先的に利用される資格証明ヘルパー(credential helper)を指定します。 このプロパティが設定されていない場合、指定 Registry に対して実行バイナリ docker-credential-<value> が利用されます。 詳細は docker login資格証明ヘルパー の節 を参照してください。

stackOrchestrator プロパティは管理コマンド docker stack の実行時に利用するデフォルトオーケストレーターを指定します。 指定できる値は "swarm""kubernetes""all" です。 このプロパティは環境変数 DOCKER_STACK_ORCHESTRATOR または --orchestrator フラグによりオーバーライドできます。

proxies プロパティは、プロキシー関連の環境変数を指定します。 これはコンテナーに対して自動的に設定されるか、docker build の実行時に --build-arg を用いて設定されます。 プロキシーに関する "default" の設定は変更が可能です。 設定はクライアントが接続する Docker デーモンすべてに利用されるものと、ホスト(Docker デーモン)ごとに利用されるもの、たとえば “https://docker-daemon1.example.com” があります。 いずれの状況に対しても、以下のプロパティを設定することができます。

  • httpProxy (HTTP_PROXYhttp_proxy の値を設定します。)
  • httpsProxy (HTTPS_PROXYhttps_proxy の値を設定します。)
  • ftpProxy (FTP_PROXYftp_proxy の値を設定します。)
  • noProxy (NO_PROXYno_proxy の値を設定します。)

警告: プロキシー設定には機密情報を含んでいる場合があります。 (たとえばプロキシーが認証情報を必要としている場合です。) 環境変数はコンテナー設定において、プレーンなテキストとして保持されます。 そうであるものとして、リモート API において利用されたり、docker commit 実行時のイメージコミットに使われたりします。

コンテナーがアタッチされている状態から、これをデタッチし、コンテナーは起動し続けるようにするには、キーシーケンス CTRL-p CTRL-q を利用します。 このデタッチキーシーケンスは detachKeys プロパティを使って変更することができます。 このプロパティに対する値として <シーケンス> を設定してください。 <シーケンス> の記述書式はカンマ区切りのリストとするものであり、英字 [a-Z] か、あるいは ctrl- に以下を組み合わせたもののいずれかです。

  • a-z (単一の英小文字)
  • @ (アットマーク)
  • [ (左ブラケット)
  • \\ (2 つのバックスラッシュ)
  • _ (アンダースコア)
  • ^ (キャレット)

設定変更した内容は、Docker クライアントを使って起動したコンテナーすべてに対して適用されます。 この変更内容つまりデフォルトのキーシーケンスを、各コンテナーごとにオーバーライドすることができます。 これを行うには、docker attachdocker execdocker rundocker start の各コマンドにおいて --detach-keys フラグを指定します。

plugins プロパティは 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"
  },
  "stackOrchestrator": "kubernetes",
  "plugins": {
    "plugin1": {
      "option": "value"
    },
    "plugin2": {
      "anotheroption": "anothervalue",
      "athirdoption": "athirdvalue"
    }
  },
  "proxies": {
    "default": {
      "httpProxy":  "http://user:pass@example.com:3128",
      "httpsProxy": "http://user:pass@example.com:3128",
      "noProxy":    "http://user:pass@example.com:3128",
      "ftpProxy":   "http://user:pass@example.com:3128"
    },
    "https://manager1.mycorp.example.com:2377": {
      "httpProxy":  "http://user:pass@example.com:3128",
      "httpsProxy": "http://user:pass@example.com:3128"
    },
  }
}

試験的機能

試験的機能(experimental feature)は、将来の製品に搭載される機能をいち早く試すことができるものです。 ただし現段階でのこの機能は、テストとフィードバックのためだけを意図しています。 したがってリリース時には予告なく変更される場合があり、将来のリリースでは完全に削除されることもあります。

試験的な機能は本番環境では利用しないでください。

試験的機能を有効にするには、config.json ファイルを編集して experimentalenabled に設定してください。 以下に示すのが、config.json ファイルにおいて試験的機能を有効にする例です。 この例ではデバッグ機能も有効にしています。

{
  "experimental": "enabled",
  "debug": true
}

試験的機能は Docker Desktop メニューから有効にすることもできます。 詳しくは Docker Desktop をはじめよう のページを参照してください。

Notary

独自に Notary サーバーを稼動させ、自己署名証明書や内部認証局を利用している場合は、Docker の config ディレクトリ内の 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

メモ: -t-a stderr オプションを同時に指定することはできません。 これは pty 実装の制約によるものです。 pty モードにおける stderr は、単純に stdout へ出力されます。

文字列と整数値

--name="" といったオプションは、値に文字列をとるものであり、指定は一度だけしかできません。 -c=0 といったオプションは、値に整数値を指定し、指定は一度だけです。

Docker, Docker documentation, CLI, command line