新コマンドライン命令体系における便利な Docker コマンドの備忘録

筆者が Docker Engine で検証作業をしていた際に、実際によく利用していたコマンドを備忘録として書き留めています。今後も不定期で更新予定です。ただし、Docker v1.13 以降の **新しいコマンドライン命令体系** を対象としています。また、Docker Compose のバージョンは 2022 年春に GA (一般提供開始) になった「**Docker Compose V2**」を前提としています。

- **表記の意味**
    - <code>[option]</code> は、<code>docker</code> コマンドのオプションを指します。
    - <code>[image]</code> は、Docker イメージ ID を指します。<code>[images]</code> と表記した場合は、<code>[image]</code> を半角空白 <code>␣</code> 区切りで複数指定できることを意味します。
    - <code>[container]</code> は、コンテナ名またはコンテナIDを指します。<code>[containers]</code> と表記した場合は、<code>[container]</code> を 半角空白 <code>␣</code> 区切りで複数指定できることを意味します。
    - <code>[command]</code> は、特定のコンテナ内で実行するコマンドを指します。

<table>
	<tbody>
		<tr>
			<td><b><code>docker</code> コマンド</b></td>
			<td><b>動作</b></td>
			<td><b>備考 (補足説明・使用例)</b></td>
		</tr>
		<tr>
			<td><code>docker compose up [option]</code></td>
			<td>コンテナのビルド、(再)生成、起動、アタッチの実行</td>
			<td>
                <ul>
                    <li>
リンクされているサービスが未起動の場合、それらも含めて起動。
                    </li>
                    <li>
<code>docker compose up -d</code>
                    </li>
                        <ul>
                            <li>
デタッチモード。コンテナをバックグラウンド起動し、新たなコンテナ名を表示。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker compose down [option]</code></td>
			<td><code>up</code> コマンドで作成したインスタンスの削除</td>
			<td>
                <ul>
                    <li>
オプション無しの場合、コンテナとネットワークのみを削除。
                    </li>
                    <li>
<code>docker compose down --rmi all --volumes --remove-orphans</code>
                    </li>
                        <ul>
                            <li>
<code>up</code> の逆コマンドに相当 (<b>滅びの呪文</b>)。<code>up</code> コマンドで生成されたインスタンス (イメージ、コンテナ、ボリューム、ネットワーク) のすべてを削除可能。
                            </li>
                            <li>
<code>--rmi</code> オプションで、削除するイメージの種類を指定可能。<code>all</code>　はすべてのイメージの意。<code>local</code> はフィールドにカスタムタグの無いイメージのみを削除。
                            </li>
                            <li>
<code>--volumes</code> オプションで、Compose ファイルの <code>volumes</code> セクションで宣言された名前付きボリュームと、コンテナに接続された匿名のボリュームを削除。
                            </li>
                            <li>
<code>--remove-orphans</code> オプションで、Compose ファイルで定義されていないサービス用のコンテナも削除。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker ps [option]</code></td>
			<td>コンテナの表示</td>
			<td>
                <ul>
                    <li>
オプションなしの場合、起動中の全てのコンテナを表示。
                    </li>
                    <li>
<code>docker ps -a</code>
                    </li>
                        <ul>
                            <li>
全てのコンテナを表示。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker image ls [option]</code></td>
			<td>Docker イメージの表示</td>
			<td>
                <ul>
                    <li>
<code>docker image ls -a</code>
                    </li>
                        <ul>
                            <li>
中間イメージを含めた全イメージの表示。
                            </li>
                        </ul>
                    <li>
<code>docker image ls -aq</code>
                    </li>
                        <ul>
                            <li>
中間イメージを含めた全イメージのイメージ ID の一覧表示。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker image rm [option] [images]</code></td>
			<td>１つまたは複数のイメージの削除</td>
			<td>
                <ul>
                    <li>
<code>docker image rm -f [images]</code>
                    </li>
                        <ul>
                            <li>
削除対象のイメージがコンテナに紐づけられていても強制的に削除。オプション <code>-f</code> が無い場合、削除対象のイメージがコンテナに紐づいているとエラー発生。
                            </li>
                        </ul>
                    <li>
<code>docker image rm `docker images -aq`</code>
                    </li>
                        <ul>
                            <li>
コンテナに紐づけられたイメージを含めた全イメージの削除。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container ls [option]</code></td>
			<td>コンテナの表示</td>
			<td>
                <ul>
                    <li>
<code>docker container ls -a</code>
                    </li>
                        <ul>
                            <li>
停止中のコンテナを含めた全コンテナの表示。オプション <code>-a</code> が無い場合、実行中のコンテナのみ表示。
                            </li>
                        </ul>
                    <li>
<code>docker container ls -aq</code>
                    </li>
                        <ul>
                            <li>
停止中のコンテナを含めた全コンテナのコンテナ ID のみを一覧表示。
                            </li>
                        </ul>
                    <li>
<code>docker container ls -aq --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Networks}}\t{{.Mounts}}"</code>
                    </li>
                        <ul>
                            <li>
停止中のコンテナを含めた全コンテナのコンテナ ID、コンテナ名、イメージ名、ネットワーク名、データボリューム名を一覧表示。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container exec [option] [container] [command]</code></td>
			<td>実行中のコンテナ内でのコマンド実行</td>
			<td>
                <ul>
                    <li>
<code>docker container exec -it [container] [command]</code>
                    </li>
                        <ul>
                            <li>
<code>-i</code> (<code>--interactive</code>) オプションで、アタッチされていなくても STDIN を開放。
                            </li>
                            <li>
<code>-t</code> (<code>--tty</code>) オプションで、擬似 TTY を割り当て。
                            </li>
                            <li>
<code>docker container exec -it [container] find -name elasticsearch</code>
                            </li>
                                <ul>
                                    <li>
特定のコンテナ内で「elasticsearch」という文字列を含んだファイルまたはディレクトリを検索。
                                    </li>
                                </ul>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container rm [option] [containers]</code></td>
			<td>1つまたは複数のコンテナの削除</td>
			<td>
                <ul>
                    <li>
<code>docker container rm -f [containers]</code>
                    </li>
                        <ul>
                            <li>
削除対象のコンテナが実行中であっても強制的に削除。
                            </li>
                        </ul>
                    <li>
<code>docker container rm `docker container ls -aq`</code>
                    </li>
                        <ul>
                            <li>
停止中のコンテナを含めた全コンテナの削除。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container inspect [option] [containers]</code></td>
			<td>コンテナあるいはイメージ／タスクの低レベルな情報の表示</td>
			<td>
                <ul>
                    <li>
<code>docker container inspect -f "{{.State.Status}}" [containers]</code>
                    </li>
                        <ul>
                            <li>
特定のコンテナのステータスを表示。
                            </li>
                        </ul>
                    <li>
<code>docker container inspect -f "{{range .Config.Env}}{{println .}}{{end}}" [containers]</code>
                    </li>
                        <ul>
                            <li>
コンテナ内で設定された環境変数を取得。
                            </li>
                        </ul>
                    <li>
<code>docker container inspect -f "{{.Name}} {{.HostConfig.RestartPolicy.Name}}" $(docker container ls -aq) | grep always</code>
                    </li>
                        <ul>
                            <li>
自動起動が有効化になっているコンテナの一覧取得。
                            </li>
                        </ul>
                    <li>
<code>docker container inspect -f "{{ .RestartCount }}" [containers]</code>
                    </li>
                        <ul>
                            <li>
コンテナの再起動数の取得。
                            </li>
                        </ul>
                    <li>
<code>docker container inspect -f "{{ .State.StartedAt }}" [containers]</code>
                    </li>
                        <ul>
                            <li>
コンテナが(再)起動した時刻の取得。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container start [containers]</code></td>
			<td>1つまたは複数の停止中のコンテナの起動</td>
			<td>
                <ul>
                    <li>
<code>docker container start `docker container ls -aq`</code>
                    </li>
                        <ul>
                            <li>
全コンテナの起動。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container stop [containers]</code></td>
			<td>1つまたは複数の実行中のコンテナの停止</td>
			<td>
                <ul>
                    <li>
<code>docker container stop `docker container ls -q`</code>
                    </li>
                        <ul>
                            <li>
実行中の全コンテナの停止。
                            </li>
                        </ul>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container restart [option] [containers]</code></td>
			<td>1 つまたは複数のコンテナを再起動</td>
			<td>
                <ul>
                    <li>
<code>-t</code> オプションでコンテナを kill する前に待機する秒数 (デフォルト値は <code>10</code> 秒) を指定可能。
                    </li>
                </ul>
            </td>
		</tr>
		<tr>
			<td><code>docker container logs [option] [container]</code></td>
			<td>実行時に存在するログの取得</td>
			<td>
                <ul>
                    <li>
オプションなしの場合、実行時から現在までのログを表示。
                    </li>
                    <li>
<code>docker container logs -f [container]</code>
                    </li>
                        <ul>
                            <li>
tail してログを表示
                            </li>
                        </ul>
                    <li>
例えば、設定ファイルが環境変数で正しく指定されておらずコンテナが起動できないような事象に際して、原因調査のために本コマンドが有効。
                    </li>
                </ul>
            </td>
		</tr>
	</tbody>
</table>

以上です。

※ こんなコマンドも便利だよ、といった意見がございましたらコメントいただけると嬉しいです。