はじめに

Dockerをインストールしたものの、コマンドが多すぎてどこから手を付ければいいかわからない。そんな悩みを抱えている方は多いのではないでしょうか。

本記事では、Dockerの基本コマンドを体系的に解説します。コンテナの作成から停止、削除まで、日常的に使用する主要なコマンドを実践例とともに紹介します。この記事を読み終えると、以下のことができるようになります。

  • コンテナとイメージの関係を正しく理解できる
  • docker runでコンテナを作成・起動できる
  • docker psでコンテナの状態を確認できる
  • docker logsdocker execでコンテナの調査・操作ができる
  • イメージの取得・一覧表示・削除ができる

前提として、Docker Desktop等でDockerが利用可能な環境を準備済みであることを想定しています。まだ環境構築がお済みでない場合は、Docker Desktop導入ガイドを参照してください。

Docker基本コマンドとは

Docker CLIは、コンテナやイメージを操作するためのコマンドラインツールです。大きく分けて、以下のカテゴリに分類できます。

カテゴリ 主なコマンド 用途
コンテナ操作 run, stop, start, rm コンテナのライフサイクル管理
コンテナ確認 ps, logs, exec, inspect コンテナの状態確認・調査
イメージ操作 pull, images, rmi, build イメージの取得・管理
システム system prune, info Docker環境の管理

本記事では、特に使用頻度の高いコンテナ操作とイメージ操作のコマンドに焦点を当てて解説します。

コンテナとイメージの関係

Dockerコマンドを理解するうえで、コンテナとイメージの関係を把握することは非常に重要です。

イメージとは

イメージは、コンテナを作成するための読み取り専用のテンプレートです。アプリケーションの実行に必要なすべてのファイル(OS、ライブラリ、アプリケーションコード、設定ファイルなど)がレイヤー構造で格納されています。

block-beta
    columns 1
    App["アプリケーション層"]
    Deps["依存ライブラリ層 (npm, pip等)"]
    Runtime["ランタイム/ミドルウェア層 (Node.js, Python等)"]
    BaseOS["ベースOS層 (Alpine, Ubuntu等)"]

コンテナとは

コンテナは、イメージから作成される実行可能なインスタンスです。イメージを「設計図」とするならば、コンテナは「設計図から作られた実際の建物」に相当します。

flowchart LR
    subgraph Image["イメージ"]
        nginx["イメージ\n(nginx)\n読取専用"]
    end
    subgraph Containers["コンテナ"]
        C1["コンテナ1 (実行中)"]
        C2["コンテナ2 (停止中)"]
        C3["コンテナ3 (実行中)"]
    end
    nginx -->|"docker run"| C1
    nginx -->|"docker run"| C2
    nginx -->|"docker run"| C3

コンテナのライフサイクル

コンテナには以下の状態があり、各コマンドで状態を遷移させます。

flowchart TD
    Image["イメージ"]
    Created["Created"]
    Running["Running"]
    Stopped["Stopped"]
    Deleted["Deleted"]
    
    Image -->|"docker create"| Created
    Created -->|"docker start"| Running
    Image -->|"docker run\n(create + start)"| Running
    Running -->|"docker stop"| Stopped
    Stopped -->|"docker start / docker restart"| Running
    Stopped -->|"docker rm"| Deleted

よく使うコンテナ操作コマンド

docker run - コンテナの作成と起動

docker runは、イメージからコンテナを作成し、起動するコマンドです。Dockerで最も頻繁に使用するコマンドの1つです。

基本構文

1
docker run [オプション] イメージ名[:タグ] [コマンド]

シンプルな実行例

1
2
# hello-worldコンテナを実行
docker run hello-world

よく使うオプション

オプション 説明 使用例
-d バックグラウンド実行(デタッチモード) docker run -d nginx
-it インタラクティブモード + 疑似TTY割り当て docker run -it ubuntu bash
--name コンテナに名前を付ける docker run --name myapp nginx
-p ポートマッピング(ホスト:コンテナ) docker run -p 8080:80 nginx
-v ボリュームマウント docker run -v /host/path:/container/path nginx
-e 環境変数を設定 docker run -e MYSQL_ROOT_PASSWORD=secret mysql
--rm 終了時にコンテナを自動削除 docker run --rm alpine echo "Hello"

実践例: Nginxをバックグラウンドで起動

1
2
3
4
# Nginxコンテナをポート8080で起動し、webserverという名前を付ける
docker run -d --name webserver -p 8080:80 nginx

# ブラウザで http://localhost:8080 にアクセスして確認

実践例: Ubuntuコンテナに入って操作

1
2
3
4
5
6
# Ubuntuコンテナをインタラクティブモードで起動
docker run -it ubuntu bash

# コンテナ内でコマンドを実行
root@abc123:/# cat /etc/os-release
root@abc123:/# exit

docker stop - コンテナの停止

実行中のコンテナを停止するコマンドです。コンテナ内のプロセスにSIGTERMシグナルを送信し、猶予時間(デフォルト10秒)後にSIGKILLで強制終了します。

基本構文

1
docker stop [オプション] コンテナ名またはID

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 名前を指定して停止
docker stop webserver

# コンテナIDを指定して停止(先頭数文字でも可)
docker stop abc123

# 複数のコンテナを一度に停止
docker stop container1 container2 container3

# 即座に停止(猶予時間を0秒に設定)
docker stop -t 0 webserver

docker start - コンテナの再起動

停止中のコンテナを再び起動するコマンドです。以前の状態(環境変数、ボリュームマウントなど)を保持したまま起動します。

基本構文

1
docker start [オプション] コンテナ名またはID

実行例

1
2
3
4
5
6
7
8
# コンテナを起動
docker start webserver

# 複数のコンテナを一度に起動
docker start container1 container2

# インタラクティブモードで起動(-aでアタッチ、-iでSTDIN維持)
docker start -ai myubuntu

docker restart - コンテナの再起動

実行中または停止中のコンテナを再起動するコマンドです。stopstartを連続して実行するのと同等の動作をします。

1
2
3
4
5
# コンテナを再起動
docker restart webserver

# 猶予時間を5秒に設定して再起動
docker restart -t 5 webserver

docker rm - コンテナの削除

停止中のコンテナを削除するコマンドです。削除したコンテナは復元できないため、注意が必要です。

基本構文

1
docker rm [オプション] コンテナ名またはID

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# コンテナを削除
docker rm webserver

# 実行中のコンテナを強制削除(-fオプション)
docker rm -f running-container

# 停止中のすべてのコンテナを削除
docker rm $(docker ps -aq -f status=exited)

# コンテナと関連するボリュームも削除
docker rm -v mycontainer

コンテナの状態確認・ログ取得・コマンド実行

docker ps - コンテナ一覧の表示

実行中のコンテナ一覧を表示するコマンドです。コンテナの状態確認で最も使用頻度の高いコマンドです。

基本構文

1
docker ps [オプション]

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 実行中のコンテナを表示
docker ps

# すべてのコンテナを表示(停止中も含む)
docker ps -a

# コンテナIDのみを表示
docker ps -q

# 最後に作成されたコンテナを表示
docker ps -l

# 特定の条件でフィルタリング
docker ps -f status=running
docker ps -f name=web

出力例と各項目の説明

1
2
3
$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
abc123def456   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp   webserver
項目 説明
CONTAINER ID コンテナの一意識別子(12文字の短縮形)
IMAGE コンテナの作成元イメージ
COMMAND コンテナ起動時に実行されるコマンド
CREATED コンテナが作成されてからの経過時間
STATUS コンテナの現在の状態
PORTS ポートマッピング情報
NAMES コンテナの名前

docker logs - コンテナログの取得

コンテナの標準出力・標準エラー出力を確認するコマンドです。アプリケーションのデバッグやトラブルシューティングに欠かせません。

基本構文

1
docker logs [オプション] コンテナ名またはID

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# ログを表示
docker logs webserver

# ログをリアルタイムで追跡(-fはfollowの略)
docker logs -f webserver

# タイムスタンプ付きで表示
docker logs -t webserver

# 最新100行のみ表示
docker logs --tail 100 webserver

# 過去1時間のログのみ表示
docker logs --since 1h webserver

# オプションの組み合わせ
docker logs -f -t --tail 50 webserver

docker exec - 実行中コンテナでコマンド実行

実行中のコンテナ内で新しいコマンドを実行するコマンドです。コンテナ内部の調査やデバッグに使用します。

基本構文

1
docker exec [オプション] コンテナ名 コマンド [引数]

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# コンテナ内でコマンドを実行
docker exec webserver cat /etc/nginx/nginx.conf

# インタラクティブシェルでコンテナに入る
docker exec -it webserver /bin/bash

# Alpine系の場合はshを使用
docker exec -it alpine-container /bin/sh

# 環境変数を設定してコマンド実行
docker exec -e DEBUG=true webserver printenv

# 作業ディレクトリを指定して実行
docker exec -w /var/log webserver ls -la

docker run -itdocker exec -itの違い

コマンド 動作 ユースケース
docker run -it 新しいコンテナを作成して起動 新規コンテナでの作業
docker exec -it 既存の実行中コンテナに接続 稼働中コンテナの調査・デバッグ

docker inspect - コンテナの詳細情報取得

コンテナやイメージの詳細な設定情報をJSON形式で取得するコマンドです。

1
2
3
4
5
6
7
8
# コンテナの全情報を表示
docker inspect webserver

# IPアドレスのみを取得
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' webserver

# マウント情報を取得
docker inspect -f '{{json .Mounts}}' webserver

イメージ管理コマンド

docker pull - イメージの取得

Docker Hub等のレジストリからイメージをダウンロードするコマンドです。

基本構文

1
docker pull [オプション] イメージ名[:タグ]

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 最新版(latestタグ)を取得
docker pull nginx

# 特定のバージョンを取得
docker pull nginx:1.25

# Alpine版を取得(軽量版)
docker pull nginx:alpine

# 公式イメージ以外の取得
docker pull mysql/mysql-server:8.0

タグについて

タグはイメージのバージョンを指定するための識別子です。タグを省略するとlatestが自動的に適用されます。

タグ例 説明
latest 最新版(デフォルト)
1.25 特定のバージョン
1.25.3 特定のパッチバージョン
alpine Alpine Linuxベース(軽量)
slim 必要最小限の構成

docker images - イメージ一覧の表示

ローカルに保存されているイメージの一覧を表示するコマンドです。

基本構文

1
docker images [オプション] [リポジトリ[:タグ]]

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# すべてのイメージを表示
docker images

# 特定のリポジトリのイメージのみ表示
docker images nginx

# イメージIDのみを表示
docker images -q

# すべてのイメージを表示(中間イメージ含む)
docker images -a

# danglingイメージ(タグなし)を表示
docker images -f dangling=true

出力例

1
2
3
4
5
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    a6bd71f48f68   2 weeks ago    188MB
nginx        alpine    1e415318f7d3   2 weeks ago    43MB
ubuntu       22.04     ca2b0f26964c   3 weeks ago    77.9MB

docker rmi - イメージの削除

ローカルのイメージを削除するコマンドです。

基本構文

1
docker rmi [オプション] イメージ名[:タグ]またはID

実行例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# イメージを削除
docker rmi nginx:alpine

# イメージIDで削除
docker rmi a6bd71f48f68

# 複数のイメージを削除
docker rmi nginx ubuntu mysql

# 強制削除(使用中のイメージも削除)
docker rmi -f nginx

# 未使用のイメージをすべて削除
docker image prune

# danglingイメージのみ削除
docker image prune -f

イメージが削除できない場合

イメージを使用しているコンテナが存在する場合、削除に失敗します。その場合は、先にコンテナを削除するか、-fオプションで強制削除してください。

1
2
3
4
5
6
7
8
9
$ docker rmi nginx
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container abc123 is using its referenced image

# 解決方法1: コンテナを先に削除
$ docker rm abc123
$ docker rmi nginx

# 解決方法2: 強制削除
$ docker rmi -f nginx

クリーンアップコマンド

開発を続けていると、不要なコンテナやイメージが蓄積します。以下のコマンドで定期的にクリーンアップすることをおすすめします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 停止中のコンテナをすべて削除
docker container prune

# 未使用のイメージをすべて削除
docker image prune

# 未使用のボリュームをすべて削除
docker volume prune

# 未使用のネットワークをすべて削除
docker network prune

# 上記すべてを一括で削除
docker system prune

# ボリュームも含めて一括削除(注意: データが消えます)
docker system prune -a --volumes

コマンド早見表

日常的に使用するDockerコマンドをまとめました。

コンテナ操作

コマンド 説明
docker run -d --name NAME IMAGE バックグラウンドでコンテナ起動
docker run -it IMAGE bash インタラクティブモードで起動
docker run -p 8080:80 IMAGE ポートマッピングして起動
docker stop NAME コンテナ停止
docker start NAME コンテナ起動
docker restart NAME コンテナ再起動
docker rm NAME コンテナ削除
docker rm -f NAME 実行中コンテナを強制削除

コンテナ確認・操作

コマンド 説明
docker ps 実行中コンテナ一覧
docker ps -a 全コンテナ一覧
docker logs NAME ログ表示
docker logs -f NAME ログをリアルタイム追跡
docker exec -it NAME bash コンテナ内でシェル起動
docker inspect NAME 詳細情報表示

イメージ操作

コマンド 説明
docker pull IMAGE:TAG イメージ取得
docker images イメージ一覧
docker rmi IMAGE イメージ削除
docker image prune 未使用イメージ削除

まとめ

本記事では、Dockerの基本コマンドについて解説しました。

  • コンテナとイメージの関係: イメージは読み取り専用のテンプレート、コンテナはイメージから作成される実行インスタンス
  • コンテナ操作: docker runで作成・起動、docker stopで停止、docker startで再起動、docker rmで削除
  • 状態確認: docker psでコンテナ一覧、docker logsでログ確認、docker execでコンテナ内操作
  • イメージ管理: docker pullで取得、docker imagesで一覧表示、docker rmiで削除

これらのコマンドを使いこなせるようになれば、Dockerの日常的な操作は問題なく行えるようになります。次のステップとして、ボリュームやネットワークの設定、Dockerfileによるイメージ作成に進むことをおすすめします。

参考リンク