UbuntuでDockerをインストールする方法|初心者でも迷わない完全ガイド【2025年版】

目次

1. はじめに

Ubuntuで開発環境を整えるとき、「とりあえず Docker を入れておこう」という場面はかなり増えてきました。Webアプリ、バッチ処理、検証用データベース、検証用のミドルウェア……これらを毎回手作業でインストールしていると、環境構築だけで時間と労力が消えてしまいます。

そこで役立つのがコンテナ仮想化技術である Docker です。Docker を使えば、アプリケーション本体だけでなく、その動作に必要なライブラリや設定一式を「イメージ」としてまとめて管理できます。Ubuntu 上に Docker を入れておけば、

  • 新しい開発環境を数分で立ち上げる
  • チームメンバー全員が「同じ環境」で動作を再現できる
  • 本番環境に近い構成をローカルでも再現しやすい

といったメリットを簡単に享受できます。

一方で、初めて Docker を触る人にとっては、

  • どのインストール手順が「正解」なのか分からない
  • Ubuntu 標準リポジトリと Docker 公式リポジトリの違いが分からない
  • sudo を付けたり付けなかったりで権限エラーに悩まされる

といった、つまずきポイントも多く存在します。
とくに「ubuntu install docker」と調べると、コマンドがずらっと並んだ記事は多いものの、なぜその手順なのかどこまでやれば一通り完了なのか が分かりにくいケースも少なくありません。

1-1. 本記事のゴール

本記事では、Ubuntu 環境に Docker をインストールしたい方を対象に、次のポイントを押さえながら解説していきます。

  • Ubuntu に Docker を導入するための、現時点で一般的な手順
  • 公式リポジトリを利用した、より管理しやすいインストール方法
  • sudo なしで docker コマンドを実行するための設定
  • インストール後の動作確認と、最低限知っておきたい基本コマンド
  • Docker Compose など、実務でよく使う周辺ツールへの入り口

単にコマンドを羅列するのではなく、「なぜそうするのか」 も含めて説明することで、あとから自分で環境をメンテナンスしやすい状態を目指します。

1-2. 対象読者と前提知識

この記事は、次のような方を想定しています。

  • Ubuntu の基本的な操作(ターミナルの起動、apt コマンドなど)が分かる
  • これから Docker を初めて触ってみたい開発者・エンジニア志望の方
  • 既存の検証環境をコンテナベースへ移行したいと考えている方

高度な Linux 管理の知識は前提にしていませんが、
「ターミナルでコマンドを入力することに極端な抵抗はない」レベルをイメージしていただければ十分です。

1-3. 記事の構成と読み進め方

本記事は、

  • 前提条件の確認
  • インストール方法(公式リポジトリ/スクリプト方式 など)
  • 権限設定と動作確認
  • Docker Compose の導入
  • トラブルシューティングと次のステップ

という流れで進んでいきます。

最初から最後まで通して読んでいただいても構いませんし、
すでに Docker をインストール済みの方は「権限設定」や「Compose」の章だけを拾い読みしていただいても問題ありません。

2. 前提条件・準備

Docker のインストール作業は基本的にシンプルですが、Ubuntu のバージョンや既存の環境によっては、事前に確認しておいたほうが良いポイントがあります。ここでは、スムーズにインストールを進めるための前提条件と準備について整理します。

2-1. 対応している Ubuntu バージョン

Docker は多くの Ubuntu バージョンで利用できますが、特に一般的なのは次の LTS 系列です。

  • Ubuntu 22.04 LTS(推奨)
  • Ubuntu 20.04 LTS
  • Ubuntu 24.04 LTS(最新の場合)

LTS(Long Term Support)版は長期サポートが提供されるため、Docker を含む開発環境を安定して運用しやすいメリットがあります。

※非LTS(例えば 23.10 のような中間バージョン)でも利用可能ですが、実務では LTS を選ぶのが一般的です。

2-2. 事前にインストールされている可能性がある Docker パッケージ

Ubuntu の標準リポジトリには docker.io というパッケージが存在します。ただ、これは Docker 社が提供する公式版ではなく、バージョン更新が遅れることも多いため、公式リポジトリ(docker.com)を使ってインストールするのが基本です。

念のため、すでに古い Docker 関連パッケージが入っていないか確認しましょう。

sudo apt remove docker docker.io containerd runc

「入っていない場合は削除の必要なし」と表示されても問題ありません。

2-3. APT の更新と必須パッケージの準備

Docker の公式リポジトリを追加する前に、APT を最新状態に更新しておきます。

sudo apt update
sudo apt install -y ca-certificates curl gnupg

ここでインストールするのは、Docker の GPG キー追加やリポジトリ登録に必要なツールです。

2-4. 管理者権限(sudo)の確認

Docker のインストール手順では、sudo 権限を利用します。もし自分のアカウントに sudo が付与されていない場合は、管理者ユーザーに切り替えるか、権限を付与してもらう必要があります。

確認方法は次のとおりです。

sudo -v

パスワードを求められ、問題なく実行できれば準備完了です。

2-5. ネットワーク環境の確認

Docker のインストールでは外部リポジトリにアクセスするため、インターネット接続が必須です。企業ネットワークやプロキシ環境の場合、アクセス制限が原因で GPG キーの取得が失敗することがあります。

その場合は、ネットワーク管理者にプロキシ設定や許可リストの確認が必要となります。

2-6. 「どのインストール方法を使うべきか?」の整理

Docker の導入方法は大きく3種類あります。

  1. Docker公式リポジトリを追加してインストール(推奨)
  2. get.docker.com のスクリプトによる一括インストール(手軽)
  3. Docker の .deb パッケージを直接ダウンロード(特殊ケース向け)

本記事では、最も一般的で管理しやすい 公式リポジトリ方式 を中心に進めていきます。

前提条件が整ったところで、次のセクションではいよいよ Docker のインストール手順に入ります。
もっとも推奨されている「公式リポジトリからの導入」を、手順ごとに丁寧に解説します。

3. Docker のインストール方法

ここからは、Ubuntu に Docker を実際にインストールしていきます。
インストール方法はいくつか存在しますが、本記事では もっとも信頼性が高く、運用でも一般的に採用される「Docker公式リポジトリ方式」 を中心に解説します。

公式リポジトリ方式は、将来的に apt upgrade で安定してアップデートできるため、長期的な運用に向いた方法です。

3-1. Docker 公式リポジトリを追加する(推奨)

最初に、Docker が提供する公式 GPG キーを登録し、APT のリポジトリに Docker の専用ソースを追加します。
ここを正しく設定すれば、Ubuntu 標準の古い docker.io パッケージと混同されることがなくなります。

3-1-1. GPG キーの登録

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  • /etc/apt/keyrings/ は Ubuntu 22.04 以降で推奨されている新しい鍵配置先
  • --dearmor により、バイナリ形式の鍵へ変換

この手順により、APT が Docker 公式リポジトリを正しく信用できるようになります。

3-1-2. リポジトリの追加

続いて、APT の「ソースリスト」に Docker 専用のリポジトリを追加します。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

ポイント:

  • $(. /etc/os-release && echo $VERSION_CODENAME) により、Ubuntu のバージョンに適したコードネーム(jammy, focal など)が自動入力されます
  • 安定版(stable)リポジトリのみを追加

3-1-3. リポジトリ情報の更新

リポジトリ追加後は、APT のインデックスを更新します。

sudo apt update

この時点で docker-ce(Docker Engine)がインストール候補として表示されるようになります。

3-2. Docker Engine(本体)のインストール

ここからメインパッケージを導入します。

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

各パッケージの役割:

  • docker-ce:Docker Engine 本体
  • docker-ce-cli:Docker コマンドラインツール
  • containerd.io:Docker の基盤となるコンテナランタイム
  • docker-buildx-plugin:マルチプラットフォームビルドなど高度なビルド機能
  • docker-compose-plugin:Compose V2(docker compose コマンド)

インストール後、Docker デーモンは自動的に起動します。

3-3. インストールを確認する

次のコマンドで Docker の動作状態を確認します。

sudo systemctl status docker

active (running) と表示されていれば正常稼働しています。

すぐに抜ける場合は q を押してください。

3-4. 手軽に導入したい場合の簡易スクリプト方式(補足)

Docker 社が提供している一括インストールスクリプトを利用する方法もあります。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

メリット:

  • コマンドが少なく、導入が簡単
  • 環境がシンプルならすぐにインストールが終わる

デメリット:

  • バージョン管理がしにくい
  • 実務環境では推奨されないケースが多い

初心者には便利ですが、本記事ではメンテナンス性を重視し「公式リポジトリ方式」をメインとして扱っています。

3-5. Ubuntu 最新版(24.04 など)での注意点

Ubuntu のメジャーアップデート直後は、Docker 公式リポジトリの対応が遅れることがあります。
その場合は、次の点をチェックしましょう。

  • GPG キーの場所と形式が現在の仕様と一致しているか
  • VERSION_CODENAME の値が正式に対応しているか
  • apt update 時に署名エラーが出ていないか

もし対応が間に合っていない場合は、「一時的に get.docker.com スクリプトを使う」という選択肢もあります。

4. ユーザー権限と非 sudo 実行設定

Docker のインストールが完了すると、すぐに docker コマンドを使いたくなるところですが、そのままでは 毎回 sudo を付けて実行しなければならない状態 になっています。

これはセキュリティ上の仕様ですが、実務や学習で利用する際には非常に不便です。
そこで、Docker の操作に必要な「docker グループ」をユーザーに付与し、sudo なしでコマンドを使えるように設定します。

4-1. なぜ sudo なしで実行する設定が必要なのか

Ubuntu では、Docker デーモン(dockerd)は root 権限で動作しています。
そのため、docker コマンド経由でコンテナの作成や削除を行うには、root 権限が必要です。

そこで用意されているのが docker グループ です。

  • このグループに所属しているユーザーは、
    Docker デーモンへ直接アクセス できる
  • つまり、sudo を使わなくても docker run などの操作が可能になる
  • 開発用途では必須に近い設定

ただし、docker グループは実質的に「root に近い権限」を持つため、共同利用環境では慎重に扱う必要があります。
(個人利用の Ubuntu デスクトップ/WSL2 などでは実質問題ありません)

4-2. docker グループへユーザーを追加する

次のコマンドで、現在ログインしているユーザーを docker グループに追加します。

sudo usermod -aG docker $USER

このコマンドは「ユーザーをグループに追加する」基本的な操作です。
-aGappend to group の意味です。

4-3. 設定を反映する

グループ変更は、ログアウトしてログインし直すことで反映されます。

ただし、すぐに反映したい場合は次のコマンドでも可能です。

newgrp docker

この時点で、一時的に新しいシェルが起動し、docker グループの権限が適用されます。

4-4. sudo なしで実行できるか確認する

実際に sudo を付けずに動作確認をしてみましょう。

docker run hello-world

成功例:

  • Hello from Docker!
  • イメージが取得され、メッセージが表示される

もしエラーが出る場合は、下記のチェックを行ってください。

チェックポイント:

  • グループ追加後にログインし直したか
  • コマンド実行時に /usr/bin/docker が利用されているか
  • docker デーモンが起動中か(systemctl status docker

4-5. セキュリティ上の注意点(重要)

docker グループは強力な権限を持ち、実質的に root に近い操作が可能です。

  • 任意ファイルの読み取り
  • ホスト OS のディレクトリをコンテナにマウント
  • ネットワーク操作
  • Docker ソケット経由のシステム操作

個人 PC では問題ありませんが、多人数で共有するサーバーでは利用者管理が極めて重要になります。

→ その場合は、次の章で触れる rootless Docker を検討することもあります。

5. 起動と動作確認

Docker のインストールと権限設定が完了したら、次は 正常に動作しているかどうかの確認 を行います。
この章では、Docker サービスの起動状態をチェックし、実際にコンテナを動かしてみるところまで丁寧に解説します。

5-1. Docker デーモンの起動を確認する

まずは、Docker がバックグラウンドで正しく動いているかを確認します。

sudo systemctl status docker

表示されるポイントは以下です。

  • active (running) → 正常に稼働中
  • inactive → 起動していない(手動で開始する必要あり)
  • failed → 設定ミスまたは依存サービスエラー

もし inactive や failed の場合は、次のコマンドで起動できます。

sudo systemctl start docker

また、OS 起動時に自動で Docker を立ち上げるには、

sudo systemctl enable docker

5-2. hello-world コンテナで動作チェックする

Docker の動作確認で最も一般的なのが、公式が提供している hello-world イメージを実行する方法です。

docker run hello-world

このコマンドは次の動作を行います。

  1. ローカルにイメージが無ければ、Docker Hub から自動ダウンロード
  2. イメージを基にコンテナを起動
  3. テスト用メッセージを表示して終了

成功すると、次のようなメッセージが表示されます。

Hello from Docker!
This message shows that your installation appears to be working correctly.

これが表示されれば、Docker のインストールと基本動作は正常です。

5-3. 基本的な Docker コマンドを試してみる

動作確認ができたら、よく使う基本コマンドもチェックしておきましょう。

5-3-1. イメージ一覧を確認する

docker images

ローカルにダウンロード済みのイメージが一覧表示されます。
hello-world が含まれていれば正常です。

5-3-2. 実行中のコンテナを確認する

docker ps

起動中のコンテナを一覧表示します。
(hello-world は瞬間的に終了するため、通常は表示されません)

終了済みコンテナも表示するには:

docker ps -a

5-3-3. 公式イメージを実際に動かす簡単な例

Web サーバ Nginx を試す場合:

docker run -d -p 8080:80 nginx
  • -d → バックグラウンド起動
  • -p → ホストの 8080 番ポート → コンテナ 80 番へ転送

ブラウザで http://localhost:8080 を開くと、Nginx の初期ページが表示されます。

5-4. コンテナの停止と削除(確認しておくと便利)

起動したコンテナは次のコマンドで停止できます。

docker stop <コンテナID>

削除する場合は

docker rm <コンテナID>

不要なイメージの削除は次のとおりです。

docker rmi <イメージID>

コンテナ → イメージ → ボリューム の順に依存関係があるため、削除の際は順番に注意してください。

5-5. もしエラーが出た場合の典型的な原因

● 権限エラー

Got permission denied while trying to connect to the Docker daemon socket
→ docker グループにユーザーが追加されていない

● デーモンが起動していない

Cannot connect to the Docker daemon at unix:///var/run/docker.sock
systemctl start docker を実行して起動

● ネットワーク問題でイメージが取得できない

→ プロキシ設定・DNS設定・ネットワーク制限を確認

● 古い docker.io が残っている

→ 一度アンインストールしてから再インストール

Docker の基本動作とコンテナ起動が確認できたら、次は実務で非常によく使う Docker Compose の導入 に進みます。
Compose は複数コンテナの管理が一気に楽になる便利ツールです。

6. Docker Compose の導入と基本的な使い方

Docker を本格的に活用するうえで欠かせないのが Docker Compose です。
Web アプリケーションでは、アプリ本体だけでなく、「DB」「キャッシュ」「ワーカー」「Web サーバ」が複数同時に動くことが多く、これらを毎回手動で docker run するのは現実的ではありません。

Docker Compose を使えば、複数のコンテナ構成をまとめて1つの設定ファイルに記述して、まとめて起動・停止 できます。
実務でも最も利用されるツールのひとつです。

6-1. Compose V2(docker compose)のインストール確認

Ubuntu の Docker 公式リポジトリからインストールした場合、Compose は プラグインとして自動で導入 されています。

まずはバージョンを確認してみましょう。

docker compose version

正常であれば、次のような表示が出ます。

Docker Compose version v2.x.x

もしエラーになる場合(例:docker: 'compose' is not a docker command)は、下記パッケージを追加します。

sudo apt install docker-compose-plugin

6-2. Docker Compose の役割とメリット

Compose のメリットは次のとおりです。

  • 複数コンテナの一括管理(起動・停止・再起動)
  • 設定をファイル化できるため、環境構築の再現性が高い
  • Webアプリ、API、DB などの構成を簡単に共有可能
  • docker compose up だけで開発環境が立ち上がる

特にアプリ開発では、効率が劇的に上がるため必須に近いツールです。

6-3. Compose 用設定ファイルの基本構造

Compose では、docker-compose.yml(または compose.yaml)というファイルにサービスを定義します。
最小限の例として、Nginx を起動するシンプルなファイルを作ってみましょう。

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

このファイルを保存したディレクトリで次のコマンドを実行します。

docker compose up -d

これで、Nginx がバックグラウンドで立ち上がります。
ブラウザで http://localhost:8080 を開くと、Nginx の初期画面が表示されます。

6-4. 複数コンテナ構成の例(Web + DB)

Compose の本領は、複数コンテナを同時に扱う場面 です。
例えば、Web アプリと MySQL を同時に起動する構成は以下のようになります。

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

説明:

  • depends_on により、アプリより先に DB を起動させられる
  • volumes により、DB データが永続化される
  • 2つのサービスを1つの yaml で管理できる

開発環境では非常に便利なパターンです。

6-5. よく使う Compose コマンド集

まとめて覚えておくと便利なコマンドです。

コマンド内容
docker compose up -dコンテナをバックグラウンドで起動
docker compose downコンテナ・ネットワークを停止・削除
docker compose buildDockerfile を使ってイメージをビルド
docker compose psCompose 管理下のコンテナ一覧
docker compose logs -fログの確認(サービス名指定可)

Compose を使うと、一連の環境を何度でも同じ状態で再構築できるため、チーム開発にも向いています。

6-6. 開発環境での Compose のおすすめ活用法

  • ローカル開発環境を ワンクリック構築
  • 本番に近い構成を再現して動作チェック
  • DB・キャッシュ・メッセージキューなど複合サービスの起動
  • ボリュームを使ったデータ永続化
  • 環境変数 .env を使った設定管理
  • API・Web・Worker など複雑なマイクロサービス構成に対応

Docker + Compose を扱えるようになると、環境構築にかかる時間が激減し、
開発効率が大幅に向上します。

Compose を導入したところで、次は Docker を運用する際に知っておきたいセキュリティや注意点
そして トラブルが起きたときの対処法(トラブルシューティング) について解説していきます。

7. セキュリティと運用上の注意点

Docker は非常に便利なツールですが、「コンテナだから安全」「仮想環境だから問題ない」というわけではありません。
特に Ubuntu 上で日常的に Docker を利用する場合は、いくつか押さえておくべきセキュリティと運用上のポイントがあります。

この章では、Docker を安全かつ安定的に運用するために必要な知識を、初心者にも分かりやすく整理します。

7-1. docker グループの権限は “実質 root” である

前の章で設定した docker グループですが、これは実は非常に強い権限を持っています。
docker グループに所属しているユーザーは、Docker ソケット経由でホスト OS を操作できるため、実質的に root 権限に近い操作が可能です。

● 注意すべきポイント

  • 共同利用サーバーでは、docker グループに誰でも追加してはいけない
  • 「sudoなしで実行できるの便利!」だけでなく権限の重さも理解しておく
  • セキュリティポリシーが厳しい企業では、管理者の承認が必要なこともある

個人利用の Ubuntu や開発用 PCでは問題になりにくいですが、運用サーバーでは慎重な判断が必要です。

7-2. rootless Docker の検討(高度な選択肢)

Docker には rootless mode と呼ばれる機能があり、
「デーモンを root ではなく一般ユーザー権限で動かす」ことができます。

メリット:

  • ホスト OS の権限リスクを大幅に軽減できる
  • セキュリティ要件が厳しい環境でも安全に Docker を実行可能

デメリット:

  • 一部のネットワーク機能が制限される
  • 初心者には設定がやや難しい
  • 標準の Docker と挙動が異なるケースあり

開発用途なら rootless を使う必要はありませんが、
企業環境やコンプライアンス重視の場面では候補に入ってきます。

7-3. 不要なイメージ・コンテナの整理(クリーンアップ)

Docker を使っていると、気がつかないうちにディスク容量を大量に消費します。
古いコンテナや未使用イメージ、ボリュームが積み上がり、100GB 以上消費することもあります。

● 不要リソースの削除コマンド

未使用イメージ削除

docker image prune

コンテナ・ネットワークを含めてまとめて削除

docker system prune

もっと徹底的に削除(注意)

docker system prune -a

-a は未使用イメージをすべて削除するため、誤って削除しないよう注意してください。

7-4. 本番環境では “latest” タグを使わない

開発中は便利な nginx:latest などのイメージタグですが、本番運用では非推奨です。

理由:

  • latest がどのバージョンを指すか保証されない
  • 突然バージョンが変わり動作不良を引き起こす
  • 再現性が失われるためデプロイが不安定になる

推奨はバージョン固定:

例)

image: nginx:1.25

本番環境では「バージョン明示」が鉄則です。

7-5. Dockerfile のベースイメージは公式推奨を使う

Dockerfile を作成する場合は、次の点を守ると安全です。

  • 公式イメージ(library イメージ)を優先する
  • 謎のメンテナンス者が作った非公式イメージは避ける
  • Alpine など軽量 OS を使う際は脆弱性対応状況を確認する

信頼できないイメージは、マルウェア混入の可能性があります。
開発環境でも極力避けるようにしましょう。

7-6. ネットワーク・ポート開放の扱いに注意

コンテナがホスト OS の特定ポートを公開する場合、
外部にそのままアクセスされる可能性があります。

注意点:

  • 不要な -p 80:80 は開かない
  • ローカル用は -p 127.0.0.1:8080:80 のようにホスト内部限定を利用
  • 防火壁(UFW)の設定と併用する
  • 本番は reverse proxy(Nginx 等)と組み合わせたほうが安全

特に VPS やクラウドの Ubuntu では、ポート管理が非常に重要です。

7-7. 障害時のログ管理

Docker のログは下記で確認できます。

docker logs <コンテナ名>

大量ログでディスクが圧迫される場合があるため、
log driver の設定ログローテーション も検討します。

8. よくあるトラブル(トラブルシューティング)

Docker は便利なツールですが、Ubuntu で利用していると、環境差や設定ミスにより思わぬエラーに遭遇することがあります。
ここでは、初心者から中級者までが遭遇しやすい典型的なトラブルと、その解決方法をまとめています。

8-1. Docker デーモンに接続できないエラー

● エラー内容

Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

● 原因と解決策

  1. Docker デーモンが起動していない sudo systemctl start docker
  2. docker グループ設定が反映されていない sudo usermod -aG docker $USER logout → 再ログイン、または newgrp docker の実行。
  3. /var/run/docker.sock の権限問題
    docker グループにユーザーが入っていれば改善されます。

8-2. 権限エラー(Permission denied)

● 代表的なエラー例

Got permission denied while trying to connect to the Docker daemon socket

● 解決策

ほぼ確実に「docker グループ未設定」が原因です。

sudo usermod -aG docker $USER

その後再ログイン。

8-3. APT リポジトリ追加時の GPG エラー

● エラー例

NO_PUBKEY XXXXXXXX

または

The following signatures couldn't be verified

● 原因と対処

  • GPG キーの登録が正しくできていない
  • curl の取得に失敗した(ネットワーク問題)

次のコマンドで再登録できます:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
 | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

その後 sudo apt update で再確認。

8-4. ポート競合エラー

● エラー例

Bind for 0.0.0.0:80 failed: port is already allocated.

● 原因

  • 既にホストの同じポートを別プロセスが使用している
  • 別の Docker コンテナが同ポートを占有している

● 解決策

使用中のプロセス確認

sudo lsof -i -P -n | grep :80

競合しているコンテナ確認

docker ps

ポート番号を変更して起動

-p 8080:80

8-5. イメージのダウンロードに失敗する

● 主な原因

  • ネットワーク制限(企業ネットワーク)
  • DNS の問題
  • Docker Hub への接続ブロック

● 解決策

  • 別の DNS(例:1.1.1.1, 8.8.8.8)に変更
  • プロキシ環境の設定を確認
  • 環境によっては VPN が必要な場合もある

8-6. ディスク容量不足によるエラー

● 典型的なメッセージ

no space left on device

● 対処

未使用リソースの削除

docker system prune -a

イメージ・ボリューム・コンテナ確認

docker images
docker ps -a
docker volume ls

Docker の運用では容量圧迫は非常に多いトラブルです。

8-7. Docker Compose で依存順エラー

● エラー例

Error response from daemon: pull access denied

または DB が起動しておらず、アプリが接続できない。

● 解決策

  • depends_on の設定見直し
  • ボリューム初期化の確認
  • .env の設定漏れがないか確認

8-8. 最新の Ubuntu でインストールできない

Ubuntu の最新バージョン(例:24.04 など)では、Docker の公式リポジトリが対応していない時期があります。

● 解決策

  • 数日待つ(対応が早い)
  • 一時的に get.docker.com スクリプトを利用
  • コードネーム(jammy, focal 等)を手動指定して追加する方法もあり

8-9. WSL2(Ubuntu)での固有問題

WSL2 で Docker を使う場合は特殊です。

  • Docker Desktop が必要
  • Linux側単体で dockerd を動かすのは非推奨
  • ポートフォワーディングの挙動が通常の Ubuntu と異なる

WSL2 は別記事で詳しく扱う価値があるほど、独自仕様が多い領域です。

9. 実践活用のヒント・次のステップ

Docker が正常に動作し、基本的なコンテナ操作ができるようになったら、いよいよ本格的な活用ステージに進めます。この章では、実務や学習で Docker を活かすための次のステップや、より高度な使い方のヒントをまとめました。

9-1. 初めてのコンテナ運用:簡単なアプリの立ち上げ

Docker の基礎を理解したら、まずは以下のような “すぐに動く” 簡単なアプリ構成に挑戦してみましょう。

● Web サーバ(Nginx / Apache)

docker run -d -p 8080:80 nginx

● データベース(MySQL / PostgreSQL)

docker run -d -e MYSQL_ROOT_PASSWORD=example mysql:8.0

● キャッシュサーバー(Redis)

docker run -d -p 6379:6379 redis

このように 1 行で各種ミドルウェアを起動できるのが Docker の最大の利点です。

9-2. Dockerfile を作って自作アプリをコンテナ化する

次のステップとして、アプリケーションを 自分でコンテナ化(Dockerfile の作成) してみましょう。

基本的な Dockerfile の構造は以下のとおりです。

FROM python:3.10-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

このファイルを作ることで、

  • 開発環境を共有できる
  • 本番環境とローカル環境を揃えられる
  • Docker Compose と組み合わせて複数サービスを起動できる

といったメリットが生まれます。

9-3. Docker Compose を使った本格的な環境構築

Docker Compose を理解したら、次は複数のサービスをまとめて起動する構成に進んでみましょう。

例:API + DB + キャッシュ + フロントエンド

services:
  api:
    build: ./api
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example

  redis:
    image: redis:latest

Compose を使うと、開発チーム全員が同じ環境を再現できるため、トラブルの少ない開発が可能になります。

9-4. CI/CD と組み合わせて自動化する

Docker を使った次のステップとして、GitHub Actions や GitLab CI/CD と組み合わせた 自動化(CI/CD) が挙げられます。

  • コードプッシュ → 自動ビルド → コンテナ化 → デプロイ
  • テスト環境の自動起動
  • 自動テストによる品質向上

Docker を使うことで、これらの仕組みを安定して構築でき、開発効率が一気に向上します。

9-5. 本番環境では Kubernetes・Swarm などへ発展

さらにステップアップすると、コンテナを大量に運用するための オーケストレーション が必要になります。

例としては:

  • Kubernetes(K8s)
  • Docker Swarm
  • Amazon ECS
  • Google Cloud Run

特に Kubernetes は本番環境で使われる代表的技術で、Docker の理解がそのまま活かせます。

9-6. Docker を学ぶ上で知っておきたいベストプラクティス

最後に、Docker をより良く使うためのベストプラクティスをまとめます。

  • コンテナは「状態を持たない」前提で運用する
  • ボリュームを使ってデータを永続化
  • イメージは軽量化する(不要ファイルは COPY しない)
  • キャッシュを意識して Dockerfile を分割する
  • 開発環境と本番環境で設定を分ける
  • 公式イメージを優先的に使う
  • セキュリティパッチを定期的に適用する
  • Compose で環境一式をコード化する

これらを意識すれば、Docker を長期運用してもトラブルが少なく、扱いやすい環境を維持できます。

10. FAQ(よくある質問)

Ubuntu に Docker をインストールしたあと、実際に使い始めると細かい疑問や不安が出てくるものです。
ここでは、読者から寄せられやすい質問をまとめて FAQ 形式で整理しました。

Q1. Ubuntu のどのバージョンまで Docker はサポートされていますか?

Docker は、Ubuntu の主要 LTS バージョンを中心にサポートしています。

  • Ubuntu 22.04 LTS(推奨)
  • Ubuntu 20.04 LTS
  • Ubuntu 24.04 LTS(リポジトリ対応が遅れることあり)

基本的には LTS 系列を選べば問題ありません。
非LTS でも動作しますが、実務では LTS を選ぶのが一般的です。

Q2. apt install docker.io ではダメですか?

結論としては おすすめしません

理由:

  • 標準リポジトリの docker.io は更新が遅い
  • Docker 社が管理しているわけではない
  • 最新機能(Compose など)が十分ではないことがある

長期的な安定運用のためには、Docker 公式リポジトリからインストールすべきです。

Q3. なぜ毎回 sudo を付けないといけないのですか?

Docker デーモン(dockerd)は root 権限で動いているため、
一般ユーザーが docker コマンドで操作するには権限が必要です。

対応策:

sudo usermod -aG docker $USER

docker グループにユーザーを追加すれば、sudo なしで操作できるようになります。

Q4. Docker をアンインストールしたい場合は?

以下のコマンドでアンインストールできます。

sudo apt remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

完全削除する場合:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

ただし、重要なデータがある場合は注意してください。

Q5. WSL2(Windows)上の Ubuntu でも同じ手順ですか?

部分的には同じですが、結論として そのままでは使えません

WSL2 の場合:

  • Docker Desktop のインストールが必要
  • Linux側の Docker Engine 単体起動は非推奨
  • ポート共有・ネットワーク仕様が Ubuntu と異なる

WSL2 は通常の Ubuntu とは環境が異なるため、別途ガイドを参照することを推奨します。

Q6. 商用環境で Docker を使うときに特に注意すべき点は?

  • イメージタグは latest を使わずバージョン固定
  • データは必ずボリュームで永続化
  • リソース(CPU・メモリ)制限を設定
  • コンテナログのローテーション
  • セキュリティパッチを定期的に適用
  • プロダクションは Compose ではなくオーケストレーション(K8s等)を検討

開発環境と本番環境では設計思想が異なるため、用途に応じた運用が必要です。

Q7. Docker Compose と Docker Compose V1 は違いますか?

はい、明確に違います。

  • Compose V1docker-compose コマンド(Python 製・旧版)
  • Compose V2docker compose コマンド(Go 製・現在の標準)

Ubuntu で Docker をインストールすると Compose V2 が標準です。

Q8. コンテナのデータはどこに保存されていますか?

多くのコンテナのデータは、Docker のデフォルトディレクトリである /var/lib/docker/ に保存されています。

  • イメージ
  • コンテナのレイヤー
  • ボリューム(外部定義の永続化データ)
  • ネットワーク設定

データのバックアップや移動が必要な場合は、この場所を扱うことになります。

Q9. インストール後、やっておいたほうが良い初期設定はありますか?

以下はおすすめです。

  • docker グループの付与
  • Compose の動作確認
  • テスト用イメージ(hello-world)で動作チェック
  • docker system df でディスク使用量の把握
  • 不必要にポートを開けない
  • 自分用の ~/docker-projects/ フォルダを用意する

これらを行うことで、より快適に Docker を活用できます。

Q10. 軽量 OS の Alpine Linux は使ったほうが良いですか?

Alpine はファイルサイズが非常に小さく人気ですが、
musl libc を使用しており、glibc 前提のアプリが動作しない場合があります。

軽さを重視するなら Alpine、互換性を重視するなら Debian/Ubuntu ベースを使いましょう。

11. まとめ

本記事では、Ubuntu に Docker をインストールする手順から、動作確認・Compose の利用・セキュリティ・トラブルシューティングまで、実務でも役立つ内容を体系的に解説しました。初めて Docker を触る方でも、この記事を順番に読み進めることで、環境構築の全体像と運用のポイントを理解できるよう構成しています。

11-1. 本記事で学んだ内容の振り返り

● 前提条件の確認

  • Ubuntu の対応バージョン(主に LTS)
  • 古い Docker パッケージの削除
  • APT の更新と必須パッケージの準備

● Docker のインストール

  • Docker 公式リポジトリを追加
  • docker-ce と関連パッケージを apt でインストール
  • デーモンの起動確認

● 権限設定

  • docker グループの付与による sudo なしの実行
  • newgrp docker や再ログインで反映

● 動作確認

  • hello-world コンテナの起動
  • 基本コマンド(ps / images / stop / rm など)

● Docker Compose の利用

  • Compose V2 の基本
  • 単一コンテナ、複数コンテナの起動
  • よく使うコマンドや構成例

● セキュリティと運用

  • docker グループの扱いに注意
  • 不要リソースのクリーンアップ
  • バージョン固定の重要性
  • 本番運用の注意点

● トラブルシューティング

  • 権限エラー
  • デーモン接続問題
  • GPG キーエラー
  • ポート競合
  • ディスク圧迫 など

● 次のステップ

  • アプリのコンテナ化(Dockerfile)
  • Compose による複数サービス構築
  • CI/CD との連携
  • Kubernetes など高度な環境への発展

11-2. Docker は「最初の1歩」が一番難しい

Docker の学習曲線は「最初の1歩」が最も高く、
一度使い始めると、単なるミドルウェア管理ツールではなく、

  • 環境構築を自動化する仕組み
  • 開発を高速化する基盤
  • 本番環境を安定運用する技術

として、多くのプロジェクトで欠かせない存在になります。

Ubuntu と Docker を組み合わせることで、
安定した開発環境と再現性の高いワークフローが実現できることを、
この記事を通して感じていただければ幸いです。

11-3. 今後の学習へのアドバイス

  • Compose の設計に慣れる
  • Dockerfile を自分で書いてみる
  • CI/CD と組み合わせる
  • 実際にアプリケーションをコンテナ化してみる
  • 本番環境向けには Kubernetes の基礎にも触れてみる

Docker を扱えると、開発環境構築の負担は大幅に軽減され、
本当に大切な「アプリ開発そのもの」に集中できるようになります。

11-4. 最後に

もし、特定の用途(例:Webアプリ、Django、Rails、Node.js、FastAPI、PHP、MySQLなど)向けに Docker を使いたい場合は、
その言語やフレームワークに合わせた 専用の Dockerfile + Compose 構成 を作ることが最も効果的です。