Docker新コマンドのまとめメモ

Docker、Docker Composeの新コマンドを備忘録的に記す。
間違いや指摘があればコメントお願いします。

# Dockerコマンド


#### イメージをダウンロードする
`$ docker image pull <イメージ名>`

#### イメージ一覧を表示する
`$ docker image ls`

#### イメージの詳細情報を表示
`$ docker image inspect <イメージ名 or イメージID>`

#### イメージレイヤーを確認
`$ docker image history <イメージ名 or イメージID`

#### イメージを削除する
`$ docker image rm <イメージ名 or イメージID>`

#### イメージからコンテナを作成し、起動する
`$ docker container run <イメージ名 or イメージID>`

 - `--name`：コンテナに任意の名前をつける 
 - `--rm`：コンテナを実行した後に自動削除する
 - `-d`：デタッチドモードでコンテナを起動する。何もつけないとフォアグラウンドモードで起動する

 #### コンテナを起動して任意のコマンドを実行させる
`$ docker container run -it <イメージ名 or イメージID> <実行したいコマンド名>`

- 例）`$ docker container run -it ubuntu:20.04 ls`

#### コンテナ一覧を表示する
`$ docker container ls`

#### 起動中のコンテナを止める
`$ docker container stop <コンテナ名 or コンテナID>`

#### コンテナを再起動する（Upにする）
`$ docker container restart <コンテナ名 or コンテナID>`

#### Up状態のコンテナに任意のコマンドを実行させる
`$ docker container exec <コンテナ名 or コンテナID> <実行したいコマンド>`

- `-d`：デタッチドモードでコンテナを起動する。何もつけないとフォアグラウンドモードで起動するため、コンテナのログが画面上に出力され、続けてコマンドがを打つことができなくなる

#### デタッチドモードのコンテナに接続する
`$ docker container attach <コンテナ名 or コンテナID>`

#### コンテナを破棄する
`$ docker container rm <コンテナ名 or コンテナID>`

- Exitedになっているコンテナにしか有効でない
- `-f`：動作中のコンテナも強制削除する

#### 停止済みのコンテナをすべて削除
`$ docker container prune`

#### Dockerfileからイメージを作成する
`docker image build <ディレクトリパス>`
- ディレクトリパスはDockerfileが保存されているパス
- `-t`：イメージ名:タグ名をつける
- `$ docker image build -t <イメージ名>:<タグ名> <ディレクトリパス>`

#### 新しいvolume領域を作成する
`docker volume create <ボリューム名>`

#### volume領域一覧を表示する
`$ docker volume ls`

#### 指定したvolume領域の詳細情報を表示する
`$ docker volume inspect <ボリューム名>`

#### 指定したvolume領域を削除する
`$ docker volume rm <ボリューム名>`

#### volumeに接続しながらコンテナを起動する
`$ docker container run -v <ボリューム名>:<コンテナ内絶対パス> <イメージ名 or イメージID>`
`$ docker container run --mount type=volume src=<ボリューム名>,dst=<コンテナ内絶対パス> <イメージ名 or イメージID>`

#### バインドマウントしながらコンテナを起動する
`$ docker container run -v <ホスト絶対パス>:<コンテナ内絶対パス> <イメージ名 or イメージID>`
`$ docker container run --mount type=bind,src=<ホスト絶対パス>,dst=<コンテナ内絶対パス> <イメージ名 or イメージID>`
- 毎回絶対パスを入力するのは面倒なので`$(pwd)/...`とすると良い

#### ホストとコンテナのポートを紐付ける
`$ docker container run -p <ホスト側のポート>:<コンテナ側のポート> <イメージ名 or イメージID>`
- `-p`によってホストマシンのポートとコンテナのポートを紐付ける

#### ネットワークの一覧を表示する
`$ docker network ls`

#### ネットワークの詳細情報を表示する
`$ docker network inspect <ネットワーク>`

#### 新しいネットワークを作成する
`$ docker network create <ネットワーク>`

#### 指定したネットワークに接続したコンテナを起動する
`$ docker container run --network <ネットワーク> <イメージ名 or イメージID>`

#### ネットワークを削除する
`$ docker network rm <ネットワーク>`

# Docker Composeコマンド

#### Docker Composeを使ってコンテナの作成と起動
`$ docker compose up`
- `--build`：イメージの作り直しが行われる
- `-d`：デタッチドモードでコンテナを起動する。何もつけないとフォアグラウンドモードで起動するため、コンテナのログが画面上に出力され、続けてコマンドがを打つことができなくなる


#### Docker Composeでコンテナを停止
`$ docker compose stop`

#### Docker Composeで作成済みのコンテナを起動
`$ docker compose start`
- 作成済みのコンテナを起動するだけで、コンテナの作成は行わない
- 複数のコンテナがある場合は、まとめて起動す

#### Docker Composeのプロジェクトを一覧表示
`$ docker compose ls`
 
#### Docker Composeでファイルをコピー
`$ docker compose cp`
- `$ docker compose cp <ホストのファイルパス> <コンテナ名:コンテナ内のファイルパス>`：コンテナへファイルをコピー
- `$ docker compose cp <コンテナ名:コンテナ内のファイルパス> <ホストのファイルパス>`：ホストへファイルをコピー

#### Docker Composeで立ち上げたコンテナ一覧を表示
`$ docker compose ps`

#### Docker Composeでコンテナ内でコマンド実行
`$ docker compose exec <コンテナ名> <実行したいコマンド名>`
- `$ docker compose exec <コンテナ名> /bin/bash`：コンテナ内でシェルを立ち上げる

#### Docker Composeでコンテナの作成と実行
`$ docker compose run <コンテナ名> <実行したいコマンド名>`
- `--rm`：コンテナを実行した後に自動削除する

#### Docker Composeを使用して作成したコンテナの削除
`$ docker compose down`
- コンテナが実行中であっても使用可能。コンテナだけではなく紐づくネットワークも自動で削除する
- `--rmi`：イメージを削除
- `-v`：Docker Composeファイルの`volumes`に記載したボリュームと、コンテナにアタッチされた匿名ボリュームを削除
- `--remove-orphans`：Docker Composeファイルで定義されていないコンテナも削除

`$ docker compose rm`
- コンテナが実行中の場合、使用不可。コンテナを削除するが、紐づくネットワークは削除しない
- `-s`：コンテナの停止と削除を同時に行う