docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

在构建的前提下保证docker和docker-compose安装没问题

docker-compose.yml内容

version: "1.0.0"
networks:  #添加网络
   web-net:
    driver: bridge
services:
  php:
      image: php-test:7.4-fpm
      container_name: php-fpm-1
      privileged: true #设置容器权限为root
      volumes:
        - /home/www/project1:/var/www/html
      networks:
        - web-net
  nginx:
      image: nginx:1.15
      container_name: php-nginx-1
      privileged: true
      ports:
        - "8080:80"
      volumes:
        - /home/www/project1:/usr/share/nginx/html
        - /home/log/nginx:/var/log/nginx
        - /home/conf/nginx/conf.d:/etc/nginx/conf.d
      networks:
        - web-net
      restart: always
      links:
        - php-fpm-1:php
  mysql:
      image: mysql:5.7
      container_name: php-mysql-1
      privileged: true
      ports:
        - "3307:3306"
      volumes:
        - /home/data/mysql:/var/lib/mysql
        - /home/conf/mysql:/etc/mysql/conf.d
        - /home/log/mysql:/var/log
      environment:
        - MYSQL_ROOT_PASSWORD=123456
      networks:
        - web-net
  redis:
      image: redis:3.0
      container_name: php-redis-master
      privileged: true
      ports:
        - "6375:6379"
      volumes:
        - /home/conf/redis/redis-master/myredis.conf:/etc/redis/redis.conf
        - /home/data/redis/redis-master:/data
      networks:
        - web-net
      restart: always
      command: redis-server /etc/redis/redis.conf #已对应的配置文件启动
  redis1:
      image: redis:3.0
      container_name: php-redis-slave-1
      privileged: true
      ports:
        - "6376:6379"
      volumes:
        - /home/conf/redis/redis-slave1/myredis.conf:/etc/redis/redis.conf
        - /home/data/redis/redis-slave-1:/data
      networks:
        - web-net
      restart: always
      links:
        - php-redis-master:redis-master #连接到主redis
      command: redis-server /etc/redis/redis.conf
  redis2:
      image: redis:3.0
      container_name: php-redis-slave-2
      privileged: true
      ports:
        - "6377:6379"
      volumes:
        - /home/conf/redis/redis-slave2/myredis.conf:/etc/redis/redis.conf
        - /home/data/redis/redis-slave-2:/data
      networks:
        - web-net
      restart: always
      links:
        - php-redis-master:redis-master
      command: redis-server /etc/redis/redis.conf

在运行前安装相关文件目录

sudo mkdir -p /home/data/mysql && mkdir /home/data/redis && mkdir -p /home/conf/nginx && mkdir /home/conf/mysql &&
 mkdir /home/conf/redis && mkdir /home/conf/redis/redis-master && mkdir /home/conf/redis/redis-slave1 && 
  mkdir /home/conf/redis/redis-slave2 && mkdir -p /home/conf/php && mkdir -p /home/log/nginx && mkdir /home/log/redis && 
  mkdir /home/log/mysql && mkdir /home/log/php && mkdir -p /home/www/project1

nginx的default.conf如下文件,内容放到/home/conf/nginx/conf.d目录下面(注意:我在/usr/share/nginx/html目录后面加了个pubulic主要是为了运行tp框架用的你们测试可以不建)

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html/public;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html/public;
    }
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/public/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

/home/conf/redis/redis-master/myredis.conf 内容如下

port 6379
timeout 65
maxclients 10000
databases 16
maxmemory 1048576000
appendonly yes

/home/conf/redis/redis-slave1/myredis.conf 内容如下

port 6379
timeout 65
maxclients 10000
databases 16
maxmemory 1048576000
appendonly yes
slaveof php-redis-master 6379 #我用--link中php-redis-master的别名redis-master没生效不知道什么原因所以直接用了容器名

/home/conf/redis/redis-slave2/myredis.conf 内容如下

timeout 65
maxclients 10000
databases 16
maxmemory 1048576000
appendonly yes
slaveof php-redis-master 6379

现在的php-fpm镜像中没有mysql-pdo和redis扩展PHP环境不能链接到数据库和redis所有我们可以直接重新构建新的php-fpm镜像在yml中的php镜像直接用下面重新构建的镜像

FROM php:7.4-fpm
RUN docker-php-ext-install pdo_mysql \
&& curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/5.3.6.tar.gz \
&& tar xfz /tmp/redis.tar.gz \
&& rm -r /tmp/redis.tar.gz \
&& mkdir -p /usr/src/php/ext \
&& mv phpredis-5.3.6 /usr/src/php/ext/redis \
&& docker-php-ext-install redis

(注意:新的php镜像名字与yml文件中php镜像名字保持一致)

上面所有步骤完成后运行:sudo docker-compose up -d

运行:sudo dokcer ps 可以看到相关容器都全部正常启动

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

查看redis主从配置也没有问题

1 这是主redis

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

 2 这是从redis1

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

3 这是从redis2

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

thinkphp6的入口代码如下

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)
thinkphp6的env配置内容

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

 运行结果

docker-compose构建php运行环境(Nginx,mysql,redis+redis主从)

如果不想提前安装php相关扩展也可以在php容器启动后重新进入容器安装

执行: docker-compose exec php bash

/usr/local/bin/docker-php-ext-install mysqli pdo_mysql  #安装mysqli和pdo_mysql扩展
cd /usr/local/etc/php    #进入php配置文件目录
mv php.ini-development php.ini   #创建php.ini
apt-get update    #更新软件源列表
apt-get install vim  #安装vim
vim /usr/local/etc/php/php.ini  修改php.ini配置文件

修改 php.ini 扩展目录 extension_dir="/usr/local/lib/php/extensions/no-debug-non-zts-20180731/"; 打开 mysqli 扩展 extension=mysqli;extension=pdo_mysql; 然后退出容器

重启容器 docker-compose restart

目前遇到三个问题还不知道什么原因的知道的可以告知下谢谢

1 我自己宿主机上的redis配置文件如果命名成是redis.conf挂载到容器中找不到报错:/etc/redis/redis.conf not found (好像把我的redis.conf当成文件夹了)

2 redis从机配置文件中用的–link 的别名后再从容器中的hosts文件中找不到(不知道是不是缓存的 原因)

3 docker-composer restart命令重启有缓存修改配置后不生效

                       

点击阅读全文

上一篇 2023年 5月 27日 am11:23
下一篇 2023年 5月 27日 am11:24