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

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

はじめに

Docker は、開発者と IT プロフェッショナルがアプリケーションを管理およびデプロイする方法を革新した強力なコンテナ化プラットフォームです。このチュートリアルでは、Linux システム上で Docker コンテナを作成するプロセスを、Docker のインストールと設定から、独自のカスタム コンテナのビルドと実行まで、段階的に解説します。

Docker コンテナの理解

Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するための、人気のオープンソースプラットフォームです。コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。

Docker コンテナとは?

Docker コンテナは、コードとその依存関係をすべてパッケージ化し、アプリケーションを迅速かつ確実に異なるコンピューティング環境間で実行できるようにする標準化されたソフトウェアユニットです。コンテナは Docker イメージから作成されます。Docker イメージは、コンテナを作成するための設計図です。Docker コンテナは、互いに、そしてホストオペレーティングシステムから隔離されており、一貫性があり予測可能な実行環境を提供します。

Docker コンテナの利点

  • 移植性: Docker コンテナは、基盤となるインフラストラクチャやオペレーティングシステムに関係なく、Docker がインストールされている任意のコンピュータ上で実行できます。
  • 一貫性: Docker コンテナは、環境に関係なく、アプリケーションが同じ方法で実行されることを保証します。
  • 効率性: Docker コンテナは軽量で、ホストオペレーティングシステムのカーネルを共有するため、仮想マシンよりも少ないリソースを使用します。
  • スケーラビリティ: Docker コンテナは、簡単にスケールアップまたはスケールダウンでき、アプリケーションの管理とデプロイを容易にします。
  • 隔離性: Docker コンテナは、互いに、そしてホストオペレーティングシステムから隔離されているため、セキュリティと安定性を向上させます。

Docker コンテナのアーキテクチャ

graph TD
    A[Docker ホスト] --> B[Docker エンジン]
    B --> C[Docker イメージ]
    B --> D[Docker コンテナ]
    D --> E[アプリケーション]
    D --> F[ライブラリ]
    D --> G[システムツール]

Docker コンテナのライフサイクル

  1. ビルド: Dockerfile から Docker イメージを作成します。
  2. 配布: Docker イメージを Docker Hub などのレジストリに保存します。
  3. 実行: イメージから Docker コンテナを作成し、実行します。

Docker コンテナのユースケース

  • マイクロサービス: Docker コンテナは、マイクロサービスベースのアプリケーションの構築とデプロイに適しています。
  • 継続的インテグレーションとデプロイ: Docker コンテナは、アプリケーションのビルド、テスト、デプロイを自動化するために使用できます。
  • クラウドホスティング: Docker コンテナは、AWS、Azure、Google Cloud などのクラウドプラットフォームに簡単にデプロイおよびスケールできます。
  • 機械学習とデータサイエンス: Docker コンテナは、機械学習モデルやデータ処理パイプラインのパッケージ化とデプロイに使用できます。

Linux 上の Docker のインストールと設定

Ubuntu 22.04 での Docker のインストール

  1. パッケージインデックスを更新します。
sudo apt-get update
  1. apt が HTTPS を介したリポジトリを使用できるように必要なパッケージをインストールします。
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. 公式 Docker GPG キーを追加します。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Docker リポジトリを設定します。
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Docker エンジン、containerd、Docker Compose をインストールします。
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Docker の設定

  1. Docker のインストールを確認します。
sudo docker run hello-world
  1. sudo なしで Docker コマンドを実行できるように、ユーザーを Docker グループに追加します。
sudo usermod -aG docker $USER
  1. システム起動時に Docker が自動的に起動するように設定します。
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
  1. (オプション) 別のストレージドライバを使用するように Docker を設定します。
sudo vi /etc/docker/daemon.json

以下の設定を追加してファイルを保存します。

{
  "storage-driver": "overlay2"
}
  1. Docker サービスを再起動します。
sudo systemctl restart docker

Docker Compose のインストール

  1. Docker Compose の最新バージョンをダウンロードします。
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. バイナリを実行可能にします。
sudo chmod +x /usr/local/bin/docker-compose
  1. Docker Compose のインストールを確認します。
docker-compose --version

Docker コンテナの構築と実行

Docker イメージの構築

  1. プロジェクト用の新しいディレクトリを作成します。
mkdir my-docker-project
cd my-docker-project
  1. プロジェクトディレクトリに Dockerfile を作成します。
touch Dockerfile
  1. Dockerfile を開き、以下の内容を追加します。
## ベースイメージとして公式の Ubuntu 22.04 イメージを使用
FROM ubuntu:22.04

## パッケージインデックスを更新し、必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
    nginx \
    curl \
    && rm -rf /var/lib/apt/lists/*

## デフォルトの Nginx 設定ファイルのコピー
COPY default.conf /etc/nginx/conf.d/

## Nginx のポート 80 を公開
EXPOSE 80

## コンテナ起動時に Nginx を開始
CMD ["nginx", "-g", "daemon off;"]
  1. デフォルトの Nginx 設定ファイル default.conf を作成します。
server {
    listen 80;
    server_name example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
  1. Docker イメージを構築します。
docker build -t my-nginx-app .

Docker コンテナの実行

  1. Docker コンテナを実行します。
docker run -d --name my-nginx-app -p 80:80 my-nginx-app
  1. コンテナが実行されていることを確認します。
docker ps
  1. コンテナ内で実行されている Nginx Web サーバーにアクセスします。
curl http://localhost

Docker コンテナの管理

  1. 実行中のコンテナを停止します。
docker stop my-nginx-app
  1. 停止したコンテナを起動します。
docker start my-nginx-app
  1. コンテナを削除します。
docker rm my-nginx-app
  1. Docker イメージを削除します。
docker rmi my-nginx-app

Docker Compose

  1. docker-compose.yml ファイルを作成します。
version: '3'
services:
  web:
    build: .
    ports:
     - "80:80"
  1. Docker Compose アプリケーションを構築して実行します。
docker-compose up -d
  1. Docker Compose アプリケーションを停止して削除します。
docker-compose down

まとめ

このチュートリアルを終了すると、Docker とその機能についての深い理解と、Linux システム上で Docker コンテナを作成、管理、実行する実用的なスキルを習得しているでしょう。この知識は、アプリケーションのデプロイを効率化し、スケーラビリティを向上させ、全体的な DevOps ワークフローを強化するのに役立ちます。