はじめに
業務で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
から順にコンテナを作成していきます!