docker的服务编排

2023-11-06

想学习更全面的docker知识可以点击右侧: Docker的概念及基本指令学习(全)

docker 服务编排

  • docker 服务编排也叫docker compose,它的出现是应来解决使用docker部署大型应用的业务场景的问题。通常在生产环境中,使用docker部署一个应用需要使用多个容器,例如部署前端、后端、依赖服务、数据库等。如果每个容器都需要手工使用shell来启动则效率过于低下,所以在这样的场景中,我们可以采用docker compose来进行docker容器的编排工作。

第一步:下载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

第二步:修改docker compose让其有可执行权限

chmod 744 /usr/local/bin/docker-compose

第三步:测试

docker-compose -version

第四部:docker-compose.yml文件的编写
在docker-compose.yml文件中可以编写相关的配置属性,用来管理compose的构建过程,主要的属性包括:
1)version 代表compose文件格式版本,按照官网的实例,建议目前采用‘3.9’版本
2)services 该属性是compose文件中的核心属性,在该属性之下,可以配置compose启动的各种服务。主要是需要compose启动的各种容器信息。也是compose文件中主要的开发内容。
常用属性:

属性名称 说明
image 当前服务使用什么镜像文件
ports 当前容器需要映射的端口信息 - ”8080:80“
enviroments 当前镜像需要传递的参数
volumes 当前镜像的挂在点
tty:true 代表使用-it模式启动服务
build 指定dockerfile所在的路径,当使用docker compose编排一个容器,而且该容器需要构建的时候需要使用该参数
container_name 指定编排容器的名称
restart:always 在docker服务重启后,该容器是否自动重启
depends_on: 服务名 设定服务依赖关系,通过该配置可以决定服务的启动顺序
env_file 指定配置文件
context 指定上下文
dockerfile 指定需要使用的dockerfile文件

3)networks

例子1:在service中配置简单的服务信息,编写compose文件,启动一个nginx容器

version: '3.9'
services:
  my_nginx:
    image: "nginx"
    ports:
      - "8080:9090"
    volumes:
      - "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"
      - "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
  • 使用docker-compose up命令 启动容器编排,需要注意的是,容器启动成功后,默认会占用当前的终端用来输出日志信息。我们可以重新打开一个终端,使用docker ps命令查看,发现docker中多了一个容器名字叫做 **my_nginx_1.这就是compose替我们启动的容器。
  • 在上面的例子中,my_nginx是一个服务的名字,也可以理解为是生成容器名字的其中一部分,image属性代表要使用什么镜像,ports 代表需要映射的端口,前边是宿主机的端口,而后面是容器内的端口。volumns代表要进行的文件挂载。
  • 此外,使用docker network ls命令可以发现,compose启动后,自动给我们创建了一个网络,通过 docker inspect 命令发现使用当前compose文件启动的容器默认都加入到了,新创建的网络中。

例子2:在tomcat-compose文件中构建一个服务,在本地docker中不存在有对应的镜像

version: '3.9'

services:
  my_tomcat:
    image: "tomcat"
  • 如果在compose中包含本地docker中不存在的镜像,则在运行compose的过程中会自动下载对应的镜像。理论上在一台安装有docker以及docker
  • compose的宿主机上,在保证网络畅通的前提下,我们只需要依靠docker-compose文件就可以直接安装对应的系统。
  • 此外,在当前的例子中,我们将compose文件认为的修改为
    tomcat-compose.yml,如果不使用默认的文件名,则需要在执行docker-compose up命令的时候加上 -f 参数,手工指定对应的yml文件。

例子3:一次启动多个容器

version: '3.9'

services:
  my_tomcat:
    image: "tomcat"
  my_nginx:
    image: "nginx"
    ports:
      - "8080:9090"
    volumes:
      - "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"
      - "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"

docker-compose命令

​ 在之前的例子中,我们使用了docker-compose up命令来启动一个容器编排,接下来,我们详细了解一下,在docker-compose中常用的命令以及参数使用

  1. docker-compose命令
    常用参数:
    -f 默认docker-compose会在当前文件夹下询招Dockercompose.yml文件,如果需要自定义文件名,可以使用-f 文件名 形式来指定
    -p 指定项目名称 指定项目后,通过compoose创建的所有容器都会自动添加项目名称前缀
    -v 查看当前docker-compose的版本信息
  2. docker-compose 环境变量
    docker compose 默认的环境变量为.env,在其中我们可以使用对应的键值对模式给compose传递值 --env-file 参数可以动态制动compose需要使用的配置文件位置
  3. docker-compose up 启动一个容器编排
    常用参数: `
参数名称 说明
-d 后台运行
–force-recreate 强制更新已经存在的容器
–remove-orphans 删除在compose文件中没有定义的容器,通常使用在修改了compose文件的场景下使用服务名 单独启动compose中的某一个服务,如果服务存在依赖,则被依赖的服务也会被启动
docker-compose down 删除对应的容器,网络服务
docker-compose stop 停止compose对应的所有服务
docker-compose start 启动所有的服务容器
docker-compose ps 查看与当前compse相关的服务容器
-q 只列出id值,其他值不显示
docker-compose logs 读取日志信息
docker-compose pull 拉取服务对应的镜像
docker-compose build 构建compose中的所有镜像、
docker-compose images 查看所有的镜像信息
docker-compose config 查看配置文件信息
docker-compose restart 重启服务
docker-compose exec 服务名 进行指定服务的容器
docker-compose rm 删除所有已经停止的服务容器
以上命令涉及到某个服务的时候均可以通过:命令:服务名对相应的服务进行操作 看左面

docker compose 网络管理

  1. ​默认场景下,使用docker compose编排服务,会自动创建对应的网络。可以使用docker network ls
    以及docker inspect 网络id 进行相关的查询。
  2. 可以在compose文件中,使用networks
    定义一个网络,并在服务中使用networks属性加入一个自定义网络。这时候有三种结果,如果所有的服务都加入到了自定义网络,则docker,会创建自定义网络,并将所有的服务容器添加到对应的网络中,如果没有任何服务声明加入自定义网络,则docker会创建默认网络,然后将容器添加到默认网络,而不会创建自定义网络,如果有的服务声明添加到自定义网络,而有的服务没有声明,则docker会创建两个网络,一个是自定义网络,而另一个是默认网络,并将对应的容器添加到对应的网络中。
  3. 使用固定ip策略
version: '3.3'
services:
  cslcp_web:
    image: "cslcp_web_image:v01"
    ports:
      - "19090:8080"
    build:
      context: "../web/"
      dockerfile: "Dockerfile"
    networks:
      - "cslcp_net"
  cslcp_mysql:
    image: "mysql"
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.100
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
  cslcp_centos:
    container_name: 'test_centos'
    image: "centos"
    tty: true
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
networks:
  cslcp_net:
    ipam:
      config:
        - subnet: "192.168.13.0/24"
          gateway: "192.168.13.1"
  1. 使用服务策略
    当compose启动成功后可以直接使用ping 访问服务名
  2. 使用网络别名策略
networks:
  cslcp_net:
    ipam:
      config:
      - gateway: 192.168.13.1
        subnet: 192.168.13.0/24
services:
  cslcp_centos:
    container_name: test_centos
    depends_on:
      cslcp_web:
        condition: service_started
    image: centos
    links:
    - cslcp_web:cw
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
    tty: true
  cslcp_mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root
    image: mysql
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.100
    ports:
    - published: 13306
      target: 33064
  cslcp_web:
    build:
      context: /root/docker/dockercompose/cslcp/web
      dockerfile: Dockerfile
    image: cslcp_web_image:v01
    networks:
      cslcp_net: null
    ports:
    - published: 19090
      target: 8080
version: '3.3'
  1. 使用container 策略
version: '3.3'
services:
  cslcp_web:
    image: "cslcp_web_image:v01"
    build:
      context: "../web/"
      dockerfile: "Dockerfile"
    depends_on:
      - "cslcp_centos"
    network_mode: "service:cslcp_centos"
  cslcp_mysql:
    image: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    depends_on:
      - "cslcp_centos"
    network_mode: "service:cslcp_centos"
  cslcp_centos:
    container_name: 'test_centos'
    image: "centos"
    tty: true
    ports:
      - "17070:8080"
      - "13306:3306"
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
networks:
  cslcp_net:
    ipam:
      config:
        - subnet: "192.168.13.0/24"
          gateway: "192.168.13.1"

制作整理不易,以上内容均为原创(参考了部分官方文档和老师整理的案例)。如要引用请附上本文链接,如有疑问可以在评论区畅所欲言,作者看到会第一时间回复,欢迎交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker的服务编排 的相关文章

  • 检查没有 .svn 文件的 svn 存储库

    我的专用服务器 Centos 5 5 上有一个 svn 存储库 位于 var svn myRepository 我只想将这些文件复制到我的生产文件夹 var www myWebapp 中 据我了解 SVN 我只能在本地项目文件夹上使用 sv
  • Bash 脚本错误 [重复]

    这个问题在这里已经有答案了 我想知道下面的脚本有什么错误 我收到错误为 command not foundh line 1 command not foundh line 2 其连续的 我试过添加 但现在工作请告诉我该怎么做 bin bas
  • 如何从 swagger 文档生成静态 html 文件?

    我创建了一个 Swagger 文档yaml文件位于 api swagger swagger yaml 现在我想分享一个静态 HTML 文档及其定义 但它已在招摇项目 https github com swagger api swagger
  • Pthread互斥锁由不同线程解锁

    一个天真的问题 我之前读到过 MUTEX 只能由锁定它的线程解锁 但我写了一个程序THREAD1锁定 mutexVar 并进入睡眠状态 然后THREAD2可以直接解锁mutexVar做一些操作并返回 gt 我知道每个人都说我为什么要这样做
  • 在 Windows 下使用 linux 实用程序的最佳方法是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Linux 实用程序 如 sed awk 和其他 shell 脚本功能 非常棒 但当我在 Windows 上进行开发并且无法使用其中任何一
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac
  • 分割 tar.bz2 文件并单独提取每个文件

    我可以将一个大的 tar bz2 文件分割成几个较小的文件并在 Ubuntu 中单独提取这些小 tar bz2 文件吗 Thanks 我认为这不容易实现 A tar bz2是单个流 它没有像这样的索引zip这将允许跳到存档中特定文件的开头
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • 超立方体错误。非法的最小或最大规格

    尝试从这里运行示例代码http tess4j sourceforge net codesample html http tess4j sourceforge net codesample html我收到一条错误消息 Error Illega
  • 主动\被动模式下 FTP 服务器的适当 iptables 规则

    我在 CentOS6 上安装了 ProFTPD 服务器 如果我使 ftp 本地主机 我可以正确连接 但如果我从外部尝试 我会收到消息 没有到主机的路由 但有一条到主机的路由 因为我是通过 SSH 连接的 我尝试添加以下 iptable 规则
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • Centos/Linux 将 logrotate 设置为所有日志的最大文件大小

    我们使用 logrotate 并且它每天运行 现在我们遇到了一些情况 日志显着增长 阅读 gigabaytes 并杀死我们的服务器 所以现在我们想为日志设置最大文件大小 我可以将其添加到 logrotate conf 中吗 size 50M
  • 将 file.lib 构建为可在 linux 上使用的 file.a

    我正在尝试将 api 从 Windows 移植到 Linux 到目前为止 我已经完成了 file cpp 和 file h 的工作 但我仍然有一个指定给 Windows 的库 lib 这是 api 工作所必需的 我怎样才能从这个库构建一个可
  • 在扩大或缩小 StatefulSet 之前停止 StatefulSet 中的所有 Pod

    我的团队目前正在致力于将 Discord 聊天机器人迁移到 Kubernetes 我们计划使用一个有状态集对于主要的机器人服务 因为每个Shard https discord com developers docs topics gatew
  • 如何从内部找到C++ Linux程序的完整路径?

    我有这个要求 我需要从内部找到 C 程序的完整路径 对于Windows 我有以下解决方案 argv 0 可能包含也可能不包含完整路径 但我需要确定 TCHAR drive MAX DRIVE dir MAX DIR base MAX FNA
  • 检测后台操作

    在C中 检测程序在 后台模式 下调用的方法是什么 我有一个程序想要以交互方式或在后台启动 我怎样才能检测到我不应该从标准输入读取并以 已停止 tty 输入 状态结束 我应该测试 stdin 是否已关闭 我怎样才能做到这一点 编辑 isatt
  • Powershell从Linux客户端连接到Windows远程

    我正在尝试从我的 Linux 工作站远程连接到 Windows 计算机 我在 Arch Linux 工作站上安装了 powershell 目前正在尝试连接到主机 在主机上 Enable PSRemoting 然后允许所有主机Set Item
  • 使用 Mac M1 在 Docker 容器内的 pip 安装中找不到 Tensorflow

    我正在尝试使用新的 Mac M1 运行一些项目 这些项目已经在英特尔处理器上运行 并被使用英特尔的其他开发人员使用 我无法构建这个简单的 Dockerfile FROM python 3 9 RUN python m pip install
  • Linux 从设备本身运行的脚本卸载设备

    我在路径中安装了一个 iso 映像 mnt iso 在这个 iso 中我有一个安装脚本 install sh 我从 iso 运行安装脚本 最后脚本询问用户是否要卸载 iso 本身 如果用户按 y 脚本将执行以下代码 cd umount mn
  • 导入错误:没有名为“tensorrt”的模块

    我使用 Debian 安装在我的虚拟机上安装了 TensorRT 如果我运行 dpkg l grep TensorRT 我会得到预期的结果 ii graphsurgeon tf 5 0 2 1 cuda10 0 amd64 GraphSur

随机推荐

  • 51单片机中断系统的原理和运用

    QX MCS51开发板上使用的是DIP封装 双列直插式 有40只引脚 40只引脚按其功能来分 有三类 一 电源和时钟引脚 Vcc Vss XTAL1 XTAL2 电源引脚接入单片机工作电源 Vcc 40脚 接 5V电源 Vss 20脚 接地
  • java 毫秒转分钟和秒_Java程序将毫秒转换为分钟和秒

    Java程序将毫秒转换为分钟和秒 在上面的程序中 您将学习如何在Java中将毫秒分别转换为分钟和秒 示例1 将毫秒分别转换为分钟和秒 import java util concurrent TimeUnit public class Mil
  • 【Qt】错误:‘connect‘ was not declared in this scope 解决方法

    这种错误主要出现在在非继承QObject的类中或者一般函数中使用connect导致 原因是connect是QObject的一个static方法 将connet替换为QObject connect即可
  • BUUCTF-随便注、Exec、EasySQL、Secret File

    目录 强网杯 2019 随便注 ACTF2020 新生赛 Exec SUCTF 2019 EasySQL 极客大挑战 2019 Secret File 强网杯 2019 随便注 打开场景 里面有输入框 上面自带一个1 点击提交 有回显 输入
  • 毕业设计 基于单片机的双足机器人

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • starRocks配置两个数据源的多个IP进行访问数据库查询

    1 yml文件配置 注意mysql为master datasource mysql master type com alibaba druid pool DruidDataSource driver class name com mysql
  • 手把手教你如何使用Fiddler及使用图文详解

    01 什么是 Fiddler Fiddler 是一个 HTTP 协议调试代理工具 它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯 Fiddler 提供了电脑端 移动端的抓包 包括 http 协议和 https 协议都可以捕获到报
  • linux中如何修改文件夹的用户权限

    linux中如何修改文件夹权限 linux中 可以使用chown命令来修改文件夹的用户权限 环境 windows 7 virtualbox fedora 15 kde 下面举例给出 1 以普通用户admin登录linux 利用su 切换到r
  • MySQL数据库基本操作-正则表达式

    文章目录 一 基本介绍 二 的用法 三 的用法 四 的用法 五 和 的用法 六 和 的用法 七 的用法 八 的用法 九 的用法 一 基本介绍 正则表达式 regularexpression 描述了一种字符串匹配的规则 正则表达式本身就是一个
  • SpringMVC-整合SSM框架(狂神学习笔记)2021-10-03

    SpringMVC 狂神 整合SSM框架 1 整合SSM 1 环境要求 环境 IDEA Eclipse MySQL 5 7 Tomcat 9 Maven 3 6 要求 需要熟练掌握MySQL数据库 Spring JavaWeb及MyBati
  • day01(Flume)

    简介 一 概述 Flume是Apache提供的一套用于进行日志收集 汇聚和传输的框架 2 Flume的版本 Flume ng 和Flume og 不兼容 a Flume1 x Flume ng b Flume0 X Flume og htt
  • [leetcode 双周赛 6] 1152 用户网站访问行为分析

    目录 1152 Analyze User Website Visit Pattern 用户网站访问行为分析 描述 思路 代码实现 1152 Analyze User Website Visit Pattern 用户网站访问行为分析 描述 为
  • 依赖注入_生命周期

    目录 一 生命周期 二 三种不同生命周期对象比较 1 AddTransient 瞬时生命周期 2 AddSingleton 单例 3 AddScoped 总结 三者的区别 一 生命周期 1 给类构造函数中打印 看看不同生命周期的对象创建使用
  • 前端高频面试题

    我们在找工作时 需要结合自己的现状 针对意向企业做好充分准备 什么是前端开发 前端开发的作用是什么 前端开发是指利用HTML CSS和JavaScript等技术 开发用户在浏览器中直接与之交互的网页或应用的过程 前端开发的作用是将后端提供的
  • 动态规划,计算股票最大收益

    问题描述 给定一个整数数组prices 它的第i个元素prices i 是一支给定的股票在第i天的价格 设计一个算法来计算你所能获取的最大利润 算法思路 动态规划 C 源码 class Solution public 1 最多交易一次 in
  • 详细!PyCharm连接MySQL数据库教程+心得

    一家懂得用细节留住客户的3年潮牌老店我必须支持 luyao1931 第一步 安装MySQL 下载地址 https dev mysql com downloads mysql 下载完后 我们将 zip 包解压到相应的目录 这里我将解压后的文件
  • 二叉树问题

    什么是二叉树 平衡二叉树 红黑二叉树 有哪些区别和应用 二叉树 Binary Tree 是结点的有限集合 这个集合或者为空 或者是由一个根结点和两颗互不相交的分别称为左子树和右子树的二叉树组成 二叉树中的每个结点至多有两棵子树 且子树有左右
  • 堆(Heap)——(一)优先队列

    堆可以利用数组 链表或者搜索二叉树实现 但是最好方法是利用完全二叉树 1 完全二叉树 完全二叉树从根结点到倒数第二层满足完美二叉树 最后一层可以不完全填充 其叶子结点都靠左对齐 如下图 重新构建一种树 专注于插入和删除最大或最小 即 根节点
  • Zabbix的问题日志清单查看

    Zabbix的问题日志清单查看 一 检查Zabbix状态 二 检查仪表表盘告警情况 三 检查所有邮件告警日志 四 触发器日志查看 五 当前告警查询 六 问题清单查询 一 检查Zabbix状态 二 检查仪表表盘告警情况 三 检查所有邮件告警日
  • docker的服务编排

    docker 服务编排 docker compose命令 docker compose 网络管理 想学习更全面的docker知识可以点击右侧 Docker的概念及基本指令学习 全 docker 服务编排 docker 服务编排也叫docke