UbuntuでDockerイメージを作成・管理する完全ガイド|インストール・最適化・トラブル対策

目次

1. はじめに

Dockerとは?

Dockerは、コンテナ型仮想化技術を活用して、アプリケーションの開発・配布・実行を効率的に行うためのプラットフォームです。従来の仮想マシン(VM)とは異なり、コンテナはホストOSのカーネルを共有するため、起動が高速であり、リソース消費も少なくなります。

UbuntuでDockerを使うメリット

Ubuntuは、Dockerとの親和性が高いLinuxディストリビューションの一つです。その理由として以下の点が挙げられます。

  • 公式サポート:DockerはUbuntuを正式にサポートしており、公式リポジトリから簡単にインストール可能。
  • 安定したパッケージ管理:UbuntuのAPTパッケージマネージャーを活用し、Dockerのバージョン管理が容易。
  • 広範なコミュニティサポート:Ubuntuは世界的に利用者が多いため、トラブル発生時に情報を入手しやすい。

この記事で学べること

本記事では、以下の内容を順を追って解説します。

  1. UbuntuにDockerをインストールする方法
  2. Dockerイメージの基本的な操作
  3. Dockerfileを使ったカスタムイメージの作成
  4. Ubuntuコンテナの日本語環境設定
  5. Dockerイメージの最適化と軽量化
  6. Ubuntuコンテナでのアプリ開発
  7. よくあるエラーと解決策

初心者から上級者まで活用できる内容になっていますので、ぜひ参考にしてください。

2. UbuntuでDockerをインストール

公式リポジトリを使用したDockerのインストール

Ubuntuでは、公式リポジトリを利用することで簡単にDockerをインストールできます。以下の手順に従ってセットアップを行いましょう。

1. 既存のDockerパッケージを削除

Ubuntuには、docker.io というパッケージが標準で提供されていますが、これは古いバージョンの可能性があるため、削除しておきます。

sudo apt remove docker docker-engine docker.io containerd runc

2. 必要なパッケージをインストール

インストール前に必要な依存パッケージをインストールします。

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. Docker公式リポジトリを追加

Dockerの公式GPGキーを追加し、リポジトリを設定します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Dockerのインストール

リポジトリを追加したら、Dockerをインストールします。

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. インストールの確認

Dockerが正しくインストールされたか確認するため、バージョン情報を表示してみます。

docker --version

インストール後の初期設定

1. Dockerサービスの起動と有効化

Dockerのサービスを起動し、システム起動時に自動的に実行されるように設定します。

sudo systemctl start docker
sudo systemctl enable docker

2. 非rootユーザーでDockerを使用可能にする

デフォルトでは、Dockerはrootユーザーのみが実行できるため、一般ユーザーがDockerコマンドを使えるように設定します。

sudo usermod -aG docker $USER

設定を適用するには、一度ログアウトし、再ログインしてください。

3. 動作確認

一般ユーザーの権限で hello-world コンテナを実行し、Dockerが正しく動作するか確認します。

docker run hello-world

出力に「Hello from Docker!」と表示されれば、インストールは成功です。

3. Dockerイメージの基本操作

Dockerイメージとは?

Dockerイメージは、コンテナを作成するためのテンプレートのようなものです。UbuntuベースのDockerイメージを利用することで、すぐにUbuntu環境を立ち上げることができます。

Docker HubからUbuntuイメージを取得

Docker Hubには、多くの公式Dockerイメージが登録されています。Ubuntuイメージを取得するには、以下のコマンドを実行します。

docker pull ubuntu

コンテナの起動・停止

取得したUbuntuイメージを使用して、コンテナを起動できます。

docker run -it ubuntu bash

このコマンドを実行すると、Ubuntuコンテナのシェルが開き、コンテナ内で操作が可能になります。

コンテナを一覧表示

起動中のコンテナを確認するには、次のコマンドを使用します。

docker ps

すべてのコンテナ(停止中も含む)を表示するには、-a オプションをつけます。

docker ps -a

コンテナの停止と削除

実行中のコンテナを停止するには、以下のコマンドを使用します。

docker stop [コンテナIDまたは名前]

不要になったコンテナを削除するには、次のコマンドを実行します。

docker rm [コンテナIDまたは名前]

Dockerイメージの管理

ダウンロード済みのDockerイメージを一覧表示するには、以下のコマンドを使います。

docker images

不要なイメージを削除するには、次のコマンドを使用します。

docker rmi [イメージID]

4. Dockerfileを使ったカスタムイメージの作成

Dockerfileとは?

Dockerfileとは、Dockerイメージを作成するための設定ファイルです。Dockerfileに記述された指示に従って、カスタマイズされたDockerイメージを作成できます。これにより、開発環境を統一したり、必要なパッケージを含んだイメージを作成したりできます。

Dockerfileの基本構文

Dockerfileには、主に以下のような命令を記述します。

コマンド説明
FROMベースとなるイメージを指定
RUNコマンドを実行してイメージを構築
COPYファイルをコンテナにコピー
WORKDIR作業ディレクトリを設定
CMDコンテナ起動時に実行するデフォルトコマンド
ENTRYPOINTコンテナ実行時のエントリーポイント

Ubuntuベースのカスタムイメージ作成

以下の手順で、UbuntuベースのカスタムDockerイメージを作成してみましょう。

1. 作業ディレクトリを作成

まず、新しいプロジェクトディレクトリを作成し、移動します。

mkdir my-ubuntu-image
cd my-ubuntu-image

2. Dockerfileを作成

ディレクトリ内に Dockerfile を作成し、以下の内容を記述します。

# ベースとなるUbuntuの公式イメージ
FROM ubuntu:latest

# メンテナー情報(任意)
LABEL maintainer="your-email@example.com"

# パッケージリストを更新し、基本的なツールをインストール
RUN apt update && apt install -y curl vim git

# 作業ディレクトリを設定
WORKDIR /workspace

# コンテナ起動時に実行するコマンド
CMD ["bash"]

3. Dockerイメージをビルド

作成した Dockerfile を使って、カスタムイメージをビルドします。

docker build -t my-ubuntu-image .

-t オプションでイメージ名を指定しています。

4. イメージを確認

ビルドされたイメージを確認するには、以下のコマンドを実行します。

docker images

5. コンテナを起動

作成したカスタムイメージからコンテナを起動します。

docker run -it my-ubuntu-image

このコンテナには curlvim などのツールがインストールされているはずです。

5. Ubuntuコンテナの日本語環境設定

デフォルトのUbuntuイメージは英語環境になっており、日本語を使用するためには追加の設定が必要です。

日本語ロケールの設定

Ubuntuコンテナで日本語を表示・入力できるようにするには、日本語ロケールをインストールします。

1. 必要なパッケージのインストール

apt update
apt install -y language-pack-ja locales

2. ロケールの設定

ロケールを設定し、適用します。

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

3. 設定の反映

export LANG=ja_JP.UTF-8

日本語入力環境の構築

ターミナルで日本語を入力できるようにするには ibus-mozc を導入します。

apt install -y ibus-mozc

GUI環境を使用する場合は、以下の環境変数を追加してください。

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

GUIアプリケーションの利用

Dockerコンテナ内でGUIアプリを利用するには、Xサーバーを使用する方法があります。

ホスト側でXサーバーをインストールし、X11を有効にしてコンテナを実行します。

docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image

6. Dockerイメージの最適化と軽量化

Dockerイメージを最適化することで、コンテナの起動速度を向上させ、ストレージの使用量を削減できます。ここでは、軽量なイメージを作成するための手法を紹介します。

軽量なUbuntuベースのイメージを作る方法

デフォルトの ubuntu:latest はサイズが大きいため、より軽量な ubuntu:minimal などを使うとコンテナサイズを抑えられます。

FROM ubuntu:minimal

また、Ubuntuよりもはるかに軽量な Alpine Linux を使用する方法もあります。

FROM alpine:latest
RUN apk add --no-cache bash curl

この方法を利用すると、イメージのサイズを数百MB単位で削減できます。

不要なファイルを削除してイメージサイズを減らす

apt-get でインストールした不要なキャッシュを削除することで、イメージサイズを縮小できます。

RUN apt update && apt install -y curl vim     && apt clean     && rm -rf /var/lib/apt/lists/*

この rm -rf /var/lib/apt/lists/* を加えることで、パッケージリストを削除し、無駄なデータを削減できます。

マルチステージビルドの活用

例えば、ビルド時のみコンパイラを使い、最終イメージを軽量にできます。

FROM ubuntu as builder
RUN apt update && apt install -y gcc

FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc

この方法を使うことで、開発ツールを最終イメージに含めず、軽量な環境を作ることができます。

7. 実践:Ubuntuコンテナでアプリ開発

ここでは、Ubuntuコンテナを使って実際に開発環境を構築する方法を紹介します。

Python開発環境のセットアップ

Ubuntuコンテナ内でPython開発環境をセットアップするには、以下のDockerfileを作成します。

FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]

イメージをビルドし、コンテナを起動します。

docker build -t python-dev .
docker run -it python-dev

この環境では python3 コマンドを実行でき、スクリプトの開発やテストが可能です。

Node.js開発環境のセットアップ

Node.jsの開発環境を構築する場合は、以下のDockerfileを利用します。

FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]

同様にビルドして実行します。

docker build -t node-dev .
docker run -it node-dev

この環境では node コマンドを使って、JavaScriptの実行やアプリ開発が可能になります。

8. FAQ・トラブルシューティング

Dockerを使用していると、さまざまなトラブルに遭遇することがあります。ここでは、よくある質問とその解決策を紹介します。

Dockerと仮想マシンの違い

  • Docker: ホストOSのカーネルを共有するため軽量であり、コンテナの起動が高速。
  • 仮想マシン(VM): 独立したOSを持つため、リソースの消費が多く、起動も遅い。

Dockerはリソースの最適化に優れているため、開発環境やデプロイの自動化に適しています。

Ubuntuコンテナのデータ永続化

コンテナが停止してもデータを保持するには、ボリュームマウントを利用します。

docker run -v my_data:/data ubuntu

コンテナを削除しても my_data ボリュームにデータが保存され、再利用できます。

よくあるエラーと解決策

1. permission denied エラー

Dockerを実行しようとした際に permission denied が表示される場合、現在のユーザーが docker グループに属していない可能性があります。

以下のコマンドを実行し、ユーザーを docker グループに追加してください。

sudo usermod -aG docker $USER

適用後、一度ログアウトして再ログインする必要があります。

2. image not found エラー

Docker Hubからイメージが削除されている場合、新しいタグを指定して取得してください。

docker pull ubuntu:22.04

特定のバージョンを明示することで、適切なイメージを取得できます。