Dockerを使っていると、停止したコンテナを再起動したり、特定のコンテナだけ操作したいときがあります。
その際に便利なのが、「コンテナID」を使った明確な指定です。
この記事では、DockerでコンテナIDを使ってコンテナを起動する方法と、名前との違い・確認方法・関連操作(停止・削除)まで初心者にもわかりやすく解説します。
コンテナIDとは?名前との違い
Dockerではコンテナを作成すると、それぞれに「一意のID(識別子)」が自動で割り当てられます。
このIDはDocker内部で管理用に使われる英数字の文字列です。
コンテナIDと名前の比較
識別方法 | 特徴 | 例 | 使用場面 |
---|---|---|---|
コンテナID | 自動生成される64文字の英数字(通常は短縮表示) | 3a4b2c5d6f78 | スクリプト処理、一意性が必要な場合 |
コンテナ名 | 自動生成または--name オプションで指定 | my-nginx または naughty_einstein (自動生成例) | 人間が識別しやすい場面、日常の管理 |
どちらの方法でもDockerコンテナを操作できますが、IDを使うメリットは:
- 一意性が保証されている(名前は重複可能性がある)
- スクリプトなど自動処理に適している
- コンテナの状態に関わらず不変(名前は変更可能)
コンテナIDの確認方法(docker ps -a)
コンテナを操作する前に、まずはIDを確認する必要があります。
実行中のコンテナのIDを確認
docker ps
すべてのコンテナ(停止中も含む)のIDを確認
docker ps -a
出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a4b2c5d6f78 nginx "nginx -g 'daemon …" 10 minutes ago Exited (0) 5 minutes ago 80/tcp my-nginx
7e8f9d1c2b3a mysql:8.0 "docker-entrypoint.s…" 3 hours ago Up 3 hours 3306/tcp, 33060/tcp my-database
この出力から以下の情報が読み取れます:
3a4b2c5d6f78
は停止中のnginxコンテナのID7e8f9d1c2b3a
は実行中のMySQLコンテナのID
IDのみを抽出(スクリプト用)
docker ps -a -q
この -q
(quiet)オプションを使うと、IDだけを抽出できます:
3a4b2c5d6f78
7e8f9d1c2b3a
特定の条件のコンテナIDだけを確認
docker ps -a -q --filter "status=exited"
停止中(Exited)のコンテナIDだけを表示します:
3a4b2c5d6f78
コンテナIDで起動する基本コマンド
停止中のコンテナをIDを指定して起動するには、docker start
コマンドを使います。
基本構文
docker start コンテナID
実行例
docker start 3a4b2c5d6f78
正常に起動すると、コンテナIDが出力されます:
3a4b2c5d6f78
起動確認
コンテナが起動したかどうかを確認するには:
docker ps
出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a4b2c5d6f78 nginx "nginx -g 'daemon …" 15 minutes ago Up 10 seconds 80/tcp my-nginx
7e8f9d1c2b3a mysql:8.0 "docker-entrypoint.s…" 3 hours ago Up 3 hours 3306/tcp, 33060/tcp my-database
STATUS
列が「Up」になっていれば、正常に起動しています。
起動時のオプション
docker start -a 3a4b2c5d6f78
-a
(attach)オプションを付けると、コンテナの標準出力が表示されます。
これは、ログを確認しながら起動したい場合に便利です。
再起動・停止・削除もIDで操作可能
コンテナIDを使えば、起動以外の操作も簡単に行えます。
停止
docker stop 3a4b2c5d6f78
このコマンドでコンテナを安全に停止できます(SIGTERM信号を送信し、一定時間後にSIGKILLで強制終了)。
再起動
docker restart 3a4b2c5d6f78
これはstop
とstart
を連続して実行するのと同等で、コンテナを再起動します。
一時停止と再開
# 一時停止
docker pause 3a4b2c5d6f78
# 再開
docker unpause 3a4b2c5d6f78
一時停止は、コンテナのプロセスを完全に停止せず、一時的に凍結します。
削除
docker rm 3a4b2c5d6f78
注意: 実行中のコンテナは削除できません。先に停止するか、強制削除オプション(-f
)を使う必要があります:
docker rm -f 3a4b2c5d6f78
注意点とヒント(短縮ID・一括処理)
短縮IDの使用
Dockerでは、コンテナIDの最初の数文字だけで操作可能です(一意に特定できる限り)。
docker start 3a4b
これは、3a4b
で始まるIDを持つコンテナを起動します。
ただし、複数のコンテナが同じプレフィックス(先頭文字列)を持つ場合は、より長いIDを指定する必要があります。
一括処理の例
停止中のコンテナをすべて起動
docker start $(docker ps -a -q --filter "status=exited")
このコマンドは、すべての停止中のコンテナIDを取得して、それらを一括で起動します。
特定のイメージから作成されたコンテナのみを操作
docker start $(docker ps -a -q --filter "ancestor=nginx")
nginxイメージから作成されたすべてのコンテナを起動します。
スクリプト例:条件付き起動
#!/bin/bash
# MySQLコンテナが停止していたら起動
MYSQL_CONTAINER=$(docker ps -a -q --filter "name=mysql" --filter "status=exited")
if [ ! -z "$MYSQL_CONTAINER" ]; then
echo "Starting MySQL container..."
docker start $MYSQL_CONTAINER
echo "Waiting for MySQL to initialize..."
sleep 10
fi
# 次にWebアプリコンテナを起動
WEBAPP_CONTAINER=$(docker ps -a -q --filter "name=webapp" --filter "status=exited")
if [ ! -z "$WEBAPP_CONTAINER" ]; then
echo "Starting Web application container..."
docker start $WEBAPP_CONTAINER
fi
まとめ
Dockerでは、コンテナIDを使うことでより正確かつ柔軟な操作が可能になります。
ポイント:
- コンテナIDは
docker ps -a
で確認できる docker start <ID>
でID指定起動が可能docker stop
、docker restart
、docker rm
などもIDで操作可能-q
オプションや--filter
を組み合わせてスクリプト処理に活用できる- IDは短縮形で指定可能(一意性が保たれる範囲で)
コンテナの管理や自動化を進める上で、コンテナIDベースの操作は非常に重要です。
特にシェルスクリプトやCI/CDパイプラインなどの自動処理では、名前よりもIDを使った方が確実です。
コメント