技術

Docker Composeで簡単にNginxをセットアップする方法

広告

今回はDocker composeについて解説します。docker composeコマンドを実行すれば簡単にコンテナや必要なリソースをセットアップできます。環境構築の負担を大幅に軽減できるので、ぜひ利用しましょう。

当記事の前提条件

  • Dockerのインストールが完了している
  • Dockerネットワーク
  • Dockerボリューム

本記事の内容を実際に試してみたい場合はDockerのインストール後に実施しましょう。

【Macユーザー向け】homebrewでのDockerインストール方法

復習的な内容も兼ねているDockerネットワークとDockerボリュームについては別記事で解説しているので、併せてご覧ください。

Dockerボリュームとは?コンテナのデータを永続的に保存できる仕組みを解説!

【初心者必見】Dockerのネットワークとは?デフォルトの3種類とユースケースを解説

Docker Composeとは?

Docker Composeは、複数のDockerコンテナを簡単に管理できるツールです。

これまでに解説してきた方法の場合、Dockerを使ってアプリケーションを動かすには、各コンテナを個別に起動し、設定を手動で行う必要がありました。

しかし、1つ1つのコンテナを起動し、設定するのは案外面倒なものです。そこでDocker Composeを使うと、単一のコマンドで複数のコンテナをまとめて起動・管理できます。 

具体的にはYAML形式の設定ファイル(compose.yaml)にコンテナの構成を記述し、docker composeコマンドを実行することで、記述したコンテナやネットワークの構築が実現します。

Docker ComposeでNginxをセットアップする手順

本記事はMacにDocker Composeをインストールするための手順を記載しています。

Docker composeのインストール

当記事執筆時の最新バージョンはv2.32.4でした。https://github.com/docker/compose/releasesを確認して、最新バージョンかお好きなバージョンをインストールしてください。

docker compose versionコマンドを実行し、指定したバージョンが表示されればインストール完了です。

Docker Composeファイルの作成例

以下のcompose.yamlを作成しましょう。

なお今回、nginxでwebサーバのコンテナを構築しますが、その際に自身で用意したhtmlファイルを公開してみましょう。

docker compose実行

上記のcompose.yamlとindex.htmlを同じディレクトリに配置してdocker composeを実行してみましょう。

これでnginxコンテナが起動します。

作成したコンテナの確認

 まずはターミナルで新しいタブを開き、dockerコマンドでコンテナやネットワークの様子を確認しましょう。

作成したコンテナやdocker networkの情報が表示されています。それぞれ名前はdockerとついていますね。

次にhtmlを確認してみましょう。

 作成したindex.htmlの内容が返ってきていますね。ブラウザでlocalhost:8080/index.htmlとアクセスすると大きい文字で「This page is created by docker compose」と記載されています。

削除と確認

今回docker compose upコマンドで作成したコンテナやネットワークをまとめて削除しましょう。削除するにはdocker compose downコマンドです。

コンテナやdocker networkが削除されました。

上記を全てコマンド実行する場合

 今回docker composeを使用して各リソースの作成、削除を行いました。これらを一つ一つコマンドで実行する場合はどうなるか見てみましょう。

いかがでしょうか。作成、削除それぞれ数回コマンド実行が必要ですし、docker runはオプションもたくさん必要です。作業ミスを減らすことや、繰り返し実行することを考え、docker composeを積極的に活用していきましょう。

Docker Composeで使えるディレクティブ

compose.yamlには他にも様々なディレクティブを使用できます。今回利用したものも含めて確認してみましょう。

ディレクティブ内容書き方の例
servicesコンテナサービスの定義services:
volumes共有ボリュームの定義volumes:
networksネットワークの定義networks:
image使用するDockerイメージimage: nginx:latest
以下はservices内
buildDockerfile のあるディレクトリを指定build: ./app
container_nameコンテナ名の指定container_name: my_nginx
command実行するコマンドを指定command: ["nginx", "-g", "daemon off;"]
entrypointENTRYPOINT を上書きentrypoint: /start.sh
portsホストとコンテナのポートマッピングports:
- "8080:80"
exposeコンテナ内部で公開するポートexpose:
- "3306"
environment環境変数を設定environment:
- MYSQL_ROOT_PASSWORD=root
env_file.env ファイルを読み込むenv_file: .env
networksコンテナをネットワークに接続networks:
- my_network
volumesボリュームをマウントvolumes:
- my_data:/var/lib/mysql

-技術
-