はじめに
Docker は、アプリケーションのデプロイと管理を簡素化する、広く採用されているコンテナ化プラットフォームです。このチュートリアルでは、Docker を使用してウェブサーバーをデプロイする方法を学び、コンテナ化の利点を理解し、Docker 開発環境をセットアップします。
Docker は、アプリケーションのデプロイと管理を簡素化する、広く採用されているコンテナ化プラットフォームです。このチュートリアルでは、Docker を使用してウェブサーバーをデプロイする方法を学び、コンテナ化の利点を理解し、Docker 開発環境をセットアップします。
Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行できるようにするオープンソースプラットフォームです。コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なパッケージです。Docker は、アプリケーションをパッケージ化および配布するための一貫性と信頼性を提供し、ソフトウェアの開発、テスト、デプロイを容易にします。
Docker アーキテクチャは、以下の主要なコンポーネントで構成されています。
Docker を開始するには、システムに Docker エンジンをインストールする必要があります。インストールプロセスはオペレーティングシステムによって異なりますが、通常、公式 Docker ウェブサイトで手順を見つけることができます。
Docker をインストールしたら、アプリケーションの構築と実行に使用できます。Docker を使用して Nginx ウェブサーバーを実行する簡単な例を次に示します。
## Docker レジストリから Nginx イメージをプルする
docker pull nginx
## Nginx コンテナを実行する
docker run -d -p 80:80 --name my-nginx nginx
このコマンドは、Docker レジストリから Nginx イメージをプルし、そのイメージに基づいて新しいコンテナを実行し、ホストのポート 80 をコンテナのポート 80 に公開します。
Docker 開発環境をセットアップするには、まず Docker エンジンをシステムにインストールする必要があります。Ubuntu 22.04 でのインストール方法を以下に示します。
## パッケージインデックスを更新する
sudo apt-get update
## apt が HTTPS 経由のリポジトリを使用できるようにするパッケージをインストールする
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
## 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
## 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
## Docker Engine、containerd、および Docker Compose をインストールする
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker のインストール後、開発環境向けに設定できます。一般的な設定を以下に示します。
これらの設定を示す Docker Compose ファイルの例を次に示します。
version: "3"
services:
web:
build:
context: .
args:
- ENV=development
ports:
- 8080:80
volumes:
- ./app:/var/www/html
environment:
- DB_HOST=database
database:
image: mysql:5.7
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
db-data:
この Docker Compose ファイルは、次の設定でウェブサービスとデータベースサービスをセットアップします。
ENV=development が使用されます。./app ディレクトリをコンテナの /var/www/html ディレクトリにマウントします。これにより、ホスト上でアプリケーションコードを直接編集できます。DB_HOST 環境変数を使用してデータベースにアクセスできます。db-data を使用してデータベースデータを永続化します。開発環境がセットアップできたら、Docker コマンドを使用してコンテナを管理できます。一般的なコマンドを以下に示します。
docker run: 新しいコンテナを起動するdocker stop: 実行中のコンテナを停止するdocker rm: コンテナを削除するdocker logs: コンテナのログを表示するdocker exec: 実行中のコンテナ内でコマンドを実行するたとえば、上記の Docker Compose ファイルからウェブサービスを起動するには、次のように実行できます。
docker-compose up -d web
これにより、ウェブサービスがデタッチモードで起動され、ターミナルを継続して使用できます。
Docker を用いて Web サーバーをデプロイするには、最初に Dockerfile を作成する必要があります。Dockerfile は、Docker イメージを構築するための指示を含むテキストファイルです。シンプルな Nginx Web サーバーのための Dockerfile の例を次に示します。
## 公式 Nginx イメージをベースイメージとして使用
FROM nginx:latest
## デフォルトの Nginx 設定ファイルをコピー
COPY default.conf /etc/nginx/conf.d/default.conf
## Web アプリケーションコードをコンテナにコピー
COPY app/ /usr/share/nginx/html/
## HTTP トラフィックのためにポート 80 を公開
EXPOSE 80
## Nginx サーバーを起動
CMD ["nginx", "-g", "daemon off;"]
この Dockerfile は以下の処理を行います。
Dockerfile ができたら、docker build コマンドを使用して Docker イメージを構築できます。
## Docker イメージを構築する
docker build -t my-nginx-server .
このコマンドは、現在のディレクトリにある Dockerfile を使用して、タグ my-nginx-server の Docker イメージを構築します。
イメージが構築されたら、docker run コマンドを使用してイメージに基づいてコンテナを実行できます。
## Docker コンテナを実行する
docker run -d -p 80:80 --name my-nginx-server my-nginx-server
このコマンドは以下を行います。
-d) でコンテナを実行します。-p 80:80)。my-nginx-server を割り当てます。my-nginx-server イメージを使用してコンテナを作成します。Web サーバーをスケーリングするには、Docker コンテナの複数のインスタンスを実行し、ロードバランサーを使用してトラフィックをインスタンス間で分散させることができます。Docker Compose を使用した例を次に示します。
version: "3"
services:
web:
build: .
ports:
- 80:80
deploy:
replicas: 3
load-balancer:
image: nginx:latest
ports:
- 8080:80
depends_on:
- web
configs:
- source: nginx-config
target: /etc/nginx/conf.d/default.conf
configs:
nginx-config:
file: ./nginx.conf
この Docker Compose ファイルは以下を行います。
web サービスを構築します。web サービスの 3 つのレプリカをデプロイします。web サービスインスタンスに転送する Nginx ロードバランサーサービスを実行します。Docker Compose とロードバランシングを使用することで、Web サーバーを簡単にスケーリングし、高可用性とフォールトトレランスを確保できます。
このチュートリアルを終了すると、Docker と、それを用いて Web サーバーをデプロイする方法についての確かな理解が得られます。Docker 開発環境のセットアップ、Web サーバー用の Docker コンテナの作成、デプロイ プロセスの管理を学びます。この知識は、Web アプリケーションの開発とデプロイに Docker の力を活用する上で役立ちます。