[Docker] Alpine + PHP8.2 + ImageMagickのインストール

2025/01/17

Docker PHP

t f B! P L
eyecatch PHPとImageMagickは、画像操作の鉄板セットです。 一昔前はサーバーにImageMagickを直接インストールして、コマンドラインで使う程度でよかったんですが、 最近ではサーバー依存を無くして、便利運用できるようにするために、Dockerでインストールを固めておく必要があります。 とあるプロジェクトで使う事になり、そのインストール工程で、半日ぐらい費やしたので、出来上がった結果のみブログに掲載しておきます。

事前環境について

今回Dockerを起動するのは、MacBookAir(M1)でコンテナを作る事を目的にしています。 ※その後、オンプレサーバーにDockerをインストールして、稼働する予定ですが、とりあえずローカルで動かすことで今回の目的を達成とします。 各種モジュールは以下が含まれています。
Nginx PHP:8.2 ImageMagick Sqlite3 MySQL8

ソースコード

docker-compose.yml

services: php: container_name : php build : ./php volumes: - ./public_html:/var/www/html working_dir: /var/www/html nginx: container_name: nginx image: nginx:1.19.5-alpine ports: - 8888:80 volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./public_html:/var/www/html depends_on: - php sqlite3: container_name: sqlite image: nouchka/sqlite3:latest stdin_open: true tty: true volumes: - ./public_html/:/root/db/

PHP/Dockerfile

FROM php:8.2-fpm-alpine RUN apk update && \ apk add --update --no-cache \ libjpeg-turbo-dev \ libwebp-dev \ libpng-dev RUN docker-php-ext-configure gd --with-jpeg RUN docker-php-ext-install -j$(nproc) gd RUN apk update && \ apk add -u busybox && \ apk add --update --no-cache \ syslog-ng \ cyrus-sasl \ postfix \ vim \ wget \ autoconf COPY main.cf /etc/postfix/ COPY sasl_passwd /etc/postfix/ RUN /usr/sbin/postmap /etc/postfix/sasl_passwd RUN apk --update --no-cache add php-pear RUN apk --update --no-cache add imagemagick RUN apk --update --no-cache add file RUN apk --update --no-cache add php82-pecl-imagick RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS imagemagick-dev \ && pecl install imagick \ && docker-php-ext-enable imagick \ && apk del .build-deps RUN apk add --no-cache imagemagick imagemagick-pdf COPY entrypoint.sh / ENTRYPOINT ["sh", "/entrypoint.sh"]

php/entrypoint.sh

#!/bin/ash postfix start # dockerのイメージが、entrypointによって上書きされたので、再実行してやる . /usr/local/bin/docker-php-entrypoint php-fpm

php/main.cf

compatibility_level = 3.7 queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix unknown_local_recipient_reject_code = 550 smtpd_banner = $myhostname ESMTP $mail_name (alphine) debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 home_mailbox = Maildir/ # mydestination = localhost mydestination = $myhostname, localhost.$mydomain, localhost sendmail_path = /usr/sbin/sendmail newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /etc/postfix readme_directory = /usr/share/doc/postfix inet_protocols = ipv4 inet_interfaces = localhost mail_spool_directory = /var/mail debug_peer_level = 2 debug_peer_list = 127.0.0.1 maillog_file = /var/log/maillog.log # SMTPリレーの設定 relayhost = [smtp.mailtrap.io]:2525 smtp_sasl_auth_enable = yes smtp_sasl_mechanism_filter = plain smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd

php/my.cnf

[mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8

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" [PECL] extension=imagick.so

php/sasl_passwd

smtp.mailtrap.io 91b97386be8cb5:f9a8648a20b2cc

nginx/default.conf

server { listen 80; server_name localhost; index index.php index.html; client_max_body_size 500M; root /var/www/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; } }

あとがき

PHPでの公開Web環境が色々と詰め込んであります。 この構成が便利だと感じているペチパーな人も意外と多いんじゃないでしょうか? ちなみに、軽量Alpineを使っているので、思いの外、Docker容量が軽くしてあるのは、エンジニア的こだわりです。

人気の投稿

このブログを検索

ごあいさつ

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

ブログ アーカイブ