Dockerチートシート
概要
Dockerについて勉強しましたが、コマンド多くてなかなか覚えられない。そんな私のためによく使用しそうなコマンドをかき出しました。
Dockerコマンド一覧
docker
for docker images
docker run <DockerImage> [<command> [<command option>]]
pull->create->startを実行--name <container name>
: 任意のコンテナ名でImageを起動する-p <host port>:<container port>
: コンテナのポートとホストマシンのポートどこにホスティングするか指定する-d
: dettachモードで起動する。コンテナの動作をバックグラウンドで実行する。主にデーモンプログラムをコンテナで起動する際に指定する。-i
: コンテナの標準入力を取得し、双方向に操作できるようにする-t
: コンテナ内にホストをttyとして設定する(ホストを入出力用の実端末として登録する)--rm
: コンテナが停止した時点で自動的に削除される<command>
,<command option>
: 指定した場合、コンテナ起動後にコンテナ上で実行される--link <DockerContainer>:<alias>
: 作成されるコンテナからAliasで別コンテナへの通信経路が確立される。※レガシー機能のため削除される予定--network <dockerhost network name>
: 作成時点で指定したDockerNetworkのみに接続される(デフォルトはbridge)-h <container host name>
: 作成されるコンテナのホスト名を指定する--mount src=<src>,dst=<dst>[,type=<type>][,tmpfs-size=<memory size>][,tmpfs-mode=<tmpfs mode>][,<option>]
<src>
:<dockerhost volume name>
or<dockerhost dir path>
or<dockerhost file path>
<dst>
:<container dir path>
or<container file path>
<type>
: 使用するマウントタイプを指定するbind
: bind mounttmpfs
: tmpfs
<memory size>
: tmpfsでマウントする場合に使用するために確保するメモリの上限<tmpfs mode>
: ファイルモードを設定する<option>
readonly
: read-only
docker pull <DockerImage>
DockerImageの取得(未ダウンロードの場合はDocker Hub上からダウンロード)docker push <DockerImage>
レジストリサーバへDockerImageを登録するdocker create <DockerImage>
Dockerコンテナの作成docker images
ローカルのDockerImage情報を表示するdocker tag <DockerImage> <DockerImageAlias>
取得済みのDockerImageのAliasを作成するdocker inspect (<docker image name> | <docker image id>)
DockerImageの詳細情報を表示するdocker rmi <DockerImage>
削除時に対象Imageを使用したコンテナが起動中の場合はコンテナを終了する必要がある-f
: コンテナが存在する状態であっても強制的にImageを削除する
docker buid [option] <build context>
DockerFileからDockerImageを作成する<build context>
で指定されたディレクトリ上のファイルがすべてDockerデーモンに送信され、そこにあるDockerFileでビルドされる-t <docker image name>
: 作成するImageの名前を付ける--no-cache
: ビルドキャッシュが存在する場合でも強制的に再ビルドする
for docker containers
docker start <DockerContainer>
Dockerコンテナの起動docker stop <DockerContainer>
Dockerコンテナの停止docker pause <DockerContainer>
Dockerコンテナの一時停止docker unpause <DockerContainer>
Dockerコンテナの一時停止解除docker restart <DockerContainer>
Dockerコンテナの再起動docker rm <DockerContainer>
停止状態のDockerコンテナの削除-f
: 停止状態以外でも強制的に削除(一度停止状態に変更してから)
docker ps
ステータスがRunning
のDockerコンテナ一覧表示-a
: その他ステータスのコンテナを含めて表示
docker cp <src file path> <DockerContainer>:<dst file path>
ホスト上のファイルをコンテナ上に転送するdocker cp <DockerContainer>:<src file path> <dst file path>
コンテナ上のファイルをホスト上に転送するdocker inspect <DockerContainer>
コンテナの詳細情報を表示docker attach <DockerContainer>
コンテナのPID1の標準入出力に接続exit
で抜けるとPID1のプロセスも終了し、コンテナが終了するCtrl+P
->Ctrl+Q
で抜けることができるが、コンテナ起動時に-it
オプションを指定していない場合は使用不可docker exec <DockerContainer> <command>
コンテナ内で任意のコマンドを実行することができるexit
で抜ける-i
: コンテナの標準入力を取得し、双方向に操作できるようにする-t
: コンテナ内にホストをttyとして設定する(ホストを入出力用の実端末として登録する)docker exec -it <DockerContainer> /bin/bash
で任意のコンテナの標準入出力をマウントできる
for docker networks
docker network ls
DockerHostの構成するネットワークの一覧を表示するdocker network inspect <dockerhost network name>
DockerNetworkの詳細情報を表示するdocker network create <dockerhost network name>
ユーザ定義のBridgeNetworkを作成する--driver <network type>
: 作成されるネットワークの種別を指定する
docker network connect <dockerhost network name> <DockerContainer>
コンテナをDockerNetworkに接続するdocker network disconnect <dockerhost network name> <DockerContaier>
コンテナをDockerNetworkから外す
for docker volunes
docker volume create <dockerhost volume name>
DockerHost上にDockerVolumeを作成するdocker volume ls
DockerHost上のDockerVolumeの一覧を表示するdocker volume inspect <dockerhost volume name>
DockerVolumeの詳細情報を表示するdocker volume rm <dockerhost volume name>
DockerVolumeを削除する
for docker swarm
docker swarm init
現在のDockerHostをMasterとするDocker Swarmを初期構築する--advertise-addr <docker host ip address>
: 指定したアドレスをSwarmに参加するDockerHostへ通知する
docker swarm join-token (manager | worker)
DockerSwarmに参加するためのコマンドを表示する(only manager node)docker node ls
DockerSwarmに参加しているDockerHostの一覧を表示する(only manager node)docker service create <DockerImage>
DockerSwarmで稼働するServiceを生成する--replicas <number>
: 生成するタスクの数を指定する-d
: detachモードでコンテナを起動--name <container name>
: コンテナの名称-p <host port>:<container port>
: コンテナのポートとホストマシンのポートどこにホスティングするか指定する--constraint <condition>
: タスクを起動するNodeの条件を指定する
docker service update <service name>
Serviceの情報を変更する-d
: detach--XXX-add <value>
: 設定の追加--XXX-rm <value>
: 設定の削除
docker service rollback <service name>
Serviceの変更を一つ前の状態に戻す(2回連続で実行するとrollbackの取り消しになる)-d
: detach
docker service ps <service name>
サービスにおけるタスクの状況を表示docker service ls
DockerSwarm上で稼働しているService一覧を表示するdocker service inspect <service name>
Service の情報を詳細に表示--pretty
: 表示を見やすくする
docker service rm <service name>
Service を削除する
for others
docker login [<hosting site>]
レジストリサーバへログインする<hosting site>
が省略された場合は、DockerHubが指定されるdocker commit <DockerContainer> <DockerImage>
コンテナの状態をイメージ化する ※DockerImage内にコンテナの操作履歴は残らないため透明性が低いDockerImageが完成する。
docker-machine
General
docker-machine ls
DockerHostの一覧を表示するdocker-machine create <DockerHost>
DockerHostの作成--driver <hosted hypervisor>
: 使用する仮想化ソフトウェアを指定する(default:virtualbox
)--swarm
: SwarmClusterに追加する--swarm-master
: SwarmCluster内での役割をマスターに設定する--swarm-discovery="<keyvalue store type>:<keyvalue store ip>:<keyvalue store connection port>"
: Swarmが使用するキーバリューストアの場所を指定する--engine-opt="cluster-store=<keyvalue store type>:<keyvalue store ip>:<keyvalue store connection port>"
: オーバーレイネットワーク用にキーバリューストアの場所を指定する。DockerEngineがコンテナ・ネットワーク・ボリュームの情報を共有するのに使用する--engine-opt="cluster-advertise=<dockerhost nwif>:<dockerhost port>"
: DockerHost間の通信に使用するNWIFとポートを指定する
docker-machine stop <DockerHost>
DockerHostを停止するdocker-machine start <DockerHost>
DockerHostを起動するdocker-machine env <DockerHost>
docker
コマンドを実行するDockerHost(ActiveなDockerHost)の切り替えを行うための環境変数一覧を表示するdocker-machine ssh <DockerHost>
DockerHostへSSH接続をするdocker-machine ip <DockerHost>
DockerHostのIPアドレスを表示するDockerHost on AWS
docker-machine create --driver amazonec2 <DockerHost>
認証情報は事前に~/.aws/credentials
設定されていること(オプション指定も可)docker-machine create --driver google
認証情報は事前にダウンロードし、GOOGLE_APPLICATION_CREDENTIALS
に認証ファイルパスを指定する--google-project <gcp project id>
:--google-zone <gcp region>
: DockerHostが作成されるGCPのリージョンを指定。東京リージョン:asia-northeast1-a
docker-compose
docker-compose run <service name> [<command>]
DockerComposeを起動する。初回ファイルの作成など一度だけの実行の場合に実行する。<service name>
はdocker-compose.yml
で定義したサービス名を記述するdocker-compose up
DockerComposeを開始/再起動する-d
: デタッチモードで起動する
docker-compose build
docker-composeに記述されているImageBuildを明示的に実行する。
Docker用語説明
DockerImage
<DockerImage>
= [<repository name>/]<docker image name>[:<docker image tag>]
* <repository name>
を指定しない場合はDocker社の提供するオフィシャルレポジトリが参照される。
* <docker image tag>
を指定しない場合は自動的にlatest
が指定される。
* latest
が最新版である保証はない
* AUFSと呼ばれるファイルシステムをもとにコンテナに必要なファイルを積み上げたファイルシステム
* DockerImageレイヤは読み取り専用
* コンテナレイヤのみ読み書き可能(コンテナ作成時またはコンテナからの操作によってDockerImageレイヤの上に積み上げられる)
* 同一イメージを利用する複数のイメージがある場合は、同一のデータを参照するため合計データ量が削減される
DockerContainer
<DockerContainer>
= (<docker container name> | <docker container ID>)
* <docker container name>
はdocker run
またはdocker create
コマンドで--name
オプションで指定した値
* <docker container ID>
はdocker ps
コマンドで確認できる値
Status
Created
orcreated
コンテナが作成された状態Up
orrunning
コンテナが起動している状態Up (Paused)
orpaused
コンテナが一時停止された状態restarting
コンテナが再起動中の状態Exited
orexited
コンテナの動作が終了し、停止している状態removing
コンテナ削除中の状態dead
コンテナの異常状態(削除するしかない)
DockerFile
- DockerFile→DockerImageの作業をイメージビルドと呼ぶ
- イメージビルドはDockerFileが更新されない限り再実行してもキャッシュが使用されてビルドされない
構文
FROM <DockerImage>
- 作成するDockerImageの継承元DockerImageを指定する
RUN <command>
- イメージビルド時に実行され、結果がDockerImage内に保存される
CMD <command>
docker create
実行時にコンテナで実行される
COPY <host src path> <containers dst abs-path>
- イメージビルド時にホスト上のファイルがDockerImage内に転送される
ENV <environmental variable name> <value>
- 作成されたコンテナ上に環境変数を設定する
WORKDIR <path>
- コンテナ上のワークディレクトリを変更する
DockerHub
- Docker社が提供する公式のImage公開サイト
- Imageの登録・公開が可能
AutomatedBuild
- Githubなどでビルドコンテキストを管理し、変更があるとDockerHubが自動的にビルドを行い、そのDockerImageをDockerHubに登録する
Docker Machine
- DockerHostを管理するツール
DocekrHost
<DockerHost>
= <docker host name>
* <docker host name>
は指定しないことも可能。その場合default
というDockerHostを指定したことになる
- DockerHostはDockerEngineを積んだ仮想マシンのこと
- DockerHostの起動には仮想化ソフトウェアを利用する
- DockerHostのOSは
boot2docker
軽量LinuxでDockerEngineのインストールが自動的に行われる docker-machine env <DockerHost> | Invoke-Expression
を実行することでdocker
コマンドの実行するDockerDeamonを指定したDockerHostのDockerDeamonに切り替えることが可能(Active化)- ActiveなDockerHostは
docker-machine ls
で*
が付加されているDockerHost
BridgeNetwork
- DockerHost内で構成されるネットワーク
- bridge driver
- 同一DockerHost上のコンテナ同士で通信することができる
- ユーザ定義型の場合はネットワーク上にてDockerDNSの機能を提供し、コンテナ名にて通信を行うことが可能
- 外部接続可能(コンテナのポートを開放する必要あり)
- host driver
- DockerHostと同じネットワーク設定を提供
- コンテナのポート開放をしなくても接続できる
- null driver
- Loopbackインターフェースのみを提供する
- その他NWへのコネクトをすべて解除する必要あり
- bridge driver
MultiHostNetwork
- StandAloneSwarm
- キーバリューストアが必要(サービスディスカバリ)
DockerDataManagement
- Volume
- DockerHost上の
/var/lib/docker/volumes
が作成されコンテナ内に任意のディレクトリにマウントされる - 複数のコンテナで同一のVolumeを参照することができる
- DockerHost上の
- bind mount
- Host上のディレクトリやファイルをコンテナにマウントすることができる
- tmpfs
- Hostのメモリ上にデータを置き、コンテナにマウントすることができる
DockerCompose
ymlファイルに設定を記述することでアプリケーション環境を一度に起動する