尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Docker学习笔记—day012

Docker学习笔记—day012
📅 发布时间:2026/6/19 4:31:09

Docker学习笔记—day012(容器化编排)

文章目录

    • 一、Docker-Compose
      • 1.1、docker-compose是什么
      • 1.2、docker-compose能干什么
      • 1.3、docker-compose下载
      • 1.4、docker-compose核心概念
      • 1.5、docker-compose使用的三个步骤
      • 1.6、docker-compose使用的三个步骤
    • 二、Docker-Compose案例
      • 2.1、编写DockerFile文件
      • 2.2、构建镜像
      • 2.3、不使用Compose
      • 2.4、使用Compose
        • 2.4.1、编写docker-compose.yml文件
        • 2.4.2、修改微服务工程docker_boot
        • 2.4.3、编排Dockerfile启动与
        • 2.4.4、 进入mysql容器实例并新建数据库表和Redis容器实例

一、Docker-Compose

Docker-compose是Docker官方开源的项目,负责实现对Docker容器集群的快速编排

1.1、docker-compose是什么

Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成的一个应用。只需要定义一个YAML格式的配置文件docker-compse.yml。写出多个容器之间的调用关系。然后,只需一个命令,就能同时启动/关闭这些容器。

1.2、docker-compose能干什么

docker一般是每一个容器只运行一个服务,因为docker容器本来占用的资源比较少,所以最好是将每一个服务单独分割开。

造成的问题:如果我们同时需要部署多个服务,每个服务都使用Dockerfile然后在构建镜像,这样也太麻烦了。

Docker官方提供的Compose多服务部署的工具,就是解决上述问题的。

例如:如果我们要实现一个Web微服务项目,除了Web服务器本身,往往还需要再加上后端使用的Mysql服务容器、Redis服务容器、注册中心Eureka,甚至包含一些负载均衡容器等等。

Compose允许用户通过一个单独的docker-compose.yml模版文件来定义一组相关联的应用容器为一个项目。


Docker-Compose的优点:

  • 高效的协作:可共享的YAML文件有助于开发人员和运维人员之间的顺畅协作,优化工作流程并加快问题的解决速度,提高工作效率。
  • 快速应用开发:Compose会缓存用于创建容器的配置。当你重启为发生改变的服务时,Compose会重新使用现有的容器。重复使用容器意味着可以非常迅速地对环境进行修改。
  • 跨环境的可移植性

1.3、docker-compose下载

  1. 下载Docker Compose二进制文件
curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose
  1. 赋予文件可执行的权限
chmod+x/usr/local/bin/docker-compose
  1. 验证安装
docker-compose--version
  1. 卸载方式
sudorm/usr/local/bin/docker-compose

1.4、docker-compose核心概念

一个文件:Docker-Compose.yml文件
两个要素:服务和工程

  1. 服务(service)
    一个个应用容器实例。比如:订单微服务、库存微服务、mysql容器、nginx容器实例、Redis容器实例等等

  2. 工程(project)
    由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

1.5、docker-compose使用的三个步骤

  1. 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  2. 使用docker-compose.yml定义一个完整的业务单元,安排好整体应用中的各个容器服务。
  3. 执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线

1.6、docker-compose使用的三个步骤

# 1、查看帮助docker-compose-h# 2、启动所有docker-compose服务docker-compose up# 3、启动所有docker-compose服务并后台运行docker-compose up-d# 4、停止并删除容器、网络、卷、镜像docker-compose down# 5、进入容器实例内部# docker-compose exec docker-compose.yml 文件中写的服务id /bin/bashdocker-compose exec yml里面的服务id# 6、展示当前docker-compose编排过的运行的所有容器docker-composeps# 7、展示当前docker-compose编排过的容器进程docker-compose top# 8、查看容器输出日志docker-compose logs yml里面的服务id# 9、检查配置docker-compose config# 10、检查配置,有问题才输出docker-compose config-q# 11、重启服务docker=compose restart# 12、启动服务docker-composestart# 13、停止服务docker-ompose stop

二、Docker-Compose案例

写一个简单的微服务项目,通过mysql、redis实现增删改查

2.1、编写DockerFile文件

# 基础镜像使用FROMjava:8# VOLUME 指定临时文件目录/tmp ,在主机var/lib/docker目录下创建一个临时文件并链接到容器的/tmpVOLUME/tmp# 将jar包添加到容器中并命名为radan_docker。jarADD docker_boot-0.0.1.SNAPSHOT.jar radan_docker.jar# 运行jar包RUN bash-c'touch /radan_docker.jar'ENTRYPOINT['java','-jar','/radan_docker.jar']# 保留服务端口EXPOSE 6001

2.2、构建镜像

docker build-t radan_docker:1.0.

2.3、不使用Compose

不使用容器化编排技术的时候,镜像一个一个按顺序启动
很显然得运行三次容器实例

# 1、新建Mysql容器docker run-p 3306:3306--name mysql57--privileged=true/radan/mysql/conf:/etc/mysql/conf.d-v/radan/mysql/logs:/logs-v/radan/mysql/data:/var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456-d mysql:5.7# 2、新建redis容器实例docker run-p 6379:6379--name redis608--privileged=true-v/app/redis/redis.conf:/etc/redis/redis.conf-v/app/redis/data:/data-d redis:6.0.8 redis-server/etc/redis/redis.conf# 3、启动微服务镜像docker run-d-p 6001:6001 镜像ID

上面这种方式可以成功部署,但显然操作是花费时间的。
其次。容器间的启停或者宕机,有可能导致IP地址对应的容器实例变化,映射出现问题,要么生产IP写死(不推荐),要么通过服务进行调用

2.4、使用Compose

2.4.1、编写docker-compose.yml文件
version:"3"# 指定Docker Compose文件格式版本services:# 微服务应用microService:image:zzyy_docker:1.6# 使用的自定义微服务镜像container_name:ms01# 容器名称,方便识别和管理ports:-"6001:6001"# 端口映射:主机端口6001映射到容器端口6001volumes:-/app/microService:/data# 数据卷挂载:将主机目录挂载到容器networks:-atguigu_net# 连接到自定义网络depends_on:-redis-mysql# 依赖关系:先启动redis和mysql服务# Redis缓存服务redis:image:redis:6.0.8# Redis 6.0.8版本镜像ports:-"6379:6379"# Redis默认端口映射volumes:-/app/redis/redis.conf:/etc/redis/redis.conf# 挂载Redis配置文件-/app/redis/data:/data# 挂载Redis数据持久化目录networks:-atguigu_net# 连接到自定义网络command:redis-server /etc/redis/redis.conf# 使用自定义配置启动Redis# MySQL数据库服务mysql:image:mysql:5.7# MySQL 5.7版本镜像container_name:mysql57# MySQL容器名称environment:MYSQL_ROOT_PASSWORD:'123456'# 设置root用户密码MYSQL_ALLOWED_EMPTY_PASSWORD:'no'# 不允许空密码MYSQL_DATABASE:'db2021'# 容器启动时创建的默认数据库MYSQL_USER:'zzyy'# 创建额外的普通用户MYSQL_PASSWORD:'zzyy123'# 普通用户的密码ports:-"3306:3306"# MySQL默认端口映射volumes:-/app/mysql/db:/var/lib/mysql# 挂载MySQL数据目录,防止数据丢失-/app/mysql/conf/my.cnf:/etc/my.cnf# 挂载MySQL配置文件-/app/mysql/init:/docker-entrypoint-initdb.d# 初始化脚本目录networks:-atguigu_net# 连接到自定义网络command:--default-authentication-plugin=mysql_native_password# 解决外部客户端连接认证问题# 定义自定义网络networks:atguigu_net:# 创建一个名为atguigu_net的桥接网络# 网络配置(可在此处添加更多网络设置,如driver、ipam等)
2.4.2、修改微服务工程docker_boot

此时,应该通过暴漏的服务名去调用IP

server:port:6001spring:datasource:type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.jdbc.Driver# 直接通过容器实例的服务名映射IP# url: jdbc:mysql://192.168.1.107:3306/db2021?useUnicode=true&characterEncoding=utf-8&useSSL=falseurl:jdbc:mysql://mysql:3306/db2021?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername:rootpassword:123456redis:database:0# host: 192.168.1.107host:redisport:6379password:lettuce:pool:max-active:8max-wait:-1msmax-idle:8min-idle:0shutdown-timeout:100ms
2.4.3、编排Dockerfile启动与

和之前的操作类似,唯一不一样的启动

# 先看我们编写的docker-compose.yml文件编写的对不对# 对了,就没有任何输出docker-compose conf-q# 进行容器编排docker-compose up-d


2.4.4、 进入mysql容器实例并新建数据库表和Redis容器实例
# 进入mysql容器实例docker exec-it mysql容器实例ID# 进入redis容器实例docker exec-it redis容器实例ID

注:使用docker-compose进行容器编排可以一键启动,还可以通过服务名找到对应IP,不必把IP写死

相关新闻

  • Netty Http协议
  • 1.20 深度学习优化器对比
  • 什么是 Backtrader?一篇给 Python 量化爱好者的超全说明书

最新新闻

  • 2026沈阳钻石回收没有证书能卖吗?实测1200笔无票钻石成交记录 - 奢品小当家
  • 本草拾光商行 —— 承德满族人,全品类回收,专业爱好驱动,报价地道 - 深鉴新闻
  • 广州古董珠宝也能卖高价,懂行老板不压价 - 奢品小当家
  • 20260619 了解V8规则
  • 2026 年 6 月最新无锡同城购宠评分榜实测|7 家正规猫舍犬舍横向测评,附近实体门店避坑全攻略 - 吉林同城获客
  • 广州租办公室哪里好?万博德舜大厦A塔居首,2026年6月四大商务区深度横评 - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号