Ubuntu で Docker コンテナを作成する方法

DockerBeginner
オンラインで実践に進む

はじめに

この包括的な Docker チュートリアルは、開発者と IT 専門家にコンテナ技術に関する重要な知識を提供します。Ubuntu で Docker をセットアップする方法、コアコンセプトを理解する方法、そして異なるコンピューティング環境間で一貫したアプリケーションデプロイメントのためにコンテナ化を活用する方法を学びます。

Docker の基礎

Docker 技術の概要

Docker は、ソフトウェアのデプロイと仮想化を革新する強力なコンテナ技術プラットフォームです。オープンソースツールとして、Docker は開発者が異なるコンピューティング環境間でアプリケーションをパッケージ化、配布、実行を確実に実現します。

Docker のコアコンセプト

Docker とは何か?

Docker は、開発者がコンテナを使用してアプリケーションを作成、デプロイ、実行できる軽量な仮想化技術です。従来の仮想マシンとは異なり、コンテナはホストシステムのカーネルを共有するため、より効率的で起動が高速です。

コンテナアーキテクチャ

graph TD
    A[Docker Engine] --> B[Container Runtime]
    A --> C[Docker Images]
    B --> D[Application Container]
    C --> D

Docker の主要コンポーネント

コンポーネント 説明 役割
Docker Engine コアランタイム環境 コンテナのライフサイクルを管理
Docker Image 読み取り専用テンプレート コンテナの設定を定義
Docker Container 実行可能なインスタンス アプリケーションを実行

Ubuntu 22.04 へのインストール

## パッケージインデックスを更新
sudo apt update

## 依存関係をインストール
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Docker の公式 GPG キーを追加
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## 安定版リポジトリを設定
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Docker Engine をインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

基本的な Docker コマンド

## Docker のバージョンを確認
docker --version

## Docker のインストールを確認
docker run hello-world

## 実行中のコンテナ一覧を表示
docker ps

## 全てのコンテナ一覧を表示
docker ps -a

Docker の利点

Docker は、現代のソフトウェア開発に大きなメリットを提供します。

  • 開発環境と本番環境で一貫した環境
  • アプリケーションのデプロイを高速化
  • リソースの利用効率向上
  • 依存関係の管理を簡素化
  • スケーラビリティと移植性の向上

Docker イメージの作成

Docker イメージについて

Docker イメージは、コンテナを作成するために使用される読み取り専用のテンプレートです。アプリケーションを実行するために必要なアプリケーションコード、ランタイム、ライブラリ、環境変数、および設定ファイルを含んでいます。

Dockerfile の基礎

Dockerfile は、Docker イメージを構築するための手順を含むテキストドキュメントです。各手順はイメージに新しいレイヤーを作成します。

Dockerfile の構造

graph TD
    A[ベースイメージ] --> B[依存関係のインストール]
    B --> C[アプリケーションコードのコピー]
    C --> D[環境変数の設定]
    D --> E[起動コマンドの定義]

一般的な Dockerfile の指示

指示 目的
FROM ベースイメージを指定 FROM ubuntu:22.04
RUN コマンドを実行 RUN apt-get update
COPY ファイルをイメージにコピー COPY ./app /application
WORKDIR 作業ディレクトリを設定 WORKDIR /application
CMD デフォルトコマンドを定義 CMD ["python", "app.py"]

シンプルな Python Web アプリケーションイメージの作成

サンプル Dockerfile

## 公式 Python ランタイムをベースイメージとして使用
FROM python:3.9-slim

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

## requirements ファイルをコピー
COPY requirements.txt .

## 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt

## アプリケーションコードをコピー
COPY . .

## ポートを公開
EXPOSE 5000

## 起動コマンドを定義
CMD ["python", "app.py"]

Docker イメージの構築

## タグ付きイメージをビルド
docker build -t hello-world-app .

## ローカルイメージ一覧
docker images

## 作成したイメージを実行
docker run -p 5000:5000 hello-world-app

イメージ管理コマンド

## 特定のイメージを削除
docker rmi hello-world-app

## 使用されていないイメージをすべて削除
docker image prune

## Docker Hub からイメージをプル
docker pull ubuntu:22.04

最善のプラクティス

  • 最小限のベースイメージを使用する
  • レイヤー数を最小限にする
  • 不要なパッケージのインストールを避ける
  • マルチステージビルドを使用して、より小さなイメージを作成する
  • ビルドキャッシュを効率的に活用する

コンテナの管理

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

Docker コンテナは、作成から終了まで、複数の状態を持つ定義済みのライフサイクルを持っています。これらの状態を理解することは、効果的なコンテナ管理に不可欠です。

stateDiagram-v2
    [*] --> Created
    Created --> Running
    Running --> Paused
    Paused --> Running
    Running --> Stopped
    Stopped --> Removed
    Removed --> [*]

基本的なコンテナ操作

コンテナ管理コマンド

コマンド 機能
docker create コンテナを作成 docker create nginx
docker start コンテナを起動 docker start container_id
docker stop 実行中のコンテナを停止 docker stop container_id
docker restart コンテナを再起動 docker restart container_id
docker rm コンテナを削除 docker rm container_id

コンテナの実行

## コンテナをフォアグラウンドで実行
docker run nginx

## コンテナをバックグラウンドで実行
docker run -d nginx

## ポートマッピングでコンテナを実行
docker run -p 8080:80 nginx

## カスタム名でコンテナを実行
docker run --name web-server nginx

コンテナの検査と監視

## 実行中のコンテナ一覧
docker ps

## 全てのコンテナ一覧
docker ps -a

## コンテナのログを表示
docker logs container_id

## コンテナの詳細を検査
docker inspect container_id

## コンテナのリソース使用状況を監視
docker stats

コンテナのネットワーク

## Docker ネットワーク一覧
docker network ls

## カスタムネットワークを作成
docker network create mynetwork

## コンテナをネットワークに接続
docker network connect mynetwork container_id

高度なコンテナ管理

コンテナのリソース制限

## CPU とメモリの制限
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  nginx

コンテナのスケーリング

## 複数のコンテナインスタンスを作成
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx

コンテナのデプロイ戦略

永続的なデータ管理

## ボリュームを作成
docker volume create myvolume

## コンテナにボリュームをマウント
docker run -v myvolume:/app/data nginx

環境設定

## 環境変数を設定
docker run -e DATABASE_URL=localhost nginx

まとめ

Docker は、軽量で移植可能なコンテナによってアプリケーションのデプロイを簡素化し、ソフトウェア開発を革新します。Docker の主要コンポーネント、インストール手順、基本コマンドを習得することで、開発者は、最小限のオーバーヘッドと最大限の柔軟性で、より効率的でスケーラブル、再現性の高いソフトウェア環境を作成できます。