Dockerの日常的な操作は、「起動する(run・compose up)」「状態を見る(ps・logs)」「中に入る(exec)」「止めて消す(stop・rm・compose down)」「後片付けする(prune)」の5つを覚えれば、ほとんどカバーできます。

この記事では、よく使うコマンドを用途別の早見表にまとめたうえで、docker run のオプションの意味、そしてDockerを使い始めた人がつまずきやすい「localhostにつながらない」「コンテナがすぐ終了する」「変更が反映されない」「容量が減らない」といったトラブルの切り分け方までを解説します。

まず押さえる3つの用語

用語 意味 たとえ
イメージ アプリと実行環境をまとめた、読み取り専用のひな形 設計図・料理のレシピ
コンテナ イメージから起動した、実行中(または停止中)の環境 設計図から建てた家・作った料理
ボリューム コンテナを消しても残る、データの保存場所 家の外にある倉庫

コンテナを削除すると、コンテナの中で作ったファイルは消えます。データベースのデータのように残したいものは、ボリュームに保存します。

コンテナの操作

やりたいこと コマンド
コンテナを起動する docker run -d -p 8080:80 --name web nginx
起動中のコンテナを一覧表示 docker ps
停止中も含めて一覧表示 docker ps -a
ログを見る docker logs web
ログを追いかけて表示する docker logs -f web
コンテナの中に入る docker exec -it web bash(bashがなければ sh)
コンテナの中でコマンドを1回だけ実行 docker exec web ls /usr/share/nginx/html
停止する docker stop web
開始する(停止中のもの) docker start web
再起動する docker restart web
削除する docker rm web(起動中は docker rm -f web)
ファイルをコピーする docker cp web:/etc/nginx/nginx.conf ./
CPU・メモリの使用量を見る docker stats
詳細な設定を見る docker inspect web

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Dockerコマンド早見表|よく使う操作とつながらない時の対処」

docker run のよく使うオプション

docker run -d --rm --name api \
  -p 3000:3000 \
  -e NODE_ENV=development \
  --env-file .env \
  -v "$(pwd)":/app \
  -w /app \
  node:22 npm run dev
オプション 意味
-d バックグラウンドで起動する
-it 対話的に操作する(コンテナのシェルを使うとき)
--rm 停止したら自動で削除する(使い捨てのコンテナに)
--name コンテナに名前を付ける(付けないとランダムな名前になる)
-p ホスト:コンテナ ポートをつなぐ。-p 8080:80 はパソコンの8080番をコンテナの80番へ
-e 名前=値 環境変数を渡す
--env-file ファイルから環境変数をまとめて渡す
-v ホスト:コンテナ フォルダやボリュームをコンテナにつなぐ
-w コンテナ内の作業ディレクトリ
--platform CPUの種類を指定する(例:linux/amd64)

-p は「パソコン側:コンテナ側」の順です。逆に書いてつながらない、というのはよくある間違いです。

イメージの操作

やりたいこと コマンド
イメージを一覧表示 docker images
イメージを取得する docker pull postgres:16
Dockerfileからイメージを作る docker build -t my-app:1.0 .
キャッシュを使わずに作り直す docker build --no-cache -t my-app:1.0 .
イメージを削除する docker rmi my-app:1.0
レジストリに送る docker push my-registry/my-app:1.0

イメージのタグ(:16 や :1.0)を省略すると latest になります。latest は「最新版」という意味ではなく、単なる名前で、いつ取得したかによって中身が変わります。チームや本番環境では、バージョンを明示するのが安全です。

Docker Composeの操作

複数のコンテナ(アプリ・データベース・キャッシュなど)をまとめて扱うのがDocker Composeです。現在は docker compose(ハイフンなし)が標準で、古い docker-compose コマンドはサポートが終了しています。

やりたいこと コマンド
まとめて起動する docker compose up -d
イメージを作り直して起動する docker compose up -d --build
状態を確認する docker compose ps
ログを見る(全サービス) docker compose logs -f
特定のサービスのログを見る docker compose logs -f app
サービスの中に入る docker compose exec app bash
使い捨てのコンテナでコマンドを実行 docker compose run --rm app npm test
特定のサービスだけ再起動 docker compose restart app
停止して削除する docker compose down
ボリュームも含めて削除する docker compose down -v
設定ファイルの最終形を確認する docker compose config

docker compose down -v は、データベースのデータが入ったボリュームも削除します。開発用のデータを初期化したいとき以外は、-v を付けないよう注意してください。

ボリューム・ネットワークの操作

やりたいこと コマンド
ボリュームを一覧表示 docker volume ls
ボリュームの詳細を見る docker volume inspect ボリューム名
ボリュームを削除する docker volume rm ボリューム名
ネットワークを一覧表示 docker network ls
ネットワークの詳細を見る docker network inspect ネットワーク名

後片付け:容量を空ける

Dockerを使い続けると、停止したコンテナ、使われなくなったイメージ、ビルドのキャッシュがたまり、数十GBの容量を使うこともあります。

やりたいこと コマンド
Dockerの使用容量を確認 docker system df
停止中のコンテナを削除 docker container prune
タグのない不要なイメージを削除 docker image prune
使われていないイメージをすべて削除 docker image prune -a
ビルドのキャッシュを削除 docker builder prune
まとめて削除(ボリュームは除く) docker system prune
使われていないボリュームを削除 docker volume prune

ボリュームの削除は、データの削除です。docker volume prune や docker system prune --volumes は、中身を確認してから実行します。

Docker Desktopを使っている場合、コマンドで削除しても、パソコン側の仮想ディスクのファイルサイズがすぐには小さくならないことがあります。Docker Desktopの設定画面で、ディスクの使用状況を確認してください。

つながらない・動かないときの切り分け

localhostにつながらない

ブラウザで http://localhost:8080 を開いても表示されない場合は、次の順に確認します。

▶ 1. コンテナは起動しているか

docker ps -a

STATUSが Exited なら、コンテナは停止しています。次の「すぐ終了する」を確認します。

▶ 2. ポートはつながっているか

docker ps の PORTS 列に 0.0.0.0:8080->80/tcp のように表示されているかを確認します。何も表示されない場合は、-p(composeなら ports:)の指定がありません。

▶ 3. アプリが「0.0.0.0」で待ち受けているか

最も見落としやすいポイントです。コンテナの中のアプリが 127.0.0.1(localhost)で待ち受けていると、コンテナの外からは接続できません。

ツール コンテナ内で外部からの接続を受ける設定
Vite vite --host または server.host: true
Next.js next dev -H 0.0.0.0
Flask flask run --host=0.0.0.0
Django python manage.py runserver 0.0.0.0:8000
Rails rails server -b 0.0.0.0

コンテナの中の「localhost」は、コンテナ自身を指します。パソコンのlocalhostとは別物です。

コンテナから、別のコンテナにつながらない

Docker Composeで、アプリのコンテナからデータベースに接続するとき、接続先を localhost にすると失敗します。接続先には、サービス名を使います。

services:
  app:
    environment:
      DATABASE_URL: postgres://user:pass@db:5432/app   # localhost ではなく db
  db:
    image: postgres:16

また、depends_on は起動する順番を決めるだけで、データベースが接続を受け付けられる状態になるまで待つわけではありません。healthcheck と condition: service_healthy を組み合わせるか、アプリ側で接続をリトライします。

コンテナから、パソコンで動いているサービスにつなぎたい

コンテナの中から、パソコン(ホスト)で動いているサービスに接続するには、host.docker.internal というホスト名を使います。Docker Desktop(Mac・Windows)では標準で使え、Linuxでは起動時に --add-host=host.docker.internal:host-gateway を指定します。

コンテナがすぐ終了する

docker ps -a            # STATUS が Exited (1) などになっている
docker logs コンテナ名   # 終了する前のエラーを確認する

コンテナは、メインのプロセスが終了すると停止します。よくある原因は次のとおりです。

  • アプリがエラーで終了している(ログに原因が出ている)
  • 必要な環境変数が渡っていない
  • 実行するコマンドが、すぐに終わるもの(処理が終わると、コンテナも終わる)

中身を調べたい場合は、コマンドを上書きしてシェルで起動します。

docker run -it --rm --entrypoint sh my-app:1.0

コードを変更したのに反映されない

状況 原因 対処
Dockerfileでコードをコピーしている イメージを作った時点のコードが使われている docker compose up -d --build で作り直す
Dockerfileを変えたのに反映されない ビルドのキャッシュが使われている docker build --no-cache
ボリュームでフォルダをつないでいるのに反映されない 開発サーバーがファイルの変更を検知できていない ツールの監視設定(ポーリング)を有効にする

permission denied(docker.sock)

Linuxで、sudo なしで docker コマンドを実行すると、次のエラーが出ることがあります。

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

ユーザーを docker グループに追加すると、sudoなしで使えるようになります(追加後、ログインし直す)。

sudo usermod -aG docker $USER

ただし、dockerグループのユーザーは、実質的に管理者(root)と同等の権限を持つことになります。共有サーバーでは、誰を追加するかを慎重に判断します。

Apple Silicon(M1以降のMac)で動かない

ARM用のイメージが用意されていないソフトウェアを使うと、起動時に警告やエラーが出ることがあります。--platform linux/amd64(composeでは platform: linux/amd64)を指定すると、エミュレーションで動かせます(動作は遅くなります)。

ポートがすでに使われている

Bind for 0.0.0.0:5432 failed: port is already allocated

同じポートを、別のコンテナやパソコン上のプログラムが使っています。docker ps で確認するか、パソコン側のポート番号を変えます(例:-p 5433:5432)。

よくある質問

Q. docker run と docker start の違いは何ですか? A. docker run はイメージから新しいコンテナを作って起動します。docker start は、停止中の既存のコンテナを再開します。runを繰り返すと、そのたびにコンテナが増えていきます。

Q. docker exec と docker compose run の違いは何ですか? A. exec は起動中のコンテナの中でコマンドを実行します。compose run は、サービスの設定で新しいコンテナを作ってコマンドを実行します。テストやマイグレーションのような1回限りの処理には run --rm が便利です。

Q. .dockerignore は必要ですか? A. 用意しておくのがおすすめです。node_modules や .git、.env などをイメージに含めないようにすることで、ビルドが速くなり、秘密情報の混入も防げます。

Q. コンテナの中で作ったデータを残すにはどうすればいいですか? A. ボリュームに保存します。docker-compose.yml で volumes: を設定しておけば、コンテナを削除・作り直ししても、データは残ります。

まとめ

  • 基本は run・ps・logs・exec・stop・rm、複数のコンテナは docker compose up・down・logs・exec
  • -p は 「パソコン側:コンテナ側」。--rm で使い捨て、--name で名前を付ける
  • 容量は docker system df で確認し、prune で片付ける。ボリュームの削除はデータの削除
  • localhostにつながらないときは、起動状態 → ポートの指定 → アプリが0.0.0.0で待ち受けているか
  • コンテナ同士はサービス名で接続。パソコンへは host.docker.internal
  • すぐ終了したら docker logs、変更が反映されなければ --build

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Dockerコマンド早見表|よく使う操作とつながらない時の対処」

株式会社RJCでは、AI駆動開発や個人開発の場面でも、開発環境を自分で整えられる力を大切にしています。こうした知識を仲間と共有しながら、一緒に成長を楽しんでいます。

株式会社RJC ― SI事業・SES事業・AI駆動開発。未経験からエンジニアに育てるのが得意な会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?