Webアプリケーション向けにDockerを設定するには、アプリケーションとその依存関係をコンテナ化し、開発、テスト、本番環境全体で一貫した環境を確保する必要があります。ここでは、必要な要素を網羅した一般的なガイドを紹介します:
1. Dockerのインストール
まず、システムにDockerがインストールされていることを確認してください。Dockerの公式ウェブサイトから、お使いのOSに対応したDocker Desktopをダウンロードできます。Linuxでコマンドラインツールを使用する場合は、お使いのディストリビューションのパッケージマネージャー(例: sudo apt install docker.io Ubuntuの場合)。
2. コンテナを作成する Dockerfile
Dockerfile Dockerfile は、Dockerがイメージをビルドするための指示を含むテキストファイルです。これには、環境、依存関係、およびアプリケーションの実行方法が定義されます。
Node.js アプリケーション用のDockerfileの例:
# Use an official Node.js runtime as a parent image
FROM node:18-alpine
# Set the working directory in the container
WORKDIR /app
# Copy package.json and package-lock.json (or yarn.lock)
COPY package*.json ./
# Install app dependencies
RUN npm install
# Copy the rest of your application code
COPY . .
# Expose the port your application listens on
EXPOSE 3000
# Define the command to run your app
CMD [ "npm", "start" ]
一般的な Dockerfile コマンドの説明:
* FROM <image>: ビルドのベースとなるベースイメージを指定します。
* WORKDIR /app: コンテナ内の現在の作業ディレクトリを設定します。
* COPY <src> <dest>: ホストマシンからコンテナへファイルやディレクトリをコピーします。
* RUN <command>: イメージのビルドプロセス中にコマンドを実行します(例:依存関係のインストール)。
* EXPOSE <port>: 実行時にコンテナがこのポートでリスニングすることをDockerに通知します。
* CMD ["executable", "param1", "param2"]: コンテナの起動時に実行するデフォルトのコマンドを指定します。
3. Docker イメージのビルド
プロジェクトのルートディレクトリ( Dockerfile がある場所)に移動し、ビルドコマンドを実行します:
docker build -t your-app-name .
docker build: Dockerイメージを作成するコマンド。-t your-app-name: イメージに名前をタグ付けします(例:my-nodejs-app)..: ビルドコンテキスト(現在のディレクトリ)を指定し、DockerにDockerfileおよびアプリケーションファイルの場所を指定します。
4. Docker コンテナの実行
イメージのビルドが完了したら、それを基にコンテナを作成して実行できます。
docker run -p 80:3000 your-app-name
docker run: コンテナを起動するコマンド。-p 80:3000: ポートをマッピングします3000(アプリケーションがリッスンしているポート)をホストマシンのポート80にマッピングします。これにより、http://localhost.your-app-name: 実行したいDockerイメージの名前。
これで、WebアプリケーションがDockerコンテナ内で実行され、ブラウザからアクセスできるようになります。
5. マルチサービスアプリケーションにおける Docker Compose の活用
複数のサービス(Web アプリとデータベースなど)を含むアプリケーションの場合、Docker Compose は非常に有用です。Docker Compose は docker-compose.yml ファイルを使用して、すべてのサービスを定義および管理します。
PostgreSQLデータベースを使用するNode.jsアプリ用のdocker-compose.ymlの例:
version: '3.8' # Specifies the Compose file format version
services:
web:
build: . # Build the image from Dockerfile in the current directory
ports:
- "3000:3000"
volumes:
- .:/app # Mount local code for live updates (development)
environment:
DATABASE_URL: postgresql://user:password@db:5432/mydatabase
depends_on:
- db # Ensure database starts before web service
networks:
- app-network
db:
image: postgres:14-alpine # Use a pre-built PostgreSQL image
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data # Persist database data
networks:
- app-network
volumes:
db_data: # Define the named volume
networks:
app-network: # Define a custom network
Docker Composeを使用するには、プロジェクトのルートディレクトリに docker-compose.yml ファイルをプロジェクトのルートディレクトリに配置し、以下を実行します:
docker compose up -d --build
docker compose up: イメージをビルドし(--buildが使用されている場合)イメージをビルドし、サービスを開始します。-d: コンテナをデタッチモード(バックグラウンド)で実行します。
コンテナ、ネットワーク、およびボリュームを停止および削除するには:
docker compose down
この設定により、Webアプリケーション向けに再現性のある隔離された環境が提供され、開発とデプロイが大幅にスムーズになります。