Dock Stay
コンテナを起動する - docker run の使い方・オプション・サンプル

コンテナを起動する - docker run

イメージから新しいコンテナを起動するコマンド。`-d` でバックグラウンド化、`-p` でポート公開、`-v` でボリュームマウント、`--name` で名前付けなど、日常的に使うオプションを押さえておく。

概念図

docker run diagram

構文

bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

実例

nginx をバックグラウンドで起動し 8080 へマップ

bash
docker run -d --name web -p 8080:80 nginx

使い捨てコンテナで bash を起動。終了時に自動削除

bash
docker run --rm -it ubuntu:24.04 bash

環境変数と名前付きボリュームで Postgres を起動

bash
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') 等のフックを入れておく。

bash
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 を使うとホスト側のパスに強く依存するので避ける。

bash
docker run -d -p 127.0.0.1:5432:5432 \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  --name db postgres:16

関連トピック