ウェブサイト検索

DockerfileとDocker Compose:違いと使用例の理解


Dockerはコンテナ化に革命をもたらし、コンテナ化されたアプリケーションの構築と管理のための強力なツールを提供しています。Dockerの2つのコア概念はDockerfileDocker Composeです。どちらも重要ですが、異なる目的を果たします。Dockerfileは単一のコンテナイメージを定義するために使用され、一方Docker Composeはマルチコンテナアプリケーションの管理を簡素化します。

このチュートリアルでは、次のことを学びます:

  • DockerfileとDocker Composeの根本的な違い
  • Dockerfileを使用する時とDocker Composeを使用する時
  • 両方のアプローチの実践的な例

DockerfileとDocker Compose

Dockerfileは、Dockerイメージを構築するための一連の命令を含むスクリプトです。ベースイメージ、依存関係、設定、および環境をセットアップするために必要なコマンドを指定します。

一方、Docker Composeは、docker-compose.ymlファイルを使用して、マルチコンテナのDockerアプリケーションを定義し実行するツールです。これは、ネットワーク、ボリューム、環境変数を使用して複数のコンテナを調整するのに役立ちます。

注意:以下の例は完全に機能するアプリケーションではありません。これらはDockerfileとDocker Composeの概念を理解するための基本的な骨組みとして役立ちます。

例1:Dockerfileを使用したシンプルなウェブアプリケーションの作成

この例では、Dockerfileを使用してPythonベースのFlaskウェブアプリケーションを作成します。

  1. FlaskアプリケーションのためのDockerfile</strong>: 以下は、Python FlaskアプリのシンプルなDockerfileです。

    Use an official Python runtime as base image
    FROM python:3.9
    
    Set the working directory
    WORKDIR /app
    
    Copy application files
    COPY . .
    
    Install dependencies
    RUN pip install -r requirements.txt
    
    Define the command to run the app
    CMD ["python", "app.py"]
    
  2. このDockerfileはPythonイメージを取得し、環境を設定し、アプリケーションファイルをコピーし、依存関係をインストールし、アプリケーションを実行します。

例2: 複数のコンテナを管理するためのDocker Composeの使用

では、Docker Composeを使用してPostgreSQLデータベースを持つFlaskアプリケーションを管理する方法を見てみましょう。

  1. FlaskとPostgreSQLのためのdocker-compose.yml</strong>: 以下はFlaskアプリとPostgreSQLデータベースのためのDocker Compose設定です。

    version: '3.8'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        depends_on:
          - db
      db:
        image: postgres:13
        environment:
          POSTGRES_USER: user
          POSTGRES_PASSWORD: password
          POSTGRES_DB: mydatabase
    

    このセットアップは二つのサービスを定義します:

    • ウェブ: これはFlaskアプリケーションサービスです。build: .ディレクティブは、Docker Composeに同じディレクトリに存在するDockerfileを使用してイメージをビルドするよう指示します。これは、環境の設定、依存関係のインストール、アプリケーションの実行方法の定義を含む、Dockerfileで定義されたすべてのステップに従うことを意味します。
    • db: これはPostgreSQLデータベースサービスです。カスタムイメージを構築する代わりに、Docker Hubから公式のPostgreSQLイメージを取得します。環境変数はデータベースユーザー、パスワード、およびデータベース名を設定します。

    depends_on<ディレクティブは、データベースコンテナが起動した後にのみウェブサービスが開始されることを保証します。<\/li><\/ol>

    結論<\/h2>

    DockerfileとDocker Composeの違いを理解することは、効率的なコンテナ化アプリケーションのデプロイにとって重要です。イメージを定義してビルドする必要がある場合はDockerfileを使用し、ネットワーキングと依存関係を持つ複数のコンテナをオーケストレーションするためにDocker Composeを使用します。