Appearance
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;
}
}