コンテナを起動する - docker run
イメージから新しいコンテナを起動するコマンド。`-d` でバックグラウンド化、`-p` でポート公開、`-v` でボリュームマウント、`--name` で名前付けなど、日常的に使うオプションを押さえておく。
概念図
構文
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]実例
nginx をバックグラウンドで起動し 8080 へマップ
docker run -d --name web -p 8080:80 nginx使い捨てコンテナで bash を起動。終了時に自動削除
docker run --rm -it ubuntu:24.04 bash環境変数と名前付きボリュームで Postgres を起動
docker run -d -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data postgres:16よく使うオプション
docker run には大量のオプションがあるが、実務で多用するのは以下に限られる。
-d(detached): バックグラウンド起動-p HOST:CONTAINER: ポート公開-v NAME:/path/-v /host:/container: ボリューム / bind mount-e KEY=value: 環境変数--name: コンテナ名--rm: 終了時に自動削除--network: 接続するネットワーク--restart: 再起動ポリシー
-it は -i(stdin 接続)と -t(擬似 TTY 割り当て)の組み合わせで、対話的にシェルを使うときに指定する。
スクリプトや CI で自動実行する場合は -t を外すこと。
付けたままだと出力が TTY 向けに整形され、ログ収集で扱いづらくなる。
バックグラウンド起動と停止
-d を付けると Docker はコンテナ ID を返して即座にプロンプトに戻る。
コンテナは裏で動き続け、docker ps で確認できる。
基本操作は以下のとおり。
- 停止:
docker stop <name> - 再開:
docker start <name> - 削除:
docker rm <name>
--rm を付けて起動したコンテナは docker stop すると自動で削除されるため、使い捨て用途に便利。
docker stop は SIGTERM を送ってから猶予時間(デフォルト 10 秒)待ち、応答がなければ SIGKILL を送る。
アプリ側で SIGTERM をハンドリングしていないと、プロセスがいきなり強制終了されるので、Node.js や Python で起動するときは process.on('SIGTERM') 等のフックを入れておく。
docker run -d --name api -p 3000:3000 my-api:latest
docker stop api
docker start api
docker rm apiポート公開とボリューム
-p 8080:80 はホストの 8080 番ポートをコンテナの 80 番に転送する。
-p 127.0.0.1:8080:80 のようにバインドアドレスを指定すると外部から接続できなくなる。
-P(大文字)は Dockerfile の EXPOSE で宣言されたポートをランダムなホストポートに公開する。
ボリュームは 3 形態ある: 名前付きボリューム(-v pgdata:/var/lib/postgresql/data)、bind mount(-v /home/user/app:/app)、tmpfs(--tmpfs /tmp)。
名前付きボリュームは Docker が管理する領域で永続化に向き、bind mount は開発時のソース同期で使う。
本番で bind mount を使うとホスト側のパスに強く依存するので避ける。
docker run -d -p 127.0.0.1:5432:5432 \
-v pgdata:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secret \
--name db postgres:16関連トピック
docker build- Dockerfile からイメージをビルドするコマンド。ビルドコンテキスト、`-f` の Dockerfile 指定、`-t` のタグ付け、BuildKit のキャッシュ最適化、`--target` によるマルチステージ制御を押さえる。 docker ps / docker logs- 実行中コンテナの一覧表示とログ確認のコマンド。`docker ps -a` で停止済みも含めて表示、`docker logs -f` で追跡、`--since` / `--tail` で範囲を絞る。 docker exec- 実行中のコンテナに追加プロセスを起動するコマンド。多くは `-it` でシェルに入り、ログやファイルシステム、プロセス状態を調査するために使う。 docker network- コンテナのネットワーク管理。bridge / host / none / user-defined の 4 種類を理解し、user-defined bridge でコンテナ名による名前解決を使うのが基本。 docker volume / bind mount- データ永続化の基本。Docker が管理する volume と、ホスト側の任意パスを使う bind mount の違い、`:ro` / `:z` / `:Z` オプション、パーミッション問題の対処を整理する。 