LoginSignup
11
13

More than 1 year has passed since last update.

MacでLaravel × Docker 環境構築

Posted at

初めに

この記事ではざっくり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 # 作成したコンテナを起動

デスクトップのGUIの方から確認すると以下のような感じで立ち上がってるのがわかります。
スクリーンショット 2022-04-07 3.36.06.png

11
13
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
11
13