Skip to content

Compose

  • Compose 是用于定义和运行多容器 Docker 应用程序的工具。
  • 通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
  • 文档地址

示例

  • compose.yml
yml
# 定义应用服务
services:
    # 定义nginx应用
    nginx:
        # 选择 nginx版本镜像
        image: nginx:latest
        # 开机启动
        restart: always
        # 端口映射 主机端口:容器端口
        ports:
            - 80:80
        # 数据卷持久化
        volumes:
            # 同步nginx配置
            - type: bind
              source: /Users/zouyl/code/docker/volume/nginx/conf.d
              target: /etc/nginx/conf.d
            # 同步nginx工作目录
            - type: bind
              source: /Users/zouyl/code
              target: /usr/share/nginx/html
            # 同步log
            - type: bind
              source: /Users/zouyl/code/docker/volume/nginx/logs
              target: /var/log/nginx
        # 依赖
        depends_on:
            - php
        networks:
            - web-network

    # 定义php应用
    php:
        # dockerfile 构建镜像
        build:
            context: ./php
            dockerfile: Dockerfile
        # 开机启动
        restart: always
        # 端口映射 主机端口:容器端口
        ports:
            - 9000:9000
        # 配置环境变量
        environment:
            # 配置时区
            TZ: Asia/Shanghai
        # 数据卷持久化
        volumes:
            # 同步php配置
            - type: bind
              source: /Users/zouyl/code/docker/volume/php8.2/conf/php.ini
              target: /usr/local/etc/php/php.ini
            # 同步log
            - type: bind
              source: /Users/zouyl/code/docker/volume/php8.2/logs
              target: /var/log/php
            # 同步php工作目录
            - type: bind
              source: /Users/zouyl/code
              target: /var/www/html/
        # 依赖
        depends_on:
            - redis
            - mysql
        networks:
            - web-network
    kafka:
        restart: always
        image: apache/kafka:latest
        ports:
            # 主机端口:容器端口
            - 9092:9092
            - 9093:9093

    # 定义redis应用
    redis:
        image: redis:7
        # 开机启动
        restart: always
        # 端口映射 主机端口:容器端口
        ports:
            - 6379:6379
        # 数据卷持久化
        volumes:
            # 同步redis配置
            - type: bind
              source: /Users/zouyl/code/docker/volume/redis7/redis.conf
              target: /usr/local/etc/redis/redis.conf
            # 同步redis数据
            - type: bind
              source: /Users/zouyl/code/docker/volume/redis7/data
              target: /data
            # 同步log
            - type: bind
              source: /Users/zouyl/code/docker/volume/redis7/logs
              target: /var/log/redis
        command:
            # 指定配置文件启动
            redis-server /usr/local/etc/redis/redis.conf

    # 定义mysql应用
    mysql:
        # 选择 mysql版本镜像
        image: mysql:9.1
        # 开机启动
        restart: always
        # 端口映射 主机端口:容器端口
        ports:
            - 3306:3306
        # 配置环境变量
        environment:
            MYSQL_ROOT_PASSWORD: 123456
        # 数据卷持久化
        volumes:
            # 同步log
            - type: bind
              source: /Users/zouyl/code/docker/volume/mysql9.1/log
              target: /var/log/mysql
            # 同步 配置文件
            - type: bind
              source: /Users/zouyl/code/docker/volume/mysql9.1/conf/my.cnf
              target: /etc/mysql/conf.d/my.cnf
            # 同步 配置数据
            - type: bind
              source: /Users/zouyl/code/docker/volume/mysql9.1/data
              target: /var/lib/mysql
        command:
            # 设置编码格式
            --character-set-server=utf8mb4
            --collation-server=utf8mb4_general_ci
# 定义网络
networks:
  web-network:
    driver: bridge
  • php Dockerfile
dockerfile
# 如果拉去镜像失败可以 docker pull 镜像然后 docker-compose
FROM php:8.2-fpm
# 编译安装核心扩展
RUN apt-get update && apt-get install -y \
		libfreetype-dev \
		libjpeg62-turbo-dev \
		libpng-dev \
	&& docker-php-ext-configure gd --with-freetype --with-jpeg \
	&& docker-php-ext-install -j$(nproc) gd

# pecl 安装扩展
RUN pecl install redis \
    && pecl install swoole \
    && docker-php-ext-enable redis swoole
  • nginx conf
conf
server {
    listen 80;
    listen [::]:80;

    server_name localhost;
    # docker容器的nginx工作目录。已做映射但是配置必须是docker容器nginx工作目录
    root /usr/share/nginx/html;
    index index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        # 转发到php-fpm容器的9000端口 docker 通过同一网络访问
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        # /var/www/html 为docker容器php工作目录。
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        include fastcgi_params;
    }
}