[Docker] 2025年版、自分開発に最適なDocker環境の公開

2025/03/05

Docker 開発

t f B! P L
eyecatch 今、複数の開発が同時進行しています。 この状態って、ここ数年ずっと続いているんですが、その都度考えているのが、 全て同じ開発環境にしておくと、無駄な作業をしなくてもいいので、そんな便利な環境にしてくれるのが、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系のものもたくさんあるので、この辺は個人のお好みに依存すると思います。 バニラ系で、他のライブラリ依存しにくい環境が欲しい方は、上記ソースを使ってお好きに改造しまくってください。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ