初めに
この記事ではざっくりLaravel×Dockerの環境構築手順についてご紹介していきます。
Dockerとは
そもそもDockerとは?
構築前に軽くDockerがどういうものなのか理解しておいた方が良いかと思うので簡単にまとめてみました。
以下の記事で基本的なことが紹介されてます。
Docker
簡単に言うと、コンテナ型の仮想サーバー
。
ポイントとしては、完全に仮想化されているわけではなく、コンテナ型
という点。
このコンテナ
はサーバのカーネル(OSの中核となる部分)
を使って、プロセスやユーザなどをサーバごとに隔離
することで、あたかも別のマシンがOS上に動いているかのよう
に動かすことができる仕組みになってます。
Dockerについて調べてると、コンテナ
、イメージ
、ビルド
、DockerHub
等の単語を目にするかと思います。
それぞれの役割は以下のような感じです。
コンテナ
Dockerイメージ
を元に作成されたWebサーバやDBサーバが動く仮想環境
のこと。
イメージ
コンテナを立ち上げるのに必要な設定ファイル
のようなもの。
イメージには、コンテナ立ち上げに必要なミドルウェア(アプリケーションが要求する特定の機能を提供するもの)
などの設定や実行コマンド
がまとめられている。
その為、通常であればソフトウェアをインストール、初期設定、諸々詳細設定をする流れになるところ、イメージを使うことでそれらの各作業を省略することができる。
DockerHub
Dockerのイメージが公開されているサイト。
フリーのソフトウェアのイメージから、個人で作成したイメージまで公開されている。
コンテナからDockerHubにアクセスしてイメージをダウンロード
することにより、サーバやDBの設定をあまり気にすることなくソフトウェアを使ったシステムを構築することが可能。
build(ビルド)
Dockerfile
というファイルで指定した命令に従って、Dockerイメージがビルド(作成)される。
Dockerのメリット
・システムの導入が高速化
OSは既に共有して利用しているため毎回設定する必要がなく、システムを構築するために必要となる最低限のプログラムだけインストールすればOK。
・起動時間の短縮化と多くの処理実装が可能
OSは既に立ち上がっているため、その分サーバの起動時間を短縮化。
リソースの使用量が少なく済むためサーバへの負荷が低く、1度に多くのプログラム処理を実装することが可能
・コンテナ設定の再利用が可能
1度作成したコンテナは、Dockerイメージを作成して他のコンテナへ適用することにより再利用が可能。
環境構築
参考記事を元に以下の手順で進めていくとDocker環境を構築できます。
1.Laravelの環境構築をDockerで簡単に構築する方法【Mac / M1Mac対応】
2.Dockerをインストールする
3.デスクトップにプロジェクトフォルダを作る
4.ファイルを新規作成する
5.ファイルにコードを書き込む
6.Docker上でコンテナを立ち上げる
7.Laravelをインストールする
8.Laravelの基本設定
9.環境構築終了
1~4、7~9に関しては省略するので参考記事の通り進めてみてください。
こちらの記事ではDockerfileとdocker-compose.ymlの内容のみ記載しておきます。
ファイルにコード書き込む
自分の場合は以下のような内容でコードを書き込みました。
・Dockerfile
AWSCLIを使う機会があったのでawscliv2のインストールを書き込んでいますが、Laravelを起動させるという点ではここは無くても大丈夫です。
それ以外は最低限必要かなと思います。
# ベースイメージを指定
FROM php:7.4-fpm-buster
# コマンドのシェル形式に使用されるデフォルトのシェルをオーバーライド
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
# 環境変数設定
ENV COMPOSER_ALLOW_SUPERUSER=1 \
COMPOSER_HOME=/composer
# composerインストール
COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer
# Laravelの実行に必要なライブラリのインストール
RUN apt-get update && \
apt-get -y install git unzip libzip-dev libicu-dev libonig-dev \
zlib1g-dev \
libjpeg-dev \
libpng-dev \
libfreetype6-dev \
libjpeg62-turbo-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# PHP拡張ライブラリのインストール
RUN docker-php-ext-install pdo_mysql zip bcmath
# PHP拡張用モジュールの設定 GDのfreetypeとjpegを有効
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
# PHP拡張モジュールのGD(画像変換モジュール)をインストール
RUN docker-php-ext-install -j$(nproc) gd
RUN pwd
# PHP設定ファイルを設置
COPY ./php.ini /usr/local/etc/php/php.ini
RUN pwd
# sshキーを設置
RUN mkdir /root/.ssh
COPY .ssh/ /root/.ssh/
RUN pwd
WORKDIR /var/www/html
# ファイルダウンロード
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# 解凍実施
RUN unzip awscliv2.zip
# インストール
RUN ./aws/install
RUN pwd
WORKDIR /work
・docker-compose.yml
docker-compose.ymlの書き方については以下の記事が参考になります。
version: "3.8"
volumes:
db-store:
services:
# dbコンテナ
db:
# ダウンロードするイメージ
image: mysql:8.0
# 接続ポート
ports:
- 33060:3306
# A:B Aをコンテナ上のBにマウント
volumes:
- db-store:/var/lib/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
# 環境変数設定
environment:
- MYSQL_DATABASE=sample_db
- MYSQL_USER=sample
- MYSQL_PASSWORD=?????
- MYSQL_ROOT_PASSWORD=?????
- TZ=Asia/Tokyo
# appコンテナ
app:
# Dockerfileのあるディレクトリのパスを指定
build: ./docker/php
volumes:
- ./backend:/work
# appコンテナをdbコンテナに依存させる
depends_on:
- db
# webコンテナ
web:
image: nginx:1.18-alpine
ports:
- 8000:80
volumes:
- ./backend:/work
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
# コマンドを実行する作業ディレクトリ指定
working_dir: /work
depends_on:
- app
# phpMyAdminコンテナ
phpmyadmin:
image: phpmyadmin/phpmyadmin:5
# コンテナ名
container_name: phpmyadmin
# dbコンテナを繋げる
links:
- db
ports:
- 8080:80
volumes:
- ./docker/phpmyadmin/sessions:/sessions
#AWS CLIコンテナ
aws-cli-container:
build: ./docker/php
container_name: awscli-container
volumes:
- .:/workdir
# .envが配置されてるパス
env_file:
- ./backend/.env
environment:
AWS_DEFAULT_REGION: ap-northeast-1
AWS_DEFAULT_OUTPUT: json
コンテナ立ち上げ
Dockerfileとdocker-compose.ymlの書き込みができたらビルドしてコンテナを立ち上げます。
doneと表示されれば成功です!
$ docker build # コンテナ作成
$ docker-compose up -d # 作成したコンテナを起動