Dockerfile と env-file でコンテナを設定する方法

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

はじめに

このチュートリアルでは、強力な Dockerfile と env-file の組み合わせを使用して Docker コンテナを作成および設定する方法をステップバイステップで説明します。コンテナの作成、カスタマイズ、設定、環境変数の効果的な管理方法を学びます。

Docker コンテナ入門

Docker は、開発者がアプリケーションをコンテナという一貫性と隔離された環境で構築、デプロイ、実行できるようにする、人気のオープンソースプラットフォームです。コンテナは軽量で、移植性があり、自己完結型のユニットであり、アプリケーションのコード、依存関係、ランタイムを単一のパッケージにまとめ、あらゆる環境でアプリケーションが確実に実行されるようにします。

Docker コンテナとは?

Docker コンテナは、アプリケーションのコード、依存関係、設定を単一の移植可能で自己完結型のユニットにパッケージ化する、標準化されたソフトウェアの単位です。コンテナは、開発者のローカルマシン、データセンター、クラウドなど、さまざまなコンピューティング環境で一貫して実行するように設計されています。

Docker コンテナの利点

  1. 一貫性: コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じように実行されることを保証します。
  2. スケーラビリティ: コンテナは、変化する需要に対応するために簡単にスケールアップまたはスケールダウンでき、アプリケーションの管理とデプロイを容易にします。
  3. 効率性: コンテナは軽量でホストオペレーティングシステムを共有するため、従来の仮想マシンよりも効率的です。
  4. 移植性: コンテナはさまざまなコンピューティング環境間で簡単に移動できるため、アプリケーションの開発、テスト、デプロイを容易にします。

Docker アーキテクチャ

Docker はクライアント・サーバーアーキテクチャを採用しており、Docker クライアントは Docker デーモンと通信します。Docker デーモンは、Docker コンテナの構築、実行、管理を担当します。Docker デーモンは、Docker クライアントと同じマシン上またはリモートマシン上に実行できます。

graph LR
    A[Docker クライアント] -- 通信 --> B[Docker デーモン]
    B -- 管理 --> C[Docker コンテナ]
    B -- 構築 --> D[Docker イメージ]

Docker の開始

Docker を開始するには、システムに Docker エンジンをインストールする必要があります。Docker は公式 Docker ウェブサイト (https://www.docker.com/get-started) からダウンロードしてインストールできます。インストール後、docker コマンドラインツールを使用して Docker デーモンと対話し、コンテナを管理できます。

Dockerfile によるコンテナ構築

Dockerfile は、Docker コンテナの実行の基盤となる Docker イメージを作成するための設計図です。Dockerfile は、Docker イメージの構築手順を記述したテキストファイルです。

Dockerfile の構文

Dockerfile は通常、以下の指示で構成されます。

指示 説明
FROM 構築に使用されるベースイメージを指定します。
COPY ホストからコンテナにファイルやディレクトリをコピーします。
ADD COPY と似ていますが、リモートファイルの抽出やアーカイブの解凍も可能です。
RUN 構築プロセス中にコンテナ内でコマンドを実行します。
CMD コンテナ起動時に実行されるデフォルトのコマンドを指定します。
EXPOSE コンテナが指定されたネットワークポートでリスニングすることを Docker に通知します。
ENV 環境変数を設定します。
WORKDIR 後続の RUNCMDENTRYPOINTCOPY、および ADD 指示のための作業ディレクトリを設定します。

次に、Nginx を使用したシンプルな Web サーバーを構築する例を示します。

FROM nginx:latest
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Docker イメージの構築

Dockerfile から Docker イメージを構築するには、docker build コマンドを使用します。

docker build -t my-web-server .

このコマンドは、現在のディレクトリにある Dockerfile を使用して、タグ my-web-server の新しい Docker イメージを構築します。

Docker イメージのタグ付けとプッシュ

Docker イメージを構築したら、特定のバージョンまたはリポジトリ名でタグ付けし、Docker Hub などの Docker レジストリにプッシュして、他のユーザーと共有できます。

docker tag my-web-server username/my-web-server:v1.0
docker push username/my-web-server:v1.0

これにより、my-web-server イメージにバージョン v1.0 のタグを付け、username アカウントの下の Docker Hub リポジトリにプッシュします。

env-file を使用したコンテナ設定の管理

Docker コンテナを使用する際に、コンテナが実行される環境固有の設定を管理する必要がある場合があります。この場合、--env-file オプションが便利です。

env-file とは?

env-file は、環境変数とその対応する値のリストを含むシンプルなテキストファイルです。これらの環境変数は、Docker コンテナの実行時にその動作を構成するために使用できます。

env-file の例を次に示します。

DB_HOST=mysql.example.com
DB_USER=myapp
DB_PASSWORD=secret123

Docker で env-file を使用する方法

Docker コンテナで env-file を使用するには、docker run コマンドを実行する際に --env-file オプションを渡します。

docker run --env-file ./env-file my-web-server

これにより、env-file に定義された環境変数がロードされ、コンテナで使用可能になります。

env-file を使用することの利点

env-file を使用することには、いくつかの利点があります。

  1. 懸念事項の分離: 設定をアプリケーションコードから分離することで、アプリケーション自体を変更することなく、設定をより簡単に管理および更新できます。
  2. 移植性: 同じ Docker イメージを異なる環境で使用するには、異なる env-file を使用すれば済みます。
  3. セキュリティ: データベースの認証情報など、機密情報は、Dockerfile やアプリケーションコードにハードコーディングする代わりに、env-file に保存できます。
  4. 保守性: env-file を使用すると、複数のコンテナやアプリケーションの設定を管理および更新しやすくなります。

例:Node.js アプリケーションで env-file を使用する場合

データベースに接続する Node.js アプリケーションがあるとします。データベース接続の詳細を env-file に作成し、コンテナを実行する際に --env-file オプションを使用できます。

## env-file
DB_HOST=mysql.example.com
DB_USER=myapp
DB_PASSWORD=secret123

## Dockerfile
FROM node:14
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]

## コンテナの実行
docker run --env-file ./env-file my-node-app

この例では、データベース接続情報は env-file に保存されているため、Dockerfile やアプリケーションコードを変更することなく簡単に更新できます。

まとめ

このチュートリアルを終了すると、Dockerfile と env-file を使用して Docker コンテナを構築および設定する方法をしっかりと理解しているはずです。コンテナの設定と環境変数を容易に管理できるようになり、アプリケーションがさまざまな環境で一貫性と信頼性を持って動作することを保証できます。