这个是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 数据库容器,并将它们连接到同一个网络中,实现博客应用与数据库的交互