当前位置: 首页 > news >正文

DockerCompose与多容器编排

DockerCompose与多容器编排

  • DockerCompose
  • docker-compose.yml文件
  • 更新脚本

DockerCompose

什么是 Docker Compose?
Docker Compose 是 Docker 官方提供的多容器应用管理工具,它可以通过一个 YAML 配置文件(通常命名为 docker-compose.yml)定义多个容器的服务、网络、存储等配置,然后通过一条命令就能批量创建、启动、停止这些容器,极大简化了多容器应用的部署和管理流程。

为什么需要 Docker Compose?
当应用依赖多个组件时,手动管理这些容器会非常繁琐,每个容器需要单独用 docker run 启动,还要配置端口映射、环境变量、网络连接,容器间有依赖关系,手动启动容易出错,重启、停止时需要逐个操作,效率低。而 Docker Compose 可以解决这些问题,通过一个配置文件声明所有容器的信息和关系,用简单的命令一键启动所有服务,实现 “配置即代码” 的管理方式。

我们接着上一篇博客 Dockerfile镜像构建 的内容进行操作

docker-compose.yml文件

在 test 目录下编写 docker-compose.yml 文件 vi docker-compose.yml

在这里插入图片描述

这个 docker-compose.yml 文件定义了一个基于 test:1.0 镜像的单服务应用,配置了容器的基本运行参数、网络、存储等信息。我们逐行拆解每个配置的含义和作用:

  1. version: ‘3’:用于指定 Docker Compose 配置文件的版本
  2. services 部分:定义容器服务
    services 是 Compose 配置的核心,用于定义一个或多个容器服务。这里只定义了一个名为 test 的服务
    image: "test:1.0":指定当前服务使用的镜像为 test:1.0,若镜像本地不存在,Compose 会自动从 Docker Hub 或配置的私有仓库拉取
    container_name: test:指定容器启动后的名称为 test
    restart: always:配置容器的重启策略为 always(总是重启),无论容器因何种原因停止,Docker 都会自动重启该容器
    ports: - "18080:8080":配置端口映射,将宿主机的 18080 端口与容器内的 8080 端口绑定,外部访问宿主机的 18080 端口时,请求会被转发到容器内的 8080 端口
    volumes: - ./data/:/app:配置数据卷挂载,将宿主机当前目录下的 data 文件夹挂载到容器内的 /app 目录,作用是数据持久化,容器删除后,./data/ 中的数据会保留在宿主机,避免数据丢失
    environment: - TZ=Asia/Shanghai:配置容器内的环境变量,这里设置时区为 Asia/Shanghai(北京时间)
    networks: - test:指定当前服务(test 容器)加入下面 networks 部分定义的 test 网络
  3. networks 部分:定义网络配置
    networks 用于声明服务使用的网络,这里定义了一个名为 test 的网络
    test: external: true
    表示 test 网络是已经存在于 Docker 环境中的网络,Compose 在启动服务时,会直接使用已有的 test 网络,而不会尝试创建新网络。

为什么需要创建一个公共网络?
通常用于多个 Compose 项目共享同一网络的场景。例如:项目 A 的数据库服务和项目 B 的 API 服务需要通信,可提前创建一个公共网络 test,让两个项目的服务都加入该网络,实现跨项目通信。容器间的通信依赖网络,加入同一网络的容器可通过 “服务名” 或 “容器名” 互相访问,无需知道对方的 IP 地址。

手动创建名为 test 的 docker 网络组,执行 docker network create test

查看所有网络接口信息 ifconfig

在这里插入图片描述

执行创建名为 test 的 docker 网络组这个命令,就是创建了 br-cd3cac47dc55 这个宿主机桥接接口对应的 Docker 自定义网络
docker0 是 Docker 自带的默认网络,安装 Docker 后自动创建,所有未指定网络的容器会默认连接到这个桥

根据当前目录下的 docker-compose.yml 配置文件,创建并启动所有定义的服务容器,且容器会在后台运行 docker-compose up -d

Compose 会自动完成:创建网络,创建并启动各服务容器,挂载卷,设置容器之间的通信,实时监控容器状态,所有容器会自动加入同一个默认网络,可直接通过服务名通信

但是此时查看日志会看到报错

在这里插入图片描述

在前面的 Dockerfile 定义了 ADD ./docker-0.0.1-SNAPSHOT.jar /app/docker-0.0.1-SNAPSHOT.jar,执行时机是镜像构建时,将宿主机当前目录下的 Java 应用 JAR 包复制到镜像 /app 目录下了,但 docker-compose.yml 中又定义了 volumes: - ./data/:/app,执行时机是容器启动时,这样容器启动后,docker-compose.yml 的 volumes: - ./data/:/app 会覆盖 Dockerfile 中 ADD 到镜像 /app 目录的 JAR 包,最终容器内 /app 目录的内容由宿主机 ./data/ 目录决定,而非镜像中复制的 JAR 包

所以我们需要在当前目录下创建 data 文件夹,并且需要将 JAR 包上传到该文件夹下

此时需要执行 docker-compose down 停止并清理容器服务
再重新创建并启动 docker-compose up -d,就成功了

在这里插入图片描述

http://<宿主机地址>:18080 就可以访问到该页面了,但我这里 controller 层接口路径带了 /test,所以我的访问路径是 http://<宿主机地址>:18080/test

在这里插入图片描述

更新脚本

若更改 JAR 包,编写更新脚本,实现一键更新 vi build.sh

#!/bin/bash
echo "停用所有容器"
docker-compose down
echo "构建镜像"
docker build -t test:1.0 .
echo "运行容器"
docker-compose up -d

sh build.sh 运行

在这里插入图片描述

http://www.dtcms.com/a/580972.html

相关文章:

  • AngularJS与SQL的集成使用指南
  • 【ZeroRange WebRTC】TWCC 在 WebRTC 中的角色与工作原理(深入指南)
  • 数据结构常见的八大排序算法
  • 个人怎么做网站app推广引流方法
  • 初识光伏逆变器
  • 一文了解LLM应用架构:从Prompt到Multi-Agent
  • MongoDB 内存管理避坑指南:解决高占用、页错误等核心问题,让数据库性能翻倍
  • 关于DNS中毒攻击的解决方案分享
  • 【C++】数据挖掘算法在软件测试中的应用
  • WebSocket 完全指南:从原理到实战,搭建实时通信桥梁
  • STM32项目分享:智能水产养殖系统
  • 网站开发线框个体营业执照网上年报
  • iPhone苹果手机拍的照片默认是heic如何换成jpg格式
  • 基于微信小程序的旅游攻略分享互动平台设计与实现-项目分享
  • Neo4j Windows桌面版安装及更改默认数据存储位置
  • 智能安防新篇章:EasyGBS助力重塑物业视频管理服务
  • ps2017做网站当阳网站建设电话
  • H5短视频SDK,赋能Web端视频创作革命
  • 如何选择温州本凡科技进行小程序开发服务?
  • 融智兴科技邀您共赴2025中国洗涤展
  • STM32上使用HAL库完美实现驱动MAX98357声卡模块(I2S+DMA+音频环形缓冲区)
  • 【React】打卡笔记,入门学习03:useState、useEffect、useRef、useMemo
  • M|烟花 (1995)
  • 平顶山网站建设2022年黄台片区
  • 人工智能的未来之路:华为全栈技术链与AI Agent应用实践
  • 基于openresty反向代理、dns劫持、实现对http请求、响应内容抓包
  • 智能体的范式革命:华为全栈技术链驱动下一代AI Agent
  • AI 边缘计算:决胜未来
  • 【Linux】网络层协议
  • 深入解析 WPF 中的 DataTemplateSelector:动态模板选择的艺术