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 rm
やdocker 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 に対しての資格証明の保存や取得を行う際に、credsStore
や auths
よりも優先的に利用される資格証明ヘルパー(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_PROXY
とhttp_proxy
の値を設定します。)httpsProxy
(HTTPS_PROXY
とhttps_proxy
の値を設定します。)ftpProxy
(FTP_PROXY
とftp_proxy
の値を設定します。)noProxy
(NO_PROXY
とno_proxy
の値を設定します。)
警告: プロキシー設定には機密情報を含んでいる場合があります。 (たとえばプロキシーが認証情報を必要としている場合です。) 環境変数はコンテナー設定において、プレーンなテキストとして保持されます。 そうであるものとして、リモート API において利用されたり、
docker commit
実行時のイメージコミットに使われたりします。
コンテナーがアタッチされている状態から、これをデタッチし、コンテナーは起動し続けるようにするには、キーシーケンス CTRL-p CTRL-q
を利用します。
このデタッチキーシーケンスは detachKeys
プロパティを使って変更することができます。
このプロパティに対する値として <シーケンス>
を設定してください。
<シーケンス>
の記述書式はカンマ区切りのリストとするものであり、英字 [a-Z] か、あるいは ctrl-
に以下を組み合わせたもののいずれかです。
a-z
(単一の英小文字)@
(アットマーク)[
(左ブラケット)\\
(2 つのバックスラッシュ)_
(アンダースコア)^
(キャレット)
設定変更した内容は、Docker クライアントを使って起動したコンテナーすべてに対して適用されます。
この変更内容つまりデフォルトのキーシーケンスを、各コンテナーごとにオーバーライドすることができます。
これを行うには、docker attach
、docker exec
、docker run
、docker 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
ファイルを編集して experimental
を enabled
に設定してください。
以下に示すのが、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
といったオプションは、値に整数値を指定し、指定は一度だけです。