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

Docker学习笔记—day012

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写死

http://www.jsqmd.com/news/89550/

相关文章:

  • 基于组合赋权法(BWM+CRITIC)与可拓云理论的综合风险评估模型MATLAB代码
  • 微信小程序开发实战之 04-微信小程序常用 API(上)
  • Netty Http协议
  • Chasys Draw IES Artist:开源免费的图像处理与图形设计全能工具
  • 1.20 深度学习优化器对比
  • 什么是 Backtrader?一篇给 Python 量化爱好者的超全说明书
  • 多签钱包:多人签名才能执行的操作
  • 我在学c语言分支和循环的见解和踩过的坑
  • CANFD 总线多节点扩展技术:节点数量限制与突破方案
  • 今天我们继续学习kubernetes内容Helm
  • REAPER数字音频工作站:轻量高效的专业音频制作解决方案
  • 配电网可靠性评估—序贯蒙特卡洛模拟法研究附Matlab代码
  • 托福培训机构深度测评:从师资到服务,哪家用数据征服了90%的考生? - 品牌测评鉴赏家
  • 光伏储能虚拟同步发电机Simulink仿真模型探究
  • 机器学习资源合集
  • linux中的一些配置
  • 数据结构==B-树==
  • OBS Studio:开源免费的屏幕录制与直播推流一体化解决方案
  • Python GIL 的前世今生
  • 数字电路模拟程序复盘分析
  • ansible事实详解
  • COMSOL助力煤层注气热力流THM耦合下增强甲烷开采探索
  • Nlp教程资源合集
  • .NET 10 网络堆栈深度架构解析:HTTP/3、性能优化与后量子加密的融合演进
  • 2025雅思报班攻略:5大高性价比机构测评! - 品牌测评鉴赏家
  • 东莞奶茶原料公司推荐——圣旺水吧(东莞总公司)冠绝群雄 - 老百姓的口碑
  • 无线传感器网络覆盖及路由关键技术研究附Matlab代码
  • 【干扰】基于稀疏重构的空域-极化域联合抗主瓣干扰方法附Matlab复现
  • 【GRNN回归预测】基于广义回归神经网络的矿石等级预测的研究附matlab代码
  • 【第二十二周】机器学习笔记二十一