背景前段时间看到LNMP居然被军哥给卖了，一方面让人感到惋惜，毕竟用了这么多年了，而且军哥也是坚持了这么多年了，就这么放弃了。另外一方面也感受到，这种lnmp架构对比现在的docker-compose确实有很多不方便的地方，比如搬家的时候我要备份、迁移....，但是在docker-compose连同文件夹带走一条命令就重新起来了。正好近期在折腾NAS，从ESxi全部迁移到PVE，利用PVE的CT模板重新搭建了Debain，把所有的wp全部搬迁到这里。以下通过docker-compose部署wordpress\mysql\phpmyadmin，并通过Nginx反向代理项目nginx-proxy-manager反代部署。部署因为需要同时部署wordpress\mysql\phpmyadmin，强烈建议通过compose部署。安装docker和docker-compose的过程略过。docker新版本自带了docker compose命令，可以替换docker-compose，所以我就不装docker-compoe了。准备docker-compose.ymlversion: '3.1' services: wordpress: image: wordpress restart: always container_name: wp ports: - 8080:80 environment: #修改以下db配置 WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp:/var/www/html links: - db db: image: mysql:5.7 restart: always tainer_name: wp_db environment: #修改以下db配置 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress MYSQL_ROOT_PASSWORD: wordpress_root volumes: - ./db/conf.d:/etc/mysql/conf.d - ./db/data:/var/lib/mysql dbweb: image: phpmyadmin restart: always ports: - 8098:80 links: - db之后运行docker compose up -d 跑起来服务。下面解读一下这个配置：Wordpress：默认端口8080，这样每个站我用一个独立的端口，之后用NMP反代。volumes挂载同目录下的wp文件夹，映射wordpress的根目录。Mysql：没有开放端口到宿主机，MYSQL_ROOT_PASSWORD是默认root密码MYSQL_DATABASE/MYSQL_USER/MYSQL_PASSWORD是wp使用的账户密码Phpmyadmin：端口8098其他配置增加PHP扩展有些wp需要开启php扩展，但是在docker里面就非常麻烦，这里推荐前期一个配置模块install-php-extensions项目地址：https://github.com/mlocati/docker-php-extension-installer具体可以看我之前的介绍利用install-php-extensions构建自己的php-docker镜像那么，下面我们来重新构建镜像。准备dockerfile指定dockerfile-wp作为构建的文件，这个是为了重新构建镜像，存放在docker-compose.yml同层级目录。FROM wordpress LABEL maintainer="https://imgki.com" #Add own Extentions ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions && sync RUN install-php-extensions mysqli pdo_mysql gd exif imagick zip fileinfo iconv IMAP #upload.ini max_upload COPY ./conf/uploads.ini /usr/local/etc/php/conf.d修改docker-compose.yml在docker-compose.yml中关于wordpress部分修改成这样，重新构建的镜像会被命名为wordpress-rebldwordpress: build: context: . dockerfile: dockerfile-wp image: wordpress-rebld restart: always ports: - 8083:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp:/var/www/html调整上传限制官方镜像原来设置的上传限制为2M，这个对于很多人来说附件都太小了，因此需要调整php.ini中的配置。以下在构建镜像的时候一块进行调整。准备uploads.ini这个配置文件描述了上传文件大小的限制，存放在docker-compose.yml同层级目录。file_uploads = On memory_limit = 64M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 600准备dockerfile文件因为需要重新构建镜像，因此需要准备一个dockerfile文件，我命名为dockerfile-wp，存放在docker-compose.yml同层级目录。FROM wordpress LABEL maintainer="https://imgki.com" #upload.ini max_upload COPY ./uploads.ini /usr/local/etc/php/conf.d修改docker-composel.yml在docker-compose.yml中关于wordpress部分修改成这样wordpress: build: context: . dockerfile: dockerfile-wp image: wordpress-rebld restart: always ports: - 8083:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp:/var/www/htmlNginx反代平时在自己的服务器上跑了很多服务，而且是用习惯了docker跑，对外开放的端口都是自设，为了统一管理域名+SSL，之前都是用宝塔或者lnmp比较方便，如果愿意折腾用Nginx-docker，就是稍微麻烦点。项目地址：https://github.com/jc21/nginx-proxy-manager官网：https://nginxproxymanager.com/具体看我前期的教程：非常方便的Nginx反向代理项目nginx-proxy-manager
需求docker官方的php镜像一般很少能直接用，因为很多扩展都没有，比如php;7.4.16-fpm镜像通过run启动后，默认没有启用mysqli模块，很多时候我们都需要根据需要来启用某些php扩展，所以一般都需要在官方的基础上进行重构。但是看了一些重构的教程都比较麻烦，今天发现这么一个项目install-php-extensionsinstall-php-extensions项目项目地址：https://github.com/mlocati/docker-php-extension-installer构建项目编写DockerfileFROM php:7.4.16-fpm LABEL maintainer="https://imgki.com" ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions && sync #这里加上你要编译的模块 RUN install-php-extensions mysqli pdo_mysql gd exif imagick zip 构建镜像docker build -t my-php:7.4.16-fpm .之后很快构建完成，可以用docker images查看新构建的镜像有可以用docker run --rm php_my:7.4.16-fpm php -m查看包含的扩展其他说明Supported PHP extensions支持列表官方github这里可以查看具体支持的列表，php版本和扩展的支持情况https://github.com/mlocati/docker-php-extension-installer#supported-php-extensionsSpecial requirements特别要求有些扩展是有特殊要求的https://github.com/mlocati/docker-php-extension-installer#supported-php-extensions