docker-compose使用nginx+php+mysql+redis部署fastadmin

 

有错误请指出,相互沟通学习

零、说明

1、个人理解

  docker以images镜像和containers容器两个模块为主。容器就像镜像的孩子,父节点镜像可以生成多个不同的容器,分别用于不同的项目容器间互不影响。可以将自己配置好的容器打包成镜像,推送的docker Hub,随时随地可用。
  数据持久化问题,通过卷Volumes(参数-v)实现,可以映射到本地自定义路径。
  容器互联问题,通过network网络组实现,每个容器选择自己要联通的网络。

2、安装docker Desktop  桌面应用挺方便的,方便查看,一键启动,自带docker-compose,不用单独安装了

  官方地址: https://www.docker.com/products/docker-desktop

 

一、环境配置

1.大概目录结构

 

2.docker-compose.yml文件内容

version: '3.8' #指定本yml的compose架构版本
#参考: compose搭建lnmp环境 https://blog.csdn.net/csdn_yasin/article/details/123084702
#参考: compose项目 http://t.zoukankan.com/JetpropelledSnake-p-10405114.html
#启动: $ docker-compose -p fastadmin up -d   # -p指定项目名称  -d表示后台启动
#php配置及扩展官方说明: https://hub.docker.com/_/php?tab=description

networks: #网络组,允许相同组内的每个容器之间相互请求联通
  frontend:
  backend:

services:  #定义服务的入口和镜像
  nginx1_20: #image镜像服务的自定义别名
    container_name: nginx1_20   #自定义容器名
    #image: nginx:latest   #使用本地的指定镜像构建,如果本地没有就从docker官方下载远程镜像
    build: #指定使用Dockerfile文件构建镜像
      context: ./nginx   #可以是dockerfile的路径,或者是指向git仓库的url地址
      dockerfile: Dockerfile  #构建镜像上下文路径
      #target: dev    #多层构建,可以指定构建哪一层,指定dev层构建
      #args:   #添加构建参数,只能在构建过程中访问的环境变量
      #  buildno: 1
      #labels:  设置构建镜像的标签
      #  - "com.example.description=Accounting webapp"
      #  - "com.example.department=Finance"
      #  - "com.example.label-with-empty-value"
    #command: sh -c "yarn install && yarn run dev"    #执行命令,覆盖容器启动后默认执行的命令
    #working_dir: /app   #工作目录
    ports:  #指定运行端口
      - "8000:80"
    volumes: #将本地主机的文件或目录挂载到容器需要的位置,建立映射关系,ro只读,rw可读写
      #- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf:/etc/nginx/conf.d
      - ./code:/var/www     # ./code为本地代码路径,/var/www为docker中的项目根目录
      - ./nginx/log/:/var/log/nginx/:rw
    depends_on: #依赖项,必须先加载的容器
      - "php7_1"
    networks: # 定义当前容器所属网络组
      - frontend
    #volumes_from:  从另一个服务或容器挂载卷,可选参数:ro和:rw
    #hostname 容器主机名
  php7_1:
    container_name: php7_1
    # image: php:7.4.30-fpm
    build: ./php71   #fastadmin目前只支持7.1版本
    ports:
      - "8001:9000"
    volumes:
      - ./code:/var/www  # 项目根目录
      - ./php71/etc/:/usr/local/etc/:rw #必须加上rw参数,否则docker没有写权限,配置文件不会自动创建。
      #- ./php74/php-fpm.conf:/usr/local/etc/php-fpm.conf
      #- ./php74/php.ini:/usr/local/etc/php/php.ini
      #- ./php74/php-fpm.d:/usr/local/etc/php-fpm.d
      #- ./php74/crontab:/etc/crontab
      #扩展目录 /usr/local/lib/php/extensions/no-debug-non-zts-20160303
      # 初始化扩展列表 /usr/src/php/ext  必须执行“docker-php-source extract”后才有
      #- /Users/wyb/Sites/docker/php1/php74/php-fpm.conf:/usr/local/etc/php-fpm.conf
    networks:
      - frontend
      - backend
    depends_on:
      - "mysql5_7"
      - "redis6_2"
  mysql5_7:
    container_name: mysql5_7
    #image: mysql:5.7.38
    build: ./mysql57
    ports:
      - "8002:3306"
    volumes:
      - ./mysql57/data/:/var/lib/mysql/:rw
      #- ./mysql/my.cnf:/etc/mysql/my.cnf:ro
    environment:  #环境变量定义
      MYSQL_ROOT_PASSWORD: root
    networks:
      - backend
  redis6_2:
    container_name: redis6_2
    build: ./redis
    ports:
      - "8003:6379"
    volumes:
      #- ./redis/redis.conf:/etc/redis/redis.conf:ro
      - ./redis/conf:/usr/local/etc/redis
      - ./redis/data:/data
    networks:
      - backend
docker-compose.yml

 

3.相关Dockerfile文件

除了php需要安装响应的扩展,其它dockerfile都比较简单(没必要非用dockerfile,直接compose中用images参数就行)。

./redis/Dockerfile ⬇️

FROM redis:6.2.6
MAINTAINER wyb<2216244671@qq.com>

./php71/Dockerfile ⬇️

 1 FROM php:7.1.33-fpm
 2 
 3 #MAINTAINER wyb<2216244671@qq.com> 这里定义作者信息,此将被废弃,使用label替换
 4 LABEL org.opencontainers.image.authors="2216244671@qq.com"
 5 
 6 RUN apt-get update && apt-get install -y --no-install-recommends libpng-dev \
 7         libjpeg62-turbo-dev \
 8         libfreetype6-dev \
 9         libmcrypt-dev \
10         #freetype-dev \
11         #postgresql-dev \
12         #cron \
13         # memcached
14         # libmemcached-dev \
15         # zlib-dev \
16         # curl-dev \
17     && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ -with-jpeg-dir=/usr/include/ \
18     && docker-php-ext-install -j$(nproc) iconv mcrypt gd pdo pdo_mysql zip \
19     && pecl install redis-5.1.1 \
20     && pecl install xdebug-2.8.1 \
21     && docker-php-ext-enable redis xdebug \
22     && docker-php-source extract
23     # && pecl install memcached-"$PHPMECCACHED_VERSION" \
24     # && docker-php-ext-enable memcached
25 
26 # 修改php.ini配置, 将当前目录下的./conf.d/error.ini文件,复制到docker容器中的/usr...目录下
27 COPY ./conf.d/error.ini /usr/local/etc/php/conf.d
28 
29 
30 # 其它扩展安装示例
31 #RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -O xcache.tar.gz \
32 #    && mkdir -p xcache \
33 #    && tar -xf xcache.tar.gz -C xcache --strip-components=1 \
34 #    && rm xcache.tar.gz \
35 #    && ( \
36 #    cd xcache \
37 #    && phpize \
38 #    && ./configure --enable-xcache \
39 #    && make -j$(nproc) \
40 #    && make install \
41 #    ) \
42 #    && rm -r xcache \
43 #    && docker-php-ext-enable xcache
44 
45 #RUN cd /usr/local/etc/php/conf.d vi upload.ini
46 #upload_max_filesize=100M
./php71/Dockerfile

./nginx/Dockerfile ⬇️

FROM nginx:1.20.2
MAINTAINER wyb<2216244671@qq.com>

./mysql57/Dockerfile ⬇️

FROM mysql:5.7.38
MAINTAINER wyb<2216244671@qq.com>

 

4.其它配置文件

PHP自定义配置文件   ./php71/conf.d/error.ini

log_errors = On
error_log = /usr/local/etc/php/log/php_error.log
error_reporting=E_ALL&~E_NOTICE
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

redis配置文件    .redis/conf/redis.conf

port 6379
bind 0.0.0.0

nginx虚拟主机域名配置文件    ./nginx/conf/default.conf

 1 server {
 2     listen 80;
 3     server_name test.fastadmin.org;
 4     index index.php index.html index.htm default.php default.htm default.html;
 5     root   /var/www/fastadmin/public;
 6 
 7     location / {
 8         index  index.html index.htm index.php;
 9         if (!-e $request_filename) {
10             rewrite  ^(.*)$  /index.php?s=/$1  last;
11             break;
12         }
13         #autoindex  on;
14     }
15     location ~ \.php(.*)$ {
16         fastcgi_pass   php7_1:9000; #注意这里不是127.0.0.1之类的ip了,因为是docker容器之间互联,所以compose中定义了networks,这里直接使用容器名即可。
17         fastcgi_index  index.php;
18         fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
19         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
20         fastcgi_param  PATH_INFO  $fastcgi_path_info;
21         fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
22         include        fastcgi_params;
23     }
24 
25 
26     location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
27     {
28         return 404;
29     }
30     
31     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
32     {
33         expires      30d;
34         error_log off;
35         access_log off;
36     }
37     
38     location ~ .*\.(js|css)?$
39     {
40         expires      12h;
41         error_log off;
42         access_log off; 
43     }
44 
45 }
default.conf

 

二、fastadmin项目部署

1、构建并启动

  第一步完成后,进入的docker-compose.yml文件所在目录下,终端执行下面命令,即可构建images,并启动对应的四个容器。

# 运行当前yml配置 -p fastadmin指定项目名称;  -d表示后台启动
$ docker-compose -p fastadmin up -d

2、测试代码

  按照nginx配置文件中的路径,以及docker-compose中的映射地址,将代码包放在对应目录下即可。

  本项目中nginx配置访问root是:/var/www/fastadmin/public

  docker-compose中的映射地址是:./code:/var/www

  即代码入口文件在本机docker-compose.yml同级目录 ./code/fastadmin/public/ 中

  增加测试PHP代码:./code/fastadmin/public/test.php

<?php

// redis 测试
$redis = new Redis();
$redis->connect('redis6_2',6379);
echo "redis is running: ".$redis->ping();
echo '-------------------<br>';

// mysql测试  docker新键的数据库中,需要自行新建数据库和表,这里已创建fastadmin库
// 连接的host要注意,与./nginx/default.conf中的php连接一样,不是ip,是docker-compose中配置的容器名,container_name
try {
    $conn = new PDO('mysql:host=mysql5_7;dbname=fastadmin;port=3306', 'user', 'password');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// 设置 PDO

    // $conn->exec("CREATE TABLE if not exists author (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,lastname VARCHAR(30) NOT NULL,email VARCHAR(50))"); // 创建表

    // $ret = $conn->exec("insert into author (name,lastname,email) values ('亚历山大','a','123@123.com')");
    // foreach($conn->query('SELECT * from book',PDO::FETCH_ASSOC) as $row) {
    //     print_r($row);
    // }

    $sth = $conn->prepare("SELECT * FROM author limit 0,2");
    $sth->execute();
    $result = $sth->fetchAll(PDO::FETCH_ASSOC);
    print_r($result);

    $conn = null;//关闭连接
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
test.php

3、访问,

  按照docker-compose.yml中的配置,nginx配置了端口映射 8000:80,本机的8000端口映射到docker中的80端口,所以本机访问地址为:http://localhost:8000/test.php

  访问成功则说明配置没有问题了,将fastadmin项目代码放在 ./code/fastadmin/ 目录中即可

  自定义域名的话,同时修改本机hosts文件即可。

 

posted @ 2022-06-23 14:10  梦忘川  阅读(1596)  评论(0编辑  收藏  举报