记录一下docker搭建laravel环境
docker搭建nginx+php8.2+mysql8.0+redis7.0+supervisor
目录结构
├── nginx nginx配置文件目录
│ ├── default.conf Nginx 默认配置文件
├── php php配置文件目录
│ ├── Dockerfile PHP 镜像构建文件
│ ├── php.ini PHP配置文件
│ ├── start-container supervisor运行文件
│ ├── supervisord.conf supervisord配置文件
├── redis redis配置文件目录
├── www PHP 代码目录
│ ├── php_test php项目
│ ├── supervisor supervisor配置文件目录
│ │ ├── supervisor-test.conf supervisor配置文件
├── docker-compose-sample.yml Docker 服务配置示例文件
docker-compose.yml
version: '3'
services:
lnmp_nginx:
image: nginx:alpine
container_name: lnmp_nginx
ports:
- 8080:8080
environment:
- TZ=Asia/Shanghai
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./www:/var/www/html
depends_on:
- lnmp_php
networks:
- docker_lnmp
lnmp_php:
build:
context: ./php
dockerfile: Dockerfile
container_name: lnmp_php
environment:
- TZ=Asia/Shanghai
ports:
- 9000:9000
volumes:
- ./www:/var/www/html
depends_on:
- lnmp_mysql
- lnmp_redis
networks:
- docker_lnmp
lnmp_mysql:
image: 'mysql/mysql-server:8.0'
container_name: lnmp_mysql
ports:
- 33061:3306
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_ROOT_HOST=%
- MYSQL_ALLOW_EMPTY_PASSWORD=1
- TZ=Asia/Shanghai
networks:
- docker_lnmp
lnmp_redis:
image: 'redis:alpine'
container_name: lnmp_redis
environment:
- TZ=Asia/Shanghai
ports:
- 63791:6379
command: redis-server --requirepass password # 设置redis密码
volumes:
- ./redis:/data
networks:
- docker_lnmp
networks:
docker_lnmp:
driver: bridge
volumes:
lnmp_mysql:
driver: local
lnmp_redis:
driver: local
nginx/default.conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
root /var/www/html/laravel_docker_test/public;
index index.php index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
try_files $uri $uri/ /index.php$is_args$query_string;
}
location ~ \.php$ {
fastcgi_pass lnmp_php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
php/Dockerfile
FROM php:8.2-fpm
RUN apt-get update \
&& apt-get install -y libzip-dev \
libwebp-dev libjpeg-dev libpng-dev libmemcached-dev libssl-dev zlib1g-dev \
libfreetype6-dev libjpeg62-turbo-dev libxml2-dev libldap2-dev libmagickwand-dev
RUN docker-php-source extract
RUN /usr/local/bin/docker-php-ext-install bcmath && /usr/local/bin/docker-php-ext-enable bcmath && \
/usr/local/bin/docker-php-ext-install calendar && /usr/local/bin/docker-php-ext-enable calendar && \
/usr/local/bin/docker-php-ext-install gd && /usr/local/bin/docker-php-ext-enable gd && \
/usr/local/bin/docker-php-ext-install pdo_mysql && /usr/local/bin/docker-php-ext-enable pdo_mysql && \
/usr/local/bin/docker-php-ext-install mysqli && /usr/local/bin/docker-php-ext-enable mysqli && \
/usr/local/bin/docker-php-ext-install soap && /usr/local/bin/docker-php-ext-enable soap && \
/usr/local/bin/docker-php-ext-install sockets && /usr/local/bin/docker-php-ext-enable sockets && \
/usr/local/bin/docker-php-ext-install exif && /usr/local/bin/docker-php-ext-enable exif && \
/usr/local/bin/docker-php-ext-install zip && /usr/local/bin/docker-php-ext-enable zip && \
/usr/local/bin/docker-php-ext-install ldap && /usr/local/bin/docker-php-ext-enable ldap
RUN pecl install imagick \
&& /usr/local/bin/docker-php-ext-enable imagick
RUN pecl install https://pecl.php.net/get/redis-5.3.7.tgz \
&& /usr/local/bin/docker-php-ext-enable redis
RUN pecl install https://pecl.php.net/get/swoole-5.0.3.tgz \
&& /usr/local/bin/docker-php-ext-enable swoole
RUN pecl install https://pecl.php.net/get/igbinary-3.2.14.tgz \
&& /usr/local/bin/docker-php-ext-enable igbinary
RUN pecl install https://pecl.php.net/get/msgpack-2.2.0.tgz \
&& /usr/local/bin/docker-php-ext-enable msgpack
RUN pecl install https://pecl.php.net/get/memcached-3.2.0.tgz \
&& /usr/local/bin/docker-php-ext-enable memcached
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /usr/local/etc/php/conf.d/99-jase.ini
RUN chmod +x /usr/local/bin/start-container
CMD ["/usr/local/sbin/php-fpm", "-D", "FOREGROUND"]
ENTRYPOINT ["start-container"]
php.php.ini
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
[opcache]
opcache.enable_cli=1
php/start-container
#!/usr/bin/env bash
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
php/supervisord.conf
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php-fpm]
command=/usr/local/sbin/php-fpm -c /usr/local/etc/php-fpm.conf
[include]
files = /var/www/html/supervisor/*.conf
www/supervisor/supervisor-test.conf
[program:supervisor-test]
command=/usr/local/bin/php /var/www/html/index.php
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/var/log/supervisor/supervisor-test.out.log
stderr_logfile=/var/log/supervisor/supervisortest.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d
启动
docker-compose up -d
重新构建nginx
docker-compose up --force-recreate --build lnmp_nginx
本作品采用《CC 协议》,转载必须注明作者和本文链接
有 Let's Encrypt SSL 的吗?
不过以alpine为基础镜像的镜像,好像没有时间文件,所以这个- TZ=Asia/Shanghai在这些镜像中应该是无效的