0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者でもわかるDocker入門】Docker実践編(Docker Composeを使うLarevel環境構築)

Posted at

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です。

image.png

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?