宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「Dockerを使ってみたいけど、どこから手をつけたらいいかわからない」
「コンテナを起動したはいいけど、止め方や削除の方法がよくわからない」

Linuxサーバーを触り始めてしばらく経つと、必ずDockerに出会います。
開発環境の構築、アプリのデプロイ、CI/CDの整備——現場のあらゆる場面でDockerが使われるようになっています。

この記事では、Dockerコマンドの実践的な使い方を、RHEL 9.4 / Ubuntu 24.04 LTSでの動作確認済みの手順で解説します。
インストールから、イメージの取得・コンテナの起動・停止・削除・内部操作まで、現場でよく使う操作を一通りカバーします。

この記事のポイント

・docker run でコンテナを起動、docker stop/rm で停止・削除できる
・docker ps -a で起動中・停止中の全コンテナを一覧表示できる
・docker exec -it でコンテナ内部に入りコマンド実行が可能
・不要なイメージ・コンテナの一括削除には docker system prune を使う


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

Dockerとは何か——コンテナ技術の基本

Dockerは「コンテナ」と呼ばれる軽量な仮想化技術を使って、アプリケーションとその実行環境をパッケージ化するツールです。

仮想マシン(VM)との大きな違いは、ホストOSのカーネルを共有する点にあります。
VMはOSごと仮想化するため、起動に数十秒かかることも珍しくありませんが、Dockerコンテナは数秒以内に起動します。

現場では次のような使い方が一般的です。

・開発環境の統一(「自分のPCでは動くのに本番では動かない」問題を解消)
・複数バージョンのアプリを同一サーバー上で共存させる
・CI/CDパイプラインでのビルド・テスト環境の整備
・マイクロサービスアーキテクチャの実装

Dockerを構成する主要な概念は3つです。
用語 意味
イメージ コンテナの設計図。Dockerfileから作成される読み取り専用のテンプレート
コンテナ イメージを実体化したもの。実際に動作するプロセスの実行環境
レジストリ イメージの保存・配布場所。公式はDocker Hub(hub.docker.com)

Dockerのインストール手順

1. RHEL 9 / Rocky Linux 9 / AlmaLinux 9 の場合

RHELファミリーでは、Docker公式リポジトリを追加してインストールします。

# Dockerリポジトリを追加する sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo # Dockerエンジンのインストール sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Dockerサービスを起動して自動起動を有効にする sudo systemctl enable --now docker # バージョン確認 docker --version

実行結果の例は次の通りです。

Docker version 26.1.4, build 5650f9b

2. Ubuntu 24.04 LTS の場合

Ubuntu では apt を使ってインストールします。

# 必要なパッケージを事前インストール sudo apt-get update sudo apt-get install -y ca-certificates curl # Docker公式のGPGキーを追加 sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Dockerリポジトリを追加 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \ https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # インストール sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 自動起動の有効化 sudo systemctl enable --now docker # バージョン確認 docker --version

3. 一般ユーザーでdockerコマンドを実行できるようにする

デフォルトでは docker コマンドは root 権限が必要です。
一般ユーザーで実行したい場合は、dockerグループに追加します。

# 現在のユーザーをdockerグループに追加する sudo usermod -aG docker $USER # グループ変更を反映するため、一度ログアウトしてから再ログイン # または以下でセッションを再生成する newgrp docker # グループに追加されたか確認する groups $USER

注意:dockerグループへの追加は、実質的にroot権限と同等のアクセスを付与します。
信頼できるユーザーのみに実施してください。

Dockerイメージの操作

1. イメージを検索する(docker search)

Docker Hubで公式イメージを検索します。

# nginxのイメージを検索する docker search nginx

NAME DESCRIPTION STARS OFFICIAL nginx Official build of Nginx. 19834 [OK] unit Official build of NGINX Unit: Universal Web ... 59 [OK]

`[OK]` が表示されているものが公式イメージです。
信頼性の観点から、公式イメージを優先して使いましょう。

2. イメージを取得する(docker pull)

# nginxの最新版(latest)を取得する docker pull nginx # バージョンを指定して取得する docker pull nginx:1.26 # AlpineLinuxベースの軽量イメージを取得する docker pull nginx:alpine

3. ローカルのイメージ一覧を表示する(docker images)

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest a9c5fb0f6921 2 weeks ago 188MB nginx alpine e47a1b2f4bec 2 weeks ago 43.1MB nginx 1.26 5ef79149e0ec 4 weeks ago 188MB

4. イメージを削除する(docker rmi)

# IMAGE IDまたは「リポジトリ:タグ」で削除する docker rmi nginx:1.26 # IMAGE IDの先頭4文字程度で省略しても指定できる docker rmi 5ef7

使用中のコンテナが存在するイメージは削除できません。
先にコンテナを停止・削除してからイメージを削除してください。

コンテナの起動・停止・削除

1. コンテナを起動する(docker run)

`docker run` はイメージがローカルになければ自動で取得してから起動します。

# 基本的な起動(フォアグラウンド) docker run nginx # バックグラウンドで起動する(-d: detach) docker run -d nginx # コンテナに名前を付けて起動する(--name) docker run -d --name my-nginx nginx # ポートをマッピングして起動する(-p ホスト側ポート:コンテナ側ポート) docker run -d -p 8080:80 --name my-nginx nginx # 環境変数を指定して起動する(-e) docker run -d -e MYSQL_ROOT_PASSWORD=secret --name my-mysql mysql:8 # コンテナ停止時に自動削除する(--rm) docker run --rm nginx echo "hello"

よく使う `docker run` オプションは次の通りです。

-d:バックグラウンドで実行(デタッチモード)
-p ホスト:コンテナ:ポートの転送
--name:コンテナ名の指定
-e KEY=VAL:環境変数の設定
-v ホストパス:コンテナパス:ボリュームのマウント
--rm:終了時にコンテナを自動削除
-it:インタラクティブモード(シェル操作時に使用)

2. 起動中のコンテナを確認する(docker ps)

# 起動中のコンテナのみ表示する docker ps # 停止中のコンテナも含めて表示する docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3f9a2c12e01 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp my-nginx

`STATUS` 列が `Up` なら起動中、`Exited` なら停止中です。

3. コンテナを停止する(docker stop)

# コンテナ名またはCONTAINER IDで停止する docker stop my-nginx # 複数のコンテナを一度に停止する docker stop my-nginx my-mysql # 全ての起動中コンテナを停止する docker stop $(docker ps -q)

`docker stop` はコンテナにSIGTERMを送信し、10秒後にSIGKILLを送ります。
即座に強制終了したい場合は `docker kill` を使います。

4. コンテナを削除する(docker rm)

# 停止済みコンテナを削除する docker rm my-nginx # 起動中のコンテナを強制削除する(-f) docker rm -f my-nginx # 全ての停止済みコンテナを削除する docker rm $(docker ps -a -q)

コンテナ内部での操作

1. 起動中のコンテナ内でコマンドを実行する(docker exec)

コンテナが起動している状態で、コンテナ内部のコマンドを実行できます。

# コンテナ内でインタラクティブシェルを起動する(-it) docker exec -it my-nginx bash # コンテナ内で1コマンドだけ実行する docker exec my-nginx cat /etc/nginx/nginx.conf # 環境変数を確認する docker exec my-nginx env

コンテナ内のシェルに入ったら、通常のLinuxコマンドが使えます。
終了するときは `exit` と打つか、`Ctrl+d` を押します。
コンテナ自体は終了せず、バックグラウンドで動き続けます。

2. コンテナのログを確認する(docker logs)

# コンテナのログを表示する docker logs my-nginx # リアルタイムでログを追従する(-f) docker logs -f my-nginx # 直近50行のみ表示する(--tail) docker logs --tail 50 my-nginx # タイムスタンプを表示する(-t) docker logs -t my-nginx

3. コンテナの詳細情報を確認する(docker inspect)

ネットワーク設定、ボリューム、環境変数など、コンテナの全情報をJSON形式で取得します。

# コンテナの全情報を表示する docker inspect my-nginx # IPアドレスだけ抽出する(--format) docker inspect --format='{{.NetworkSettings.IPAddress}}' my-nginx # マウントしているボリューム情報を確認する docker inspect --format='{{json .Mounts}}' my-nginx

ボリュームとネットワークの基本

1. ボリューム——データを永続化する

コンテナはデフォルトでは停止・削除するとデータが消えます。
データを残したい場合は、ホスト側ディレクトリをマウントするか、名前付きボリュームを使います。

# ホストのディレクトリをコンテナにマウントする(バインドマウント) # ホスト側 /srv/html → コンテナ側 /usr/share/nginx/html docker run -d -p 8080:80 -v /srv/html:/usr/share/nginx/html --name my-nginx nginx # 名前付きボリュームを作成してマウントする docker volume create my-data docker run -d -v my-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret --name my-mysql mysql:8 # ボリュームの一覧を確認する docker volume ls # ボリュームの詳細を確認する docker volume inspect my-data

mount コマンドの使い方を知っている方であれば、ボリュームのマウントは直感的に理解できるでしょう。

2. ネットワーク——コンテナ間の通信

# ネットワーク一覧を確認する docker network ls # カスタムネットワークを作成する docker network create my-net # 作成したネットワークにコンテナを接続して起動する docker run -d --name app1 --network my-net nginx docker run -d --name app2 --network my-net nginx # 同じネットワーク内のコンテナ同士はコンテナ名で通信できる docker exec app1 curl http://app2

Linux ポート確認の全コマンドも併せて確認しておくと、コンテナのネットワークトラブルシュートに役立ちます。

不要なリソースの一括削除(docker system prune)

Dockerを使い続けると、停止済みコンテナ・未使用イメージ・不要なネットワークが蓄積されてディスクを圧迫します。

# 停止済みコンテナ・未使用ネットワーク・ダングリングイメージを一括削除する docker system prune # ボリュームも含めて削除する(--volumes) docker system prune --volumes # 確認プロンプトを省略する(-f) docker system prune -f # 使用状況の確認(削除前の確認に有用) docker system df

`docker system df` の実行例です。

TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 5 2 1.045GB 632.8MB (60%) Containers 3 1 0B 0B Local Volumes 2 1 543.2MB 0B (0%) Build Cache 12 0 234.6MB 234.6MB

`RECLAIMABLE` 列が解放できる容量です。定期的に実行してディスクを整理しましょう。

トラブルシュート——よくあるエラーと対処法

1. 「Cannot connect to the Docker daemon」が出る場合

Dockerデーモンが起動していないか、権限がない場合に発生します。

# エラー例 docker ps # docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? # Dockerサービスの状態を確認する sudo systemctl status docker # 起動していない場合は起動する sudo systemctl start docker # 一般ユーザーで実行している場合はグループを確認する groups $USER # dockerグループが含まれていなければ追加して再ログインする sudo usermod -aG docker $USER

systemd-analyze で起動時間計測も参考に、サービスの起動状態を確認してください。

2. 「Port is already in use」が出る場合

指定したホスト側ポートがすでに使用中の場合に発生します。

# エラー例 docker run -d -p 80:80 nginx # docker: Error response from daemon: driver failed programming external connectivity... # Bind for 0.0.0.0:80 failed: port is already allocated. # 使用中のポートを確認する sudo ss -tlnp | grep :80 # 別のポートにマッピングして起動する docker run -d -p 8080:80 nginx

3. コンテナがすぐに終了してしまう場合

コンテナ内でフォアグラウンドのプロセスが起動していないと、コンテナは即座に終了します。

# まずログを確認してエラーを特定する docker logs my-container # 終了コードを確認する docker inspect --format='{{.State.ExitCode}}' my-container # 0=正常終了、1=エラー、137=OOMKill(メモリ不足) # デバッグのため対話シェルで起動する docker run -it --entrypoint bash my-image

4. 「No space left on device」が出る場合

イメージやコンテナが蓄積してディスクが満杯になっている状態です。

# ディスク使用状況を確認する docker system df df -h /var/lib/docker # 不要なリソースを一括削除する docker system prune -f # ボリュームも含めて削除する(データが消えることに注意) docker system prune --volumes -f

Dockerコマンド早見表

やりたいこと コマンド
イメージを取得する docker pull nginx
イメージ一覧を表示する docker images
イメージを削除する docker rmi nginx:latest
コンテナをバックグラウンドで起動する docker run -d --name my-nginx nginx
ポートマッピングして起動する docker run -d -p 8080:80 nginx
起動中のコンテナを一覧表示する docker ps
全コンテナを表示する(停止中含む) docker ps -a
コンテナを停止する docker stop my-nginx
コンテナを削除する docker rm my-nginx
コンテナ内でシェルを起動する docker exec -it my-nginx bash
コンテナのログを確認する docker logs my-nginx
コンテナの詳細情報を確認する docker inspect my-nginx
ディスク使用状況を確認する docker system df
不要なリソースを一括削除する docker system prune -f
ボリューム一覧を表示する docker volume ls
ネットワーク一覧を表示する docker network ls

本記事のまとめ

Dockerコマンドの基本を整理しておきます。

イメージ操作: `docker pull` で取得、`docker images` で一覧、`docker rmi` で削除
コンテナ操作: `docker run -d` でバックグラウンド起動、`docker stop` で停止、`docker rm` で削除
状態確認: `docker ps -a` で全コンテナ表示、`docker logs` でログ確認
内部操作: `docker exec -it` でコンテナ内シェルに入る
リソース管理: `docker system prune` で不要なリソースを一括削除

Dockerは最初はとっつきにくく感じるかもしれませんが、基本コマンド10個を覚えるだけで日常的な操作はほぼカバーできます。
まずは `docker run -d -p 8080:80 nginx` でNginxを動かして、ブラウザで `http://localhost:8080` にアクセスしてみてください。
そこから少しずつ使い方を広げていくのが、Dockerを身につける最短ルートです。

Linux 基本コマンドの解説もあわせて確認しておくと、コンテナ内部での操作がよりスムーズになります。

Dockerを含めたサーバー運用の基礎を、体系的に身につけませんか?

コンテナ技術はサーバー運用の一部ですが、ファイルシステム・ネットワーク・セキュリティ設定と組み合わせることで、現場で頼られる存在になれます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。