UbuntuにDockerをインストールする完全手順|公式リポジトリ設定から動作確認・初期設定まで

環境&ワークフロー

Ubuntu(24.04 LTS / 22.04 LTS等)にDockerをインストールする際は、Ubuntu標準パッケージ(docker.io)ではなく、Docker公式のAPTリポジトリからDocker Engine(docker-ce)を導入するのが推奨です。公式リポジトリを使用することで、最新機能やセキュリティ更新、Docker Composeプラグインなどを安全かつ確実に利用できます。

この記事では、Linux・サーバー運用を行うエンジニアや学習者向けに、古いパッケージの削除から、Docker公式GPGキー・リポジトリの登録、Docker EngineとDocker Composeのセットアップ、sudoなし実行設定(dockerグループ)、動作確認、トラブル対処までを実録のコマンド出力とともにわかりやすく解説します。

1. UbuntuにおけるDockerインストールの前提条件と手順の全体像

Ubuntu環境でDockerを構築する前に、対応OSと必要な権限を確認しておきましょう。

項目要件・推奨設定
対応OSUbuntu 24.04 LTS (Noble), 22.04 LTS (Jammy), 20.04 LTS (Focal)
対応アーキテクチャx86_64 / amd64, arm64 (Raspberry PiやARMサーバー等)
必要権限sudo 実行権限を持つ一般ユーザー
推奨パッケージdocker-ce (Docker Official Build)

インストールは以下の5ステップで進行します。

  1. 旧バージョンおよび競合パッケージ(docker.io 等)の削除
  2. Docker公式GPGキーとAPTリポジトリの登録
  3. Docker Engine / CLI / Docker Compose プラグインのインストール
  4. systemdサービスの動作確認と hello-world コンテナの実行
  5. 一般ユーザーで sudo なし実行できるようにする docker グループの設定

2. ステップ1:古いパッケージ・競合ソフトウェアの削除

Ubuntu標準のパッケージリポジトリに含まれる旧バージョンのDockerパッケージ(docker.iodocker-doc など)が残っていると、公式の docker-ce と競合してトラブルの原因になります。

最初に以下のコマンドを実行して、旧パッケージをまとめてアンインストールします。

sudo apt-get remove -y docker docker-engine docker.io containerd runc docker-doc docker-compose docker-compose-v2 podman-docker

※過去にDockerをインストールしたことがない場合、「パッケージ ‘docker.io’ はインストールされていないため削除されません」といったメッセージが表示されますが、そのまま次へ進んで問題ありません。

3. ステップ2:Docker公式APTリポジトリとGPGキーの追加

次に、Docker公式リポジトリから暗号化署名された安全なパッケージを取得するため、DockerのGPGキーとAPTソースリストを追加します。

① 必要な依存パッケージのインストール

HTTPS経由でリポジトリにアクセスし、GPG鍵を取得するために必要なツール(ca-certificates, curl, gnupg)をインストールします。

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

② Docker公式GPGキーの保存

現在のDebian / Ubuntuにおけるセキュリティ標準に従い、/etc/apt/keyrings/docker.asc にDocker公式GPGキーを保存します。

# キーリング保存用ディレクトリを作成(存在しない場合)
sudo install -m 0755 -d /etc/apt/keyrings

# Docker公式GPG鍵をダウンロードして保存
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

③ APTソースリストへのDockerリポジトリ追加

お使いのUbuntuのバージョン名(noble, jammy, focal 等)とアーキテクチャ(amd64 / arm64)を自動判定し、APTソースファイル /etc/apt/sources.list.d/docker.list を作成します。

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

# パッケージ情報を更新
sudo apt-get update

sudo apt-get update 実行時にエラーが出ず、https://download.docker.com/linux/ubuntu から正常にパッケージリストが読み込まれればリポジトリ登録は成功です。

4. ステップ3:Docker Engineとプラグインのインストール

リポジトリの準備が整ったら、Docker本体(Docker Engine)と周辺ツールを一括してインストールします。

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

インストールされる各パッケージの役割は以下の通りです。

パッケージ名概要と役割
docker-ceDocker Community Edition デーモン本体(dockerd
docker-ce-cliターミナルから操作するための docker コマンドラインツール
containerd.ioコンテナのライフサイクルを管理するコンテナランタイム
docker-buildx-pluginマルチプラットフォーム対応の高速イメージビルド機能拡張
docker-compose-plugindocker compose サブコマンドとして利用できるDocker Compose V2

5. ステップ4:Dockerの起動確認とhello-worldコンテナテスト

インストールが完了したら、Dockerデーモンが正常に稼働しているかと動作を確認します。

① systemdサービスの確認と自動起動設定

Ubuntuでは通常、インストール完了時に自動的にDockerサービスが起動します。以下のコマンドでステータスを確認し、OS起動時の自動起動を有効化します。

# Dockerサービスの状態確認
sudo systemctl status docker --no-pager

# OS起動時に自動起動するように有効化
sudo systemctl enable --now docker

active (running) と表示されていれば背景でDockerデーモンが正常に動作しています。systemctlコマンドの使い方もあわせて参照してください。

② バージョン確認

docker および docker compose のバージョンを表示してみましょう。

$ docker --version
Docker version 28.0.1, build 068a01e

$ docker compose version
Docker Compose version v2.33.1

③ hello-world テストコンテナの実行

テスト用イメージ hello-world を取得・実行して、Docker環境が正しく構築されたか検証します。

sudo docker run hello-world

出力例:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c4b26090c213: Pull complete 
Digest: sha256:49a04a6e...
Status: Downloaded newer image for hello-world:latest

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

「Hello from Docker!」が出力されれば、コンテナのダウンロードと実行が正常に行われています。

6. ステップ5:一般ユーザーでsudoなしでDockerを実行する設定

デフォルトの状態では、Dockerデーモンは root ユーザーが所有するUNIXソケット(/var/run/docker.sock)と通信するため、毎回 sudo docker ... と入力する必要があります。

開発作業を効率化するため、現在のユーザーを docker グループに追加して sudo なしで実行できるように設定します。

① dockerグループの作成とユーザー追加

# dockerグループを作成(通常インストール時に自動作成されます)
sudo groupadd docker

# 現在ログイン中のユーザー($USER)をdockerグループに追加
sudo usermod -aG docker $USER

② グループ変更の反映

通常は一度ログアウトして再ログインするか、以下のコマンドを実行して現在のシェルセッションにグループ変更を即座に反映させます。

newgrp docker

③ sudoなしでの動作確認

先頭の sudo を外して docker run hello-worlddocker ps が実行できるか確認します。

docker run hello-world

sudo なしで正常にメッセージが表示されれば、環境構築・初期設定は完了です!

セキュリティ上の補足注意:
docker グループに所属するユーザーは、実質的に root 権限と同等の操作(ホストマウント等)が可能になります。マルチユーザー環境や本番サーバーでは、信頼できるユーザーのみを追加してください。

7. よくあるエラーとトラブルシューティング

UbuntuでDockerを運用する際によく遭遇する問題と解決策をまとめました。

① Permission denied error (Got permission denied while trying to connect to the Docker daemon socket)

sudo なしで docker コマンドを実行した際に以下のエラーが出ることがあります。

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

原因: ユーザーが docker グループに未所属か、所属設定の反映(再ログイン / newgrp docker)が行われていません。詳細はPermission deniedの原因と直し方も参考にしてください。

対処法: sudo usermod -aG docker $USER を実行後、ターミナルを再起動するか newgrp docker を実行してください。

② GPG鍵に関する警告 (Key is stored in legacy trustdb…)

古いチュートリアル記事にあるように /etc/apt/trusted.gpg/usr/share/keyrings/docker-archive-keyring.gpg を指定すると、apt update 時に警告が表示される場合があります。

対処法: 本記事のステップ2で解説した通り、鍵を /etc/apt/keyrings/docker.asc に保存し、ソースリストで [signed-by=/etc/apt/keyrings/docker.asc] を明示する新しい記法に移行してください。

③ ファイアウォール(UFW)との干渉

Dockerはコンテナポートを公開する際、デフォルトで iptables ルールを直接書き換えるため、ufw(Ubuntuファイアウォール)でポートを塞いでいても外部からアクセスできてしまう性質があります。

対処法: ポートバインド時に -p 127.0.0.1:8080:80 のように明示的にローカルホスト(127.0.0.1)限定で公開するか、/etc/docker/daemon.json"iptables": false 設定を導入(要ネットワーク設計)してください。

④ 完全なアンインストール手順

Docker環境を完全に初期化・削除したい場合は、以下のコマンドでパッケージと関連データ(/var/lib/docker)を削除します。

# パッケージのパージ(設定ファイルごと削除)
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

# イメージ・コンテナ・ボリューム・設定データの削除
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -f /etc/apt/keyrings/docker.asc

8. よくある質問(FAQ)

Q1. Ubuntu標準の docker.io と公式の docker-ce の違いは何ですか?

docker.io はUbuntuメンテナが独自にビルド・パッケージ化したもので、バージョンが古くなりがちです。一方 docker-ce (Community Edition) はDocker公式が提供する最新ビルドであり、最新機能やバグ修正、公式プラグイン(BuildxやCompose V2)との完全な互換性が保証されています。

Q2. Docker Compose を使うために別途 docker-compose を入れる必要がありますか?

いいえ、必要ありません。公式リポジトリから docker-compose-plugin をインストールすることで、標準の docker compose サブコマンドとして利用できます。旧来のスタンドアロン版(Python製 / Go製のハイフン区切り docker-compose)よりも高速で安定しています。操作方法はdocker composeコマンド解説をご覧ください。

Q3. WSL2 (Windows上のUbuntu) で実行する場合も同じ手順ですか?

はい。WSL2上のUbuntu 22.04 / 24.04 で systemd が有効になっている場合、本記事の手順と全く同じ方法でDocker Engineを直接動かすことができます。Docker Desktop for Windowsのバックエンドとして使用する方法もありますが、LinuxネイティブのDocker EngineをWSL内で動かす方が軽量で動作が速いケースも多いです。

9. まとめ

UbuntuへのDockerインストールは、Docker公式リポジトリの登録(GPGキー+ソースリスト)→ docker-ce の導入 → docker グループの設定という手順を踏むのが最も確実で標準的な方法です。

環境構築が完了したら、以下の記事を参考にコンテナの基本操作やスクリプト開発を進めてみてください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント