よく使うDockerコマンドまとめ

# よく使うもの
`history | grep docker`とかでよく使ってるコマンドを調べた結果です。

## よく使うコマンド

| コマンド | 説明 |
|--------|------|
| run | コンテナの作成 + 開始 ( create + start) |
| exec | 起動中のコンテナで実行 |
| stop | 止める(SIGTERMを送る) |
| kill | キルする(SIGKILLを送る) |
| ps | 起動中のコンテナを見る。-aで終了も。 |
| rm | コンテナ削除。容量減ってきたら。 |
| rmi | イメージ削除。容量削減に効果的。 |


## よく使うオプション

| オプション | 説明 |
|----|----|
| -i, --interactive | インタラクティブモード |
| -t, --tty | 仮想TTYを割り当てて起動。 |
| -d | デタッチ状態。--daemonに似てる。 |
| --privileged | CentOSとかで特権使う際に。 |

## よく使う使い方

全部のDockerコンテナを終了させる。（SIGTERMを送る）

```bash
$ docker stop $(docker ps -aq)
```

こっちはキルする。（SIGKILLを送る）

```bash
$ docker kill $(docker ps -aq)
```

## ちょっとだけコンテナを使いたい時

例: CentOS7のコンテナを起動する。
（CentOSでちょっとしたコマンドとかの確認をしたい時。）

```bash
$ docker run -i -t centos:centos7
[root@bf2a3ae69d2e /]#
```

例: Rubyの要件がきついwpscanを起動する。

```bash
$ docker run -it wpscanteam/wpscan --random-agent -u 'https://example.com'
```

## コンテナを起動しっぱなしにしておきたい時
コンテナに自分で名前を付けて(my_centos7)、そのコンテナで都度都度bashを起動する

```bash
$ docker run --name my_centos7 -itd centos:centos7
9305cc126248aa667f55888798ce362a1d4461542c18596826444db8220dcb48

$ docker exec -it my_centos7 /bin/bash
[root@9305cc126248 /]#
````

## 使っていないイメージを削除
Docker関連で容量が圧迫されるのでクリーンアップに。

```bash
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
```

（2025年追記）
Dockerイメージの削除について、削除前にどのイメージが削除されるかを確認するコマンドです。

```bash
echo -e "REPOSITORY\tTAG\tSIZE\tCONTAINERS"

# イメージ一覧を取得 → 各イメージIDごとにコンテナ数をカウント → サイズ順ソート
docker images --format "{{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" \
  | while IFS=$'\t' read -r id repo tag size; do
      cnt=$(docker ps -a --filter "ancestor=$id" --format '{{.ID}}' | wc -l)
      echo -e "$repo\t$tag\t$size\t$cnt"
    done \
  | sort -k3 -h \
  | column -t
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/6d8f76c7-f75d-4d47-a4c0-152cd386a6b9.png)




こうすると「イメージ名」「容量」「イメージを利用しているコンテナ数」がわかります。
基本的にイメージを利用しているコンテナ数が0のものが削除対象になります。その一方で、「このコンテナは容量がでかいけど消していいだろうか…。でもたくさんのコンテナが使っているから消しづらそうだな」とかそういう判断ができるかと思います。


## Docker Compose関連

### Docker Compose のプロジェクト一覧

Docker Desktopを使っているとDocker Composeで起動したプロジェクト一覧を出すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/2e51cfa5-0a7e-4523-9f4d-4e046badd862.png)

これは `docker-compose.yml` がどこに行ったかわからないときでも出てくるので便利！
でもDesktopのStopボタンはうまく動作しない（停止できない）ので、個別に停止する必要があったりします。

またCLIしかない環境でも同様のことをやりたいなと思ってChatGPTに聞くと下記のようにすればできるとのこと。


```bash
# ① プロジェクト名一覧を取得
docker ps -a \
  --filter label=com.docker.compose.project \
  --format '{{.Label "com.docker.compose.project"}}' \
  | sort -u
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/61cd8eed-c149-487d-9cfa-f291827ed1a0.png)

便利！

それぞれ停止と削除。

```bash
# ② 停止・削除したいプロジェクト名を変数にセット
PROJECT=project_16_skb

# ③ 停止
docker ps -q \
  --filter label=com.docker.compose.project=$PROJECT \
  | xargs -r docker stop
```

```bash
# ④ 削除
docker ps -aq \
  --filter label=com.docker.compose.project=$PROJECT \
  | xargs -r docker rm
```

なお

> Docker Desktop の “Compose 単位” は、実はコンテナに付与されているラベル com.docker.compose.project で管理されています。CLI だけで同じようにグループ化・操作するには、次の２つの方法があります。

とのこと。

## 終了中のコンテナ削除

終了中のコンテナなので再起動させたい場合には注意が必要。

```bash
$ docker rm $(docker ps -a -f status=exited -q)
```

# 使わないコマンド

| コマンド | 説明 |
|--------|------|
| create | 作成（runがあるので使わない) |
| start | 起動（runがあるので使わない) |
| attach | アタッチ（使わない) |
| pull | イメージを拾ってくる（runの時に自動的に拾うので使わない） |
| images | イメージ一覧。外出中にテザリング環境で。 |
| push | イメージを自作するなら使う |
| build | イメージを自作するときに使う |
| tag | イメージを自作するなときに使う |



# リファレンス
公式: https://docs.docker.com/engine/reference/commandline/kill/#options
日本語公式: http://docs.docker.jp/engine/reference/run.html
削除周り: https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes