はじめに
業務でLaravelの開発環境をdocker-composeで構築することがありました。
しかし詳しいことは全く知らなかったので、自分で1から作ってみようと思います。
環境はWEB(nginx)、PHP、DB(MySQL)サーバーの構成となります。
目次
1. docker-compose.ymlについて
2. 必要なディレクトリ、ファイルの準備 → 今回はここまで
3. nginxコンテナの作成
4. PHPコンテナの作成
5. Laravelプロジェクトの作成
6. MySQLコンテナの作成
docker-compose.ymlについて
docker-composeで複数のコンテナを起動する場合、Dockerfile(コンテナを起動するのに必要なDockerイメージの設計図となるもの)とは別に、複数のコンテナを定義するdocker-compose.ymlが必要となります。
version: "3"
service:
web:
container_name: "web"
build: "./web/Dockerfile"
ports:
- "8080:80"
volumes:
- "../src:/var/www/html"
php:
...
定義されている各項目について
| 項目 | 説明 |
|---|---|
| version | docker-composeのバージョンを指定 |
| service | 配下にコンテナを定義(上記の例で言うとweb、phpがコンテナに当たる) |
| container_name | コンテナ名を定義 |
| build | -コンテナ作成に使用するDockerfileのパスを指定 -コンテナ作成に DockerHubのイメージを使う場合はimage:イメージ名と定義 |
| ports | -ホストとコンテナのポート番号の対応付け(ポートフォワーディング) - :を挟んで左がホスト側のポート、右がコンテナ側のポート |
| volumes | -ホストとコンテナのvolumeをバインド- :を挟んで左がホスト側のパス、右がコンテナ側のパス |
- 補足
- パスについて
- ホスト側のパスを定義する際は、誰が環境構築しても同じものができるように、相対パスで定義する
-
volumeについて-
volumeとは、コンテナにおいて生成されるデータを永続的に保持する目的で利用される仕組み(ホスト側に保存される) - コンテナに保存したデータはコンテナを破棄すると消えるが、
volumeに保存したデータはコンテナを削除しても残るので再利用できる
-
- パスについて
必要なディレクトリ、ファイルの準備
では、環境構築に必要なディレクトリ、ファイルを準備してプロジェクトを作成していきます。
1. ディレクトリを作成
プロジェクトディレクトリと、その中にdocker-composeに関するファイルを保存するディレクトリを用意します。
$ mkdir laravel
$ cd laravel
$ mkdir docker
2. docker-compose.ymlを作成
$ cd docker
$ touch docker-compose.yml
3. nginxコンテナ作成に必要なファイルを作成
nginxコンテナを作成するのに必要なDockerfileと、nginxの設定ファイルを用意します。(dockerディレクトリの配下)
$ mkdir web
$ cd web
$ touch Dockerfile
$ touch default.conf
4. PHPコンテナ作成に必要なファイルを作成
PHPコンテナを作成するのに必要なDockerfileと、PHPの設定ファイルを用意します。(dockerディレクトリの配下)
$ cd ../
$ mkdir php
$ cd php
$ touch Dockerfile
$ touch php.ini
5. MySQLコンテナ作成に必要なファイルを作成
MySQLコンテナを作成するのに必要なDockerfileと、MySQLの設定ファイルを用意します。(dockerディレクトリの配下)
$ cd ../
$ mkdir db
$ cd db
$ touch Dockerfile
$ touch my.conf
6. 最終的なフォルダ構成
laravel
├── 後ほど作成するLaravelプロジェクト
└── docker
├── docker-compose.yml
├── web
│ ├── Dockerfile
│ └── default.conf
└── php
│ ├── Dockerfile
│ ├── php.ini
└── db
├── Dockerfile
└── my.conf
まとめ
以上で環境構築に必要なディレクトリとファイルの準備ができました!
次はnginxから順にコンテナを作成していきます!