TOP > Column > Docker + Apache + PHP7.4 + MySQL(MariaDB) + SSL + Laravel (part2)

Docker + Apache + PHP7.4 + MySQL(MariaDB) + SSL + Laravel (part2)

2023.04.23技術

Docker + Apache + PHP7.4 + MySQL(MariaDB) + SSL + Laravel (part2)

前回の記事の続きになります。
それではお付き合いください!

Dockerfileの設置

vi ./Dockerfile
# 中身はこちら↓↓

FROM php:7.4-apache
COPY ./conf/php.ini /usr/local/etc/php
RUN touch /var/log/php_errors.log
RUN chmod 777 /var/log/php_errors.log
RUN mkdir -p /composer/vendor/bin
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

COPY ./certs/rootCA.pem /etc/ssl/certs/rootCA.pem
ENV CURL_CA_BUNDLE=/etc/ssl/certs/rootCA.pem

RUN apt-get update \
    && apt-get -y install vim wget sudo curl git\
    && apt-get -y install less \
    && rm -rf /var/lib/apt/lists/* \
    && a2enmod ssl \
    && a2enmod rewrite \
    && a2ensite default-ssl

RUN apt-get update && \
    apt-get install -y unzip && \
    apt-get install -y zip unzip libzip-dev libpq-dev libonig-dev libxml2-dev && \
    apt-get install -y zlib1g-dev libpng-dev libfreetype6-dev libjpeg62-turbo-dev libwebp-dev libxpm-dev && \
    docker-php-ext-configure gd --with-jpeg --with-webp --with-xpm --with-freetype &&\
    docker-php-ext-install -j$(nproc) gd && \
    docker-php-ext-install pdo_mysql mysqli xml zip

RUN composer global require "laravel/installer"

docker-compose.yamlの設置

vi ./docker-compose.yaml
# 中身はこちら↓↓

networks:
  docker-net-001:
services:
  php:
    container_name: php74_apache_ssl_web
    build: .
    image: php_apache_ssl
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
      - ./htmlarea:/var/www/html
      - ./conf:/etc/apache2/sites-enabled
      - ./certs:/etc/ssl/local/certs
    networks:
      docker-net-001:
    environment:
      TZ: Asia/Tokyo

  mysql01:
    image: mysql@sha256:2878ca7ca986b54c948966b7103aeceb747f50b9ecf34ecf934036cca58274db
    platform: linux/x86_64
    restart: always
    container_name: php74_apache_ssl_mysql
    logging:
      driver: json-file
    ports:
      - 3306:3306
    networks:
      - docker-net-001
    volumes:
      - ./db/mysql:/var/lib/mysql
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf:ro
      - ./db/dump/:/var/dump/
      - ./db/initdb.d/:/docker-entrypoint-initdb.d/
    environment:
      - MYSQL_ROOT_PASSWORD=0000
      - TZ=Asia/Tokyo
  
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: php74-apache-phpmyadmin
    platform: linux/amd64
    environment:
     - PMA_HOST=php74_apache_ssl_mysql
    volumes:
     - ./phpmyadmin/sessions:/sessions
    ports:
     - 3333:80
    networks:
     - docker-net-001
    restart: always

最終的なファイル配置

docker-lamp
  |-docker-compose.yaml
  |-Dockerfile
  |-certs
      |-rootCA.pem
      |-test.local.key
      |-test.local.pem
  |-conf
      |-000-default.conf
      |-default-ssl.conf
      |-php.ini
  |-db
      |-my.cnf
  |-htmlarea
      |-test.local
          |-public
              |-index.php
  |-phpmyadmin
      |-sessions

buildして起動

docker-compose build
docker-compose up -d

hostsファイルを修正

sudo vi /etc/hosts
# phpadmin用も含め、2つ追加
127.0.0.1       localhost
127.0.0.1       test.local

Lavavelプロジェクトを作成

docker内に入ります。
docker exec -it php74_apache_ssl_web /bin/bash
ダミーのtest.localがすでにあるのでいったん退避
mv ./test.local ./test.local_bk
新規のプロジェクトtest.localをつくります。
laravel new test.local

ブラウザで確認

(phpMyAdminなのでhttpでいいのかなぁ・・と。ごめんなさい。手抜きです。。)
http://localhost:3333
(こちらはsslが効いている)
https://test.local/

作業完了!!

phpMyAdminやLaravelの初期画面が表示されたら完了になります。
後はプロジェクトが発生するたびにVirtualHostを追加していけばよいですね。
おつかれさまでした!
いかがでしょうか?
コツを掴めばどのPCでも用意に環境を作ることができるのでとても便利かと思います。
いろんなエンジニアの足がかりにしていただければ嬉しいです。

前の記事へ <<<