傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下:

PHP

# 设置基础镜像
FROM php:8.2-fpm


# install dependencies
RUN apt-get update && apt-get install -y \
        vim \
        libzip-dev \
        libpng-dev \
        libjpeg-dev \
        iputils-ping \
        libmcrypt-dev \
        libmcrypt4 \
        libmhash-dev \
        libmhash2 \
        libxml2 \
        libxml2-dev \
        libbz2-1.0 \
        libbz2-dev \
        libfreetype6-dev \
	&& pecl install redis && docker-php-ext-enable redis \
        && rm -rf /var/lib/apt/lists/*

# install more php extensions
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install zip pdo_mysql gd


# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# 安装 OPcache
RUN docker-php-ext-install opcache

日常用的扩展都有了应该,

RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install zip pdo_mysql gd

这两个你也可以移到上面的RUN一同安装

Nginx

# 设置基础镜像
FROM nginx

# 安装一些必要的工具和额外软件包
RUN apt-get update && apt-get install -y \
    vim \
    curl \
    && rm -rf /var/lib/apt/lists/*

Mysql

直接从官方镜像资源中拉去

docker pull mysql

这样你将产生三个镜像

下面开始利用这三个镜像去构建你的项目容器

1.找到你的项目地址,比如我的:

/home/wanghaiyang/project/customeFrame/fr

傻瓜式教学Docker 使用docker compose部署 php nginx mysql_第1张图片

2.准备一个文件夹,用来放你的compse.yml文件(默认情况下,这一组服务的名字就是你这个文件夹名字),

3.准备一个compose.yml文件:内容如下   

version: '3'

services:
  # PHP 服务
  php_server:
    image: php8.2
    # 使用的 PHP 镜像
    volumes:
      - /home/wanghaiyang/project/customeFrame/fr:/usr/share/nginx/html
    ports:
      - "9000:9000"
    # 其他 PHP 相关配置...
    container_name: "compose-php"
    networks:
       - custome-network
       
  # Nginx 服务
  api_server:
    image: nginx
    # 使用的 Nginx 镜像

    volumes:
      - /home/wanghaiyang/project/customeFrame/fr:/usr/share/nginx/html
      - ./custome_frame.conf:/etc/nginx/conf.d/default.conf
      # 映射本地文件系统中的目录到容器中,确保 Nginx 使用自定义配置

    ports:
      - "8080:80"
      # 将主机的 8080 端口映射到容器的 8080 端口

    depends_on:
      - php_server
      - db_server
      # 定义依赖关系,确保 Nginx 在 PHP 和 MySQL 之后启动
    container_name: "compose-api"
    networks:
       - custome-network
  # MySQL 服务
  db_server:
    image: mysql
    # 使用的 MySQL 镜像

    # 其他 MySQL 相关配置...
    environment:
      MYSQL_ROOT_PASSWORD: wqzbxh@2018$$
      # 设置 MySQL root 用户密码
    ports:
      - 3700:3306
    # 将主机的 3700 端口映射到容器的 3306 端口
    volumes:
      - ./db_data:/var/lib/mysql
    container_name: "compose-db"
    networks:
       - custome-network

  # Adminer 服务(用于管理 MySQL 数据库)
  adminer:
    image: adminer
    # 使用的 Adminer 镜像

    restart: always
    ports:
      - 3701:8080
      # 将主机的 3701 端口映射到容器的 8080 端口
    container_name: "compose-adminer"
networks:
   custome-network:

    

再给一个custome_frame.conf文件,

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    # 配置根目录和默认文件
    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    # 如果文件不存在,重写URL到index.php
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php last;
        break;
    }

    # 将 PHP 脚本通过 FastCGI 传递到监听在 127.0.0.1:9000 上的服务器
    location ~ \.php$ {
       fastcgi_pass   php_server:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
       include        fastcgi_params;
    }

    # 禁止访问 .htaccess 文件,如果 Apache 的文档根与 nginx 的文档根相符
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

这个时候已经全部结束了

adminer 这个东西是 管理数据库的,前身是phpAdmin的影子,它长这个样子

傻瓜式教学Docker 使用docker compose部署 php nginx mysql_第2张图片然后在你的当前目录直接就

docker compose up -d

傻瓜式教学Docker 使用docker compose部署 php nginx mysql_第3张图片

傻瓜式教学Docker 使用docker compose部署 php nginx mysql_第4张图片

然后就成功了,我们这个时候访问一下测试一下

傻瓜式教学Docker 使用docker compose部署 php nginx mysql_第5张图片

OK没问题,说明Nginx 已经和 PHP 正常通讯了,我们再来看一下数据库请求;

证明也是没问题的

傻瓜式教学Docker 使用docker compose部署 php nginx mysql_第6张图片

上面的基本上及参数一换就能用

你可能感兴趣的:(docker,php,nginx)