Dockerの主なコマンド一覧

Dockerの主なコマンド、オプション。
詳細は[公式ドキュメント](https://docs.docker.com/engine/reference/commandline/cli/)。

<!--
# Docker
## インストール
https://docs.docker.com/get-docker/
-->

## Container
### docker container ls [オプション]
稼働中のコンテナ一覧を表示する。

* `-a` ― 停止中のコンテナも表示する。
* `-s` ― ファイルサイズを表示する。


### docker container [オプション] inspect コンテナ
コンテナの詳細情報を表示する。コンテナは複数指定可能(スペース区切り)。


### docker container run [オプション] イメージ [コマンド]
イメージからコンテナを作成し、稼働させる(`docker image pull`と`docker container create`と`docker container start`を一度に実行する)。
コマンドの終了と同時に、コンテナも停止する。終了と同時に破棄したい場合は`--rm`をつける。

* `--name コンテナ名` ― コンテナ名を指定する。
* `-p ホストのポート番号:コンテナのポート番号` ― コンテナのポートをホストに公開する。コンテナ間の通信では不要。
* `--mount type=bind,src=ホストのディレクトリ,dst=コンテナのディレクトリ` ― バインドマウント。ホストのディレクトリをコンテナにマウントする。複数指定可能。
* `--mount type=volume,src=ボリューム,dst=コンテナのディレクトリ` ― ボリュームマウント。ボリュームをコンテナにマウントする。複数指定可能。
* `--volumes-from コンテナ` ― 指定したコンテナと同じボリュームにマウントする
* `-e 環境変数名=値` ― 環境変数の設定
* `-dit` ― コンテナをバックグラウンドで実行させる(デタッチモード)。デタッチ中のログは`docker container logs`で確認できる。
* `-it` ― 標準入出力をコンテナに結びつける(キー入力する場合)。
* `-i` ― 標準入出力をコンテナに結びつける(キー入力しない場合)。
* `--rm` ― コマンドの実行が完了したとき、コンテナを破棄する。
* `-w` ― コンテナ内の作業ディレクトリを指定する。
* `--net` ― 接続するDockerネットワークを指定する。

```bash:コマンド例
# apacheをバックグラウンドで実行する
$ docker container run -dit --name my-container -p 8080:80 --mount type=bind,src="$PWD",dir=/usr/local/apache2/htdocs/ httpd:latest
```
<!--
# バックアップをとる①
$ docker container run --rm --mount type=volume,src=my-volume,dst=/src --mount type=bind,src="$PWD",dst=/dest busybox tar czf /dest/backup.tar.gz -C /src .
# リストアする
$ docker container run --rm -mount type=volume,src=my-volume,dst=/dest --mount type=bind,src="$PWD",dst=/src busybox tar xzf /src/backup.tar.gz -C /dest
# バックアップをとる②
$ docker run --rm --volumes-from my-container --mount type=bind,src="$PWD",dst=/dest busybox tar czf /dest/backup.tar.gz -C /src /var/lib/mysql
-->


### docker container create [オプション] イメージ [コマンド]
イメージからコンテナを作成する。作成時に実行したいコマンドを指定する。コマンドを省略すると、イメージ製作者が設定した規定のコマンドが実行される。

* `--name コンテナ名` ― コンテナ名を指定する。
* `-p ホストのポート番号:コンテナのポート番号` ― コンテナのポートをホストに公開する。コンテナ間の通信では不要。
* `--mount type=bind,src=ホストのディレクトリ,dst=コンテナのディレクトリ` ― バインドマウント。ホストのディレクトリをコンテナにマウントする。複数指定可能。
* `--mount type=valume,src=ボリューム,dst=コンテナのディレクトリ` ― ボリュームマウント。ボリュームをコンテナにマウントする。複数指定可能。
* `-e 環境変数名=値` ― 環境変数の設定


### docker container start [オプション] コンテナ
停止中のコンテナを稼働させる。コンテナは複数指定可能(スペース区切り)。


### docker container stop [オプション] コンテナ
コンテナを停止する。コンテナは複数指定可能(スペース区切り)。


### docker container rm [オプション] コンテナ
コンテナを完全削除する。復活はできない。コンテナは複数指定可能(スペース区切り)。


### docker container prune [オプション]
停止中のコンテナをすべて削除する。


### docker container logs [オプション] コンテナ
コンテナのログを表示する。


### docker container attach [オプション] コンテナ
Dockerホストのの標準入力、出力、およびエラーストリームを実行中のコンテナーにアタッチする。
デタッチする場合は「control + p, control + q」。


### docker container exec [オプション] コンテナ コマンド
実行中のコンテナでコマンドを実行する。`docker container run`と異なり、コマンドの終了後もコンテナは稼働し続ける。

* `-it` ― 標準入出力をコンテナに結びつける(キー入力する場合)。
* `-i` ― 標準入出力をコンテナに結びつける(キー入力しない場合)。
* `-w` ― コンテナ内の作業ディレクトリを指定する。

```bash:コマンド例
# 実行中のコンテナでシェルを実行する
$ docker container exec -it my-container /bin/bash
```


### docker container cp [オプション] コピー元のパス コピー先のパス
Dockerホスト、コンテナ間でファイルをコピーする。コンテナが停止中でも可能。
コンテナは「コンテナ:パス」で指定する。

```bash:コマンド例
# Dockerホスト → コンテナ
$ docker container cp /tmp/index.html my-container:/usr/local/apache2/htdocs/
# コンテナ → Dockerホスト
$ docker container cp my-container:/usr/local/apache2/htdocs/index.html .
```


### docker container commit [オプション] コンテナ [イメージ名[:タグ]]
コンテナからイメージを作成する


### docker container export [オプション] コンテナ
コンテナのファイルシステムをtarアーカイブとしてエクスポートする。
作成されたtarアーカイブは`docker image import`でイメージに変換できる。
`docker image save`とは異なり、レイヤー情報やメタ情報は保存されない。
そのため、exportされたファイルをimportして作成したイメージは、`run`コマンドも明示的にコマンドを入力する必要がある。

* `-o パス` ― ファイルに書き出す。





## Image
### docker image ls
Dockerホストに保存されたイメージの一覧を表示する。


### docker image history [オプション] イメージ
イメージの変更履歴を表示する。

* `--no-trunc` ― 省略せずに表示する。


### docker image tag イメージ[:タグ] イメージ名[:タグ]
イメージ名・タグを変更する


### docker image rm [オプション] イメージ
イメージを破棄する。イメージは複数指定可能(スペース区切り)。


### docker image prune [オプション]
使用していないイメージをすべて削除する。


### docker image build [オプション] パス
Dockerfileからイメージを作成する。

* `--no-cache` ― イメージ作成時にキャッシュを使用しない。
* `-t イメージ名[:タグ]` ― イメージ名を指定する。


### docker image push [オプション] イメージ[:タグ]
Dockerレジストリにイメージをプッシュする。
DockerHubにプッシュする場合、イメージ名を`docker image tag`等で「dockerId/リポジトリ名:タグ」に設定する必要がある。
まだ作成されていないリポジトリ名でプッシュすると、イメージ名と同名のpublicなリポジトリが作成される。

```bash:コマンド例
# DockerHubの自分のレジストリにプッシュする
$ docker login
$ docker image push dockerId/myimage
```


### docker image pull [オプション] イメージ名[:タグ]
イメージをレジストリから取得する。取得したイメージはDockerホストに保存される。


### docker image save [オプション] イメージ
イメージをtarアーカイブに保存する。イメージは複数指定可能(スペース区切り)。
デフォルトでSTDOUTにストリーミングされる。
保存したtarアーカイブは`docker image load`でイメージに変換できる。
`docker container export`と異なり、レイヤー構造も保存される。

* `-o パス` ― ファイルに書き込む。

```bash:コマンド例
$ docker image save -o savedimage.tar myimage
```


### docker image load
tarアーカイブまたはSTDINからイメージを読み込む。
tarアーカイブは`docker image save`でコンテナから作成できる。

* `-i パス` ― tarアーカイブファイルから読み込む。


### docker image import [オプション] パス [イメージ名[:タグ]]
`docker container export`によって作成されたtarファイルからイメージを読み込む。





## Volume
### docker volume ls [オプション]
ボリュームの一覧を表示する。

### docker volume inspect [オプション] ボリューム
ボリュームの詳細情報を表示する。ボリュームは複数指定可能(スペース区切り)。

### docker volume create [オプション] [ボリューム]
ボリュームを作成する。

* `--name` ― ボリューム名を指定する


### docker volume rm [オプション] ボリューム
ボリュームを削除する。

### docker volume prune [オプション]
使用していないボリュームをすべて削除する。






## Network
### docker network ls [オプション]
Dockerのネットワークを一覧表示する。


### docker network inspect [オプション] ネットワーク
Dockerのネットワークの詳細情報を表示する。


### docker network create [オプション] ネットワーク名
ネットワークを作成する。

* `-d` ― ドライバーを指定する。指定しなかった場合、bridgeネットワークが作成される。


### docker network connect [オプション] ネットワーク コンテナ
コンテナをネットワークに接続する

### docker network disconnect [オプション] ネットワーク コンテナ
コンテナをネットワークから切断する


### docker network rm ネットワーク
ネットワークを削除する。ネットワークは複数指定可能(スペース区切り)。






## その他
### docker login [オプション] [サーバー]
Dockerレジストリにログインする


### docker logout [サーバー]
Dockerレジストリからログアウトする


<!-- 
# docker compose

### docker-compose up -d
### docker-compose ps
### docker-compose down
-->