这个是halo官网提示来创建并且来认识docker
利用comepose 来创建halo 的yaml文件,详细解释
这个是飞牛创建mysql8.0的yaml文件
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql80
restart: always
ports:
- "13306:3306"
environment:
MYSQL_ROOT_PASSWORD: shitou521
MYSQL_CHARSET: utf8mb4
MYSQL_COLLATION: utf8mb4_unicode_ci
volumes:
- /vol1/1000/docker/mysql/data:/var/lib/mysql
- /vol1/1000/docker/mysql/logs:/var/log/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
下面是这篇博客要讲的文本内容
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20.14
restart: always
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=shitou521
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: mysql:8.1.0
restart: always
networks:
halo_network:
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=shitou521
- MYSQL_DATABASE=halo
networks:
halo_network:
1. 版本声明
收起
yaml
version: "3"
指定使用 Docker Compose 文件格式的版本为 3。不同版本的 Docker Compose 支持不同的特性,版本 3 是较为常用且支持高级特性的版本。
2. 服务定义
2.1 halo
服务
收起
yaml
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20.14
restart: always
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
- --spring.r2dbc.password=shitou521
- --spring.sql.init.platform=mysql
- --halo.external-url=http://localhost:8090/
image
:指定使用的 Docker 镜像,这里使用的是registry.fit2cloud.com/halo/halo
仓库中的2.20.14
版本的 Halo 博客应用镜像。restart
:设置容器的重启策略为always
,意味着无论容器因为什么原因停止,Docker 都会自动尝试重启它。depends_on
:指定该服务依赖于halodb
服务,并且只有当halodb
服务处于健康状态时,halo
服务才会启动。networks
:将halo
服务加入到halo_network
网络中,以便与其他同样加入该网络的服务进行通信。volumes
:将宿主机当前目录下的halo2
目录挂载到容器内的/root/.halo2
目录,用于持久化存储 Halo 博客的配置和数据。ports
:将宿主机的 8090 端口映射到容器的 8090 端口,这样可以通过宿主机的 8090 端口访问 Halo 博客应用。healthcheck
:定义容器的健康检查机制。每隔 30 秒(interval
)使用curl
命令尝试访问http://localhost:8090/actuator/health/readiness
,如果请求失败(-f
选项),则认为容器不健康。每次检查的超时时间为 5 秒(timeout
),最多重试 5 次(retries
)。容器启动后的前 30 秒(start_period
)不进行健康检查。environment
:设置容器的环境变量,这里设置了 JVM 的内存参数,限制 Halo 应用的最大堆内存和初始堆内存为 256MB。command
:覆盖容器启动时默认执行的命令,这里配置了 Halo 应用连接 MySQL 数据库的相关参数,包括数据库连接 URL、用户名、密码,以及数据库平台和外部访问地址。
2.2 halodb
服务
收起
yaml
halodb:
image: mysql:8.1.0
restart: always
networks:
halo_network:
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
- MYSQL_ROOT_PASSWORD=shitou521
- MYSQL_DATABASE=halo
image
:指定使用的 Docker 镜像,这里使用的是mysql
官方仓库中的8.1.0
版本的 MySQL 数据库镜像。restart
:同样设置容器的重启策略为always
。networks
:将halodb
服务加入到halo_network
网络中,以便与halo
服务进行通信。command
:覆盖容器启动时默认执行的命令,这里配置了 MySQL 数据库的一些参数,包括默认认证插件、字符集、排序规则和时间戳默认值等。volumes
:将宿主机当前目录下的mysql
目录挂载到容器内的/var/lib/mysql
目录,用于持久化存储 MySQL 数据库的数据文件;将宿主机当前目录下的mysqlBackup
目录挂载到容器内的/data/mysqlBackup
目录,可用于存储数据库备份文件。ports
:将宿主机的 3306 端口映射到容器的 3306 端口,这样可以通过宿主机的 3306 端口访问 MySQL 数据库。healthcheck
:定义容器的健康检查机制。每隔 3 秒(interval
)使用mysqladmin ping
命令尝试连接本地(127.0.0.1
)的 MySQL 服务,如果连接失败则认为容器不健康。最多重试 5 次(retries
),容器启动后的前 30 秒(start_period
)不进行健康检查。environment
:设置容器的环境变量,这里设置了 MySQL 数据库的 root 用户密码为shitou521
,并创建一个名为halo
的数据库。
3. 网络定义
收起
yaml
networks:
halo_network:
定义了一个名为 halo_network
的自定义网络,halo
和 halodb
服务都加入到这个网络中,使得它们可以通过服务名(如 halodb
)进行相互通信。
通过运行 docker-compose up -d
命令,可以根据这个文件启动 Halo 博客应用和 MySQL 数据库容器,并将它们连接到同一个网络中,实现博客应用与数据库的交互