Docker Composeとは
Docker compose とは、複数のコンテナからなるサービスを構築・実行する手順を自動的にし、管理を容易にする機能です。(例えば、Laravelだとアプリケーションサーバー、ウェブサーバー、データベースサーバー)Docker compose では、compose ファイルを用意してコマンドを1回実行することで、そのファイルから設定を読み込んですべてのコンテナサービスを起動することができます。
Docker Composeを使うまでの主なステップ
・ それぞれのコンテナのDockerfile を作成します(既にあるイメージを使う場合は不要)
・ docker-compose.yml を作成し、それぞれ独立したコンテナの起動定義を行います(場合によっては構築定義も含まれる)
・ "docker-compose up" コマンドを実行してdocker-compose.yml で定義したコンテナを開始します
コンテナ構成
app、web、dbの3つのコンテナ構成の方がよろしいと思いますが今回はappとdbの2つのコンテナ構成でいきたいと思います。
docker ───app
├──000-default.conf
├──Dockerfile
├──php.ini
db
├──data
├──my.cnf
src ────
$ mkdir docker-laravel
$ cd docker-laravel
Dockerfileの作成
FROM php:7.4-apache
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite
docker-compose.ymlの作成
docker-compose.yml
version: '3'
services:
# ---------------------------------
# laravelを動かすコンテナ
# ---------------------------------
app:
ports:
- "8000:80"
build: ./docker/app
container_name: laravel_app
volumes:
- ./src:/var/www/html
# ----------------------------------
# MySQLを動かすコンテナ
# ----------------------------------
db:
image: mysql:5.7
container_name: laravel_db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
MYSQL_USER: laravel_user
MYSQL_PASSWORD: laravel_pass
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 3306:3306
その他のファイルの記述
000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/laravel/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/laravel/public>
AllowOverride All
</Directory>
</VirtualHost>
php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
my.cnf
[mysqld]
character-set-server=utf8
1、イメージの作成
$ docker-compose build
2、コンテナの起動
$ docker-compose up -d
3、コンテナ内に入る
$ docker-compose exec app bash
4、laravelのプロジェクト作成
# composer create-project --prefer-dist laravel/laravel laravel "6.18.*"
# cd laravel
# chmod 777 -R storage/
# php artisan key:generate
http://localhost:8000/ にアクセスして下の画面が表示されたらOKです。
5、データベースに接続してmigrationを行う
.env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=laravel_pass
に設定する。そしてマイグレーションを行う。
# php artisan migrate