酒と開発の日々

飲酒大好き駆け出しエンジニアのブログ

DockerでPHP開発環境を作ってみました

リポジトリ

github.com

目的

  • 業務でDockerを使わないため、Dockerを使った開発を個人で経験する
  • Data Volumeの理解を進める
  • 今後、個人で開発&運用するための基盤にする
  • 単純にDockerを使いたかった

構成コンテナ

ディレクトリ構成

.
├── app
├── docker
|    ├── mysql
|    |    └── my.cnf
|    ├── nginx
|    |    ├── Dockerfile
|    |    └── fpm.conf
|    └── php
|         ├── Dockerfile
|         └── php.ini
├── logs
|    ├── mysql
|    ├── nginx
|    └── php
├── .env
└── docker-compose.yml

docker-compose.yml

version: "3"

services:
  php-fpm:
    build:
      context: ./docker/php
      args:
        - TZ=${TZ}
    ports:
      - 9000:9000
    volumes:
      - ./app:/var/www/html
      - ./logs/php:/var/log/php
    working_dir: /var/www/html
    environment:
      - TZ=${TZ}

  nginx:
    build: ./docker/nginx
    depends_on:
      - php-fpm
    ports:
      - 80:80
    volumes:
      - ./app:/var/www/html
      - ./logs/nginx:/var/log/nginx
    working_dir: /var/www/html

  db-mariadb:
    build: ./docker/mysql
    volumes:
      - db-store:/var/lib/mysql
      - ./logs/mysql:/var/log/mysql
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASS}
      - MYSQL_ROOT_PASSWORD=${DB_PASS}
      - TZ=${TZ}

volumes:
  db-store:

こだわった点

Data Volumeを使う

目的にも書きましたが、Data Volumeの理解を進める目的で今回このdocker-composeとDockerfileを書きました。docker volume lsdocker volume rmなどのコマンド、Data Volumeの性質などの理解が深まりました。

MariaDBを使う

正直なところMariaDBMySQLのどちらが優れているという判断は筆者は出来ません。しかし、MySQLのオリジナルのソースコードの作者がMariaDBの作者である事実と、MariaDBOSSであることの2つの理由からMariaDBを扱っておくことにはOSSを扱うことに慣れるという意味を含んでいると判断し、今回の構成にしました。

コンテナのタイムゾーンJSTにする

コンテナ技術をより深く理解するために、JSTに設定するタスクは最適でした。筆者の開発環境がWindowsホストのためパーミッションの問題にぶち当たり、Linuxとの差を実感しつつWindows機で開発する時の注意点を実感できました。

今後の目標

今回のdocker-composeを更に開発し、個人的に開発するWebアプリケーションの基盤としたいという思惑があります。そのため、今後Laravelやredisなどをcompose、コンテナに追加していく予定です。

参考にさせていただいた記事

qiita.com

qiita.com

qiita.com

今後とも個人での学習を継続していこうと思います!