一文读懂docker-compose
一文读懂docker-compose
docker-compose文件创建
直接新建一个文本文档,写入配置后,更改文件名字和文件类型为docker-compose.yml
Linux上直接进入配置文件夹内,使用vi命令进行创建。
如果当前文件夹内已存在docker-compose.yml文件,那么将直接打开进入编辑页面。
如果没有,将在你写入配置文件命令并保存后自动创建出docker-compose.yml文件。vi docker-compose.yml
按字母i键进入编辑模式,粘贴完之后按Esc键,退出编辑模式,再输入:wq退出并保存。
如果输入错误了,可以输入:q退出但不保存。
docker-compose的兼容性与对应的docker版本
查看docker-compose、docker版本
使用下面两个命令直接查看
docker-compose -v #查看docker-compose版本 docker -v #查看docker版本
如果要下载最新版本的Docker Compose,下载并将其保存到/usr/local/bin/docker-compose即可。
docker-compose文件的编写方法
此处演示的是Halo博客使用MySQL数据库的docker-compose.yml文件
Services:相当于container
Networks:相当于使用的网络
Volumes:数据持久化
build:构建镜像。可以指定 Dockerfile 的路径或者直接使用已有的镜像。
image:使用指定的镜像。
ports:指定容器端口映射,格式为 HOST_PORT:CONTAINER_PORT。
volumes:指定挂载卷,格式为 HOST_PATH:CONTAINER_PATH。
environment:设置环境变量,格式为 KEY=VALUE。
networks:指定容器连接的网络。
restart:指定容器重启策略,如 no, always, on-failure 等。
restart: always 是一个用于在容器停止后自动重新启动容器的指令。当容器出现任何错误或异常情况导致容器停止时,Docker将尝试自动重新启动容器。这个选项确保您的应用程序在意外关闭时能够自动恢复,并继续正常运行。
depends_on:指定容器之间的依赖关系。
command:覆盖容器默认的启动命令。
用法:只选取你需要用的进行设置即可。
例如本模板文件是一个文件创建两个容器,如果你只需要一个容器,那么多的删除即可。version: "3" services: halo: #定义服务名称 image: halohub/halo:2.11 # 使用指定的镜像 container_name: halo #设置docker容器名 restart: on-failure:3 #重启策略 depends_on: halodb: condition: service_healthy networks: halo_network: #此处是两个容器创建了一个虚拟网络(halo_network) volumes: - ./halo2:/root/.halo2 #数据持久化,将本地文件夹路径映射成容器内部文件夹。 ports: - "8090:8090" #将容器内部的指定端口映射至外部,可通过前面的8090端口进行访问容器页面,此端口可自行修改。 environment: #设置指定的环境变量,只对此容器生效。格式为【环境变量名】=【自定义参数】 - PUID=0 - PGID=0 healthcheck: #容器状态检查 test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"] interval: 30s timeout: 5s retries: 5 start_period: 30s command: #覆盖容器默认的启动命令。 - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo - --spring.r2dbc.username=root # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。 - --spring.r2dbc.password=o#DwN&JSa56 - --spring.sql.init.platform=mysql # 外部访问地址,请根据实际需要修改 - --halo.external-url=http://localhost:8090/ halodb: #定义服务名称 image: mysql:8.1.0 # 使用指定的镜像 container_name: halodb #设置docker容器名 restart: on-failure:3 #重启策略 networks: halo_network: #此处是两个容器创建了一个虚拟网络(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" #将容器内部的指定端口映射至外部,可通过前面的8090端口进行访问容器页面,此端口可自行修改。 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=o#DwN&JSa56 - MYSQL_DATABASE=halo networks: #创建此docker-compose项目的虚拟网络 halo_network: #虚拟网络名
docker-compose文件的运行
启动docker-compose文件
docker-compose up
启动并后台运行docker-compose文件
docker-compose up -d
👇👇👇
- 感谢你赐予我前进的力量