Docker实现PHP开发环境

环境准备:

#docker的版本

[root@10-10-20-236 /]# docker info|grep Version
Server Version: 20.10.8
Cgroup Version: 1
Kernel Version: 5.4.127-1.el7.elrepo.x86_64

#创建目录

[root@10-10-20-236 php8]# mkdir -p /wp/{nginx,mysql,php,redis,www}
[root@10-10-20-236 php8]# tree /wp/
/wp/
├── mysql
├── nginx
├── php
├── redis
└── www

 

具体部署:

1.安装 Nginx,先将 nginx 的整个配置目录 copy 到宿主机,然后在运行的时候将目录绑定到 nginx 容器的配置目录,这样修改配置更加方便一些。可以起一个Nginx的容器,进去之后查看其配置编译的参数,然后设置自己的目录结构

将nginx配置目录copy宿主机

[root@10-10-20-236 wp]# docker run --name tmp-nginx -d nginx:1.19.0
[root@10-10-20-236 wp]# docker cp tmp-nginx:/etc/nginx /wp/
[root@10-10-20-236 wp]# docker cp tmp-nginx:/usr/lib/nginx/modules /usr/lib/nginx/modules
[root@10-10-20-236 wp]# docker rm -f tmp-nginx

 

2.安装 php-fpm
因为这里需要安装一些开发时用到的 PHP 扩展,所以最好的办法是根据 Dockerfile 生成我们自己的镜像,如下是我的 Dockerfile,大家可以参考:

[root@10-10-20-236 php]# cat Dockerfile 
FROM php:8.0.10-fpm
MAINTAINER teddylu
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtome && echo $TZ > /etc/timezon
RUN apt-get update \
   && apt install net-tools iputils-ping vim tree procps -y \
   && apt install -y libwebp-dev libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libjpeg62-turbo-dev libmemcached-dev zlib1g-dev libevent-dev libzip-dev openssl libssl-dev libmagickwand-dev \
   && pecl install igbinary \
   && docker-php-ext-install -j$(nproc) pdo pdo_mysql pcntl sockets \
   && pecl install redis  \
   && docker-php-ext-enable redis  \
   && pecl install imagick \
   && docker-php-ext-enable imagick \
   && pecl install mcrypt \
   && docker-php-ext-enable mcrypt \
   && pecl install memcached \
   && docker-php-ext-enable memcached \
   && docker-php-ext-configure opcache --enable-opcache \
   && docker-php-ext-install opcache \
   && docker-php-ext-install -j$(nproc) mysqli \
   && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
   && docker-php-ext-install -j$(nproc) gd \
   && pecl install xdebug && docker-php-ext-enable xdebug \
   && pecl install swoole && docker-php-ext-enable swoole

在 Dockerfile 所在目录下执行:
docker build -t php:8.0.10-lluvia .

-t 参数设置镜像名称和标签,请根据自己情况命名,镜像创建完成之后,可以像上面我们copy出nginx配置一样,将 php的相关配置也copy到宿主机。

[root@10-10-20-236 php]# docker run --name tmp-php -d php:8.0.10-lluvia
[root@10-10-20-236 php]# docker cp tmp-php:/usr/local/etc /wp/php/
[root@10-10-20-236 php]# docker rm -f tmp-php

 

3.安装配置msyql
先创建mysql的配置文件和数据目录,并且提前准备好MySQL的配置文件,参考以下配置文件:

root@94ccf1e17970:/etc/mysql/conf.d# vi my.cnf 
bash: vi: command not found
root@94ccf1e17970:/etc/mysql/conf.d# cat my.cnf 
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

server-id = 21
log_bin = mysql-bin
binlog_format = ROW
sync_binlog = 1
expire_logs_days =14

gtid_mode=ON  # 开启gtid
enforce-gtid-consistency=ON

#binlog_cache_size = 128m
##max_binlog_cache_size = 512m
##max_binlog_size = 256M
general_log=ON
slow_query_log=ON  

max_connections=4444
performance_schema_max_table_instances=400
table_definition_cache=400
performance_schema=off
table_open_cache=64
innodb_buffer_pool_chunk_size=64M
innodb_buffer_pool_size=64M

# Custom config should go here
!includedir /etc/mysql/conf.d/

 

[root@10-10-20-236 mysql]# mkdir -p /wp/mysql/{data,conf,mysql-files}
[root@10-10-20-236 mysql]# tree
.
├── conf
│   └── my.cnf
├── data
└── mysql-files

docker run \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
--name mysql8-lluvia \
-v /wp/mysql/data:/var/lib/mysql \
-v /wp/mysql/conf:/etc/mysql/conf.d \
-v /wp/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-d mysql:8.0.27

4.配置运行redis,创建相关的目录,并且提前准备好redis的配置文件
[root@10-10-20-236 redis]# mkdir -p /wp/redis/{data,conf}
[root@10-10-20-236 redis]# cp /wordpress/redis/conf/redis.conf /wp/redis/conf/
[root@10-10-20-236 redis]# tree
.
├── conf
│   └── redis.conf
└── data

docker run \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
-p 6379:6379 \
--name myredis6-lluvia \
-v /wp/redis/conf:/usr/local/etc/redis \
-v /wp/redis/data:/data \
-d redis:6.2.6 redis-server /usr/local/etc/redis/redis.conf

5.修改nginx,php的配置文件
重点,在Nginx的配置文件中的配置, vim /wp/nginx/conf.d/default.conf:

root /usr/share/nginx/html;

location ~ \.php$ {
fastcgi_pass php-fpm-container:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include fastcgi_params;

修改的内容里面有一处需要说明,“php-fpm-container” 这个是创建的php-fpm 容器的别名,具体是在运行时候指定的,之后会用到
修改php 相关配置文件,进入 /wp/php/etc/php 下,将 php.ini-development 复制改名为 php.ini,配置内容根据自己情况修改即可

6.启动 php,nginx 容器

docker run \
--name myphp8-lluvia \
--restart=always \
--link myredis6-lluvia:redis-container \
--link mysql8-lluvia:mysql-container \
-v /etc/localtime:/etc/localtime:ro \
-v /wp/www:/var/www/html \
-v /wp/php/etc:/usr/local/etc \
-d php:8.0.10-lluvia

 

docker run \
--name mynginx-lluvia \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
-p 80:80 \
-p 443:443 \
--link myphp8-lluvia:php-fpm-container \
-v /wp/www:/usr/share/nginx/html \
-v /wp/nginx:/etc/nginx \
-v /wp/nginx/log:/var/log/nginx \
-d nginx:1.19.0

可选部署rabbitmq

docker run \
--name myrabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-v /rabbitmq/data:/var/lib/rabbitmq \
--hostname myRabbit \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123456 \
-d rabbitmq:3.9.13-management

 

参考:

1)https://learnku.com/articles/31344

2)https://learnku.com/articles/38186

3)https://blog.csdn.net/zhezhebie/article/details/73331335

Docker实现PHP开发环境
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
Scroll to top
0
Would love your thoughts, please comment.x
()
x