
今、複数の開発が同時進行しています。
この状態って、ここ数年ずっと続いているんですが、その都度考えているのが、
全て同じ開発環境にしておくと、無駄な作業をしなくてもいいので、そんな便利な環境にしてくれるのが、Dockerですよね。
もちろん、別の会社の開発に入って、そこの開発独特の環境がある場合は、共通環境にはできませんが、それはソレ。
自分で複数の開発をこなしたいWebエンジニアにために、今現在の自分のDocker環境を公開しておきます。
階層以降蔵
以下のフォルダ/ファイルで設置してください。
project
├ docker/
│ ├ php/
│ │ ├ Dickerfile
│ │ ├ php.ini
│ │ └ ssmtp.conf
│ ├ nginx/
│ │ ├ Dickerfile
│ │ └ default.conf
│ ├ mysql/
│ │ └ Dickerfile
│ ├ maildev/
│ │ └ Dickerfile
│ └ docker-compose.yml
└ src/
ソース一式
docker-compose.yml
services:
php:
container_name : mynt_php
build : ./php
volumes:
- ./key:/key
- ../../src:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/local.ini
- ./php/ssmtp.conf:/etc/ssmtp/ssmtp.conf
working_dir: /var/www/html
mysql:
container_name: mynt_mysql
build: ./mysql
ports:
- "3306:3306"
volumes:
- ../../src/data/mysql:/var/lib/mysql
environment:
MYSQL_DATABASE: mynt
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: pass
MYSQL_USER: foo
MYSQL_PASSWORD: bar
TZ: "Asia/Tokyo"
tty: true
nginx:
container_name: mynt_nginx
build : ./nginx
ports:
- 80:80
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ../../src:/var/www/html
depends_on:
- php
maildev:
container_name : mynt_maildev
build: ./maildev
platform: linux/amd64
ports:
- "1080:1080"
- "1025:1025"
php/Dockerfile
FROM php:8.2-fpm-alpine
ARG xdebug_enabled=false
# timezone
ARG TZ=Asia/Tokyo
RUN apk update && \
apk add --update --no-cache \
libjpeg-turbo-dev \
libwebp-dev \
libpng-dev
# mysql-client
RUN docker-php-ext-configure gd --with-jpeg
RUN docker-php-ext-install -j$(nproc) \
gd \
pdo_mysql mysqli
RUN apk update && \
apk add -u busybox && \
apk add --update --no-cache \
syslog-ng \
cyrus-sasl \
vim \
git \
curl \
zip \
unzip \
lsof \
openssh \
libssh2-dev
# ssmtp
RUN set -eux && \
echo ${TZ} > /etc/timezone && \
apk add --no-cache ssmtp
php/php.ini
[PHP]
post_max_size = 1000M
upload_max_filesize = 1000M
max_file_uploads = 20
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
php/ssmtp.conf
root=postmaster
mailhub=mkb_maildev:1025
hostname=php
FromLineOverride=YES
nginx/Dockerfile
FROM nginx:1.19.5-alpine
nginx/default.conf
server {
listen 80;
server_name localhost;
index index.php index.html;
client_max_body_size 500M;
root /var/www/html;
error_page 404 /error.html;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ ^/s/(.*)$ {
root /var/www/html;
rewrite ^/s/(.*)$ /site.php?site_name=$1&$args;
}
}
mysql/Dockerfile
FROM mariadb:latest
maildev/Dockerfile
FROM maildev/maildev
使い方
上記をセットしたら、ターミナルで、docker-compose.ymlの置いてあるフォルダに移動して、以下のコマンド実行
docker compose up -d
[+] Running 5/5
✔ Network mynt_default Created
✔ Container mynt_maildev Started
✔ Container mynt_php Started
✔ Container mynt_mysql Started
✔ Container mynt_nginx Started
勝手にビルドして、立ち上がってくれるのがDockerの良き点です。
この状態でブラウザで以下のURLにてアクセスすると、src以下に設置されたindex.htmlまたはindex.phpにアクセスできます。
あとがき
src以下の開発は、実際の開発なので今回は触れませんが、この中も似たような構造にすると、効率的な同時開発をする事が可能になりますよ。
docker-compose.ymlのアクセスポートを80番から別のポートにする事で、同時に複数のdockerを立ち上げる事ができるようになります。
あと、mysqlは、コマンド実行ができず、phpアクセスのみを有効にしている状態なので、
phpmyadminなどをインストールしておくと良いかもしれませんね。
まあ、開発環境でこれに限らず、vscodeプラグインでも構築できるし、有り物のvm系のものもたくさんあるので、この辺は個人のお好みに依存すると思います。
バニラ系で、他のライブラリ依存しにくい環境が欲しい方は、上記ソースを使ってお好きに改造しまくってください。
0 件のコメント:
コメントを投稿