Docker 哲学 - compose.yaml 指令

news2024/10/12 18:23:53

compose.yaml 的 image commond working_dir 和 dockerfile的 from cmd workdir 区别在哪里 。为什么 dockerfile制定过了。compose还要再写一个。是处于个性化还是 有不同的意义

如果 dockerfile 的 from 是 node:16 ,compose.yaml 的 images 是 node:18 那么 直接 docker run 用的 就是默认 16 的node 但是 compose up启动用的就是 18的node

 depends_on:

总结 :

depends_on 可以设置容器的启动顺序,如果一个服务依赖另一个服务 ,那么就可以自定义控制

所以来服务的状态来启动目标服务

有几种语法:

depends_on:
      - db
      - redis

short syntax

1、跟依赖服务的名字

  • Compose creates services in dependency order. In the following example, db and redis are created before web.

  • Compose removes services in dependency order. In the following example, web is removed before db and redis.

  • Compose guarantees dependency services have been started before starting a dependent service. Compose waits for dependency services to be "ready" before starting a dependent service.

  • 弊端:不会等依赖服务完全初始化完成 只是一个 ready

2、

depends_on:

         可以有三个属性:

                restart  设置为 true时 依赖服务有更新,compose自动重启

                condition:  自定义条件决定什么时候启动该服务 有三个属性

                required: 是否与依赖服务之间存在 上下文关系

      

      condition 的三个属性

           service_started :不会等依赖服务完全初始化完成 只是一个 ready 等同直接写服务名

           service_healthy: 该属性的值 由 另一个容器的 service下字段 healthy_check 决定 

           service_completion_successfully:依赖服务完全初始化

            

介绍 

  healthy_check:

 

version: '3'

services:
  rabbitmq:
    hostname: rabbitmq_host
    container_name: 'mq'
    image: rabbitmq:3.9.11-management
    restart: always
    ports:
      - "5772:5672"  # AMQP
      - "15772:15672"  # Web UI
    networks:
      - app-network
    environment:
      RABBITMQ_DEFAULT_USER: root
      RABBITMQ_DEFAULT_PASS: pwd
      RABBITMQ_DEFAULT_VHOST: /
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq/mnesia

    healthcheck:
      test: [ "CMD", "rabbitmq-diagnostics", "ping" ]
      interval: 50s
      timeout: 5s
      retries: 3


  selenium:
    container_name: 'selenium'
    image: selenium/standalone-chrome
    restart: always
    ports:
      - "4444:4444"

    networks:
      - app-network

    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:4444/wd/hub/status" ]
      interval: 30s
      timeout: 5s
      retries: 3


  db:
    container_name: 'mysql8'
    image: mysql:8.0.32
#    hostname: mysql_host
    user: root
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci

    environment:
      LANG: C.UTF-8
      MYSQL_ROOT_PASSWORD: pwd
      MYSQL_DATABASE: yinlian

    ports:
      - "3306:3306"

    volumes:
      - "./data/db/data:/var/lib/mysql"
      - "./data/db/mysql-files:/var/lib/mysql-files"
      - "./build/docker/mysqldb/my.cnf:/etc/my.cnf"

    networks:
      - app-network

    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
      interval: 30s
      timeout: 5s
      retries: 3

  app-producer:
    container_name: 'producer'
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8001:8001"

    command: ['echo','hello world, Frank']
    depends_on:
      db:
        condition: service_healthy

      rabbitmq:
        condition: service_healthy

      selenium:
        condition: service_healthy

    networks:
      - app-network


networks:
  app-network:
    driver: bridge

volumes:
  rabbitmq_data:
    driver: local

ports

compose.yaml 的顶级的 volumes 和 services 的 volumes 的区别

短格式 语法 short syntax   vs  长格式语法 long syntax

 长格式 无法配置匿名卷,请用短格式

为什么我每次启动相当于重新启动,副本一直是 1

如果有多个 volume 或bind mount 有同一个 挂载点(指向同一个目录)以最后一个为准

执行 docker compose config 

没有 

$(pwd):/app 和 vol2:/app 

只有 compose-vol

修改 为  $(pwd):/app1  vol2:/app2 后再次 config

报错:

不能使用 $(pwd)  可以使用 ./ 

如果在顶级设置的 volumes 或者 networks  字段 没有在 srevices 里面被引用,那么 docker compose 不会 创建 该 volume 或者 network

image 和 build 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Docker 部署 Photopea 在线 PS 工具

1)Photopea 介绍 GitHub:https://github.com/photopea/photopea 官方手册:https://www.photopea.com/learn/ Adobe 出品的「PhotoShop」想必大家都很熟悉啦,但是「PhotoShop」现在对电脑配置要求越来越高,体积越来越大…

00-JAVA基础-反射机制

反射 什么是反射 在Java中,反射(Reflection)是Java语言的一个特性,它允许程序在运行时检查类、接口、字段和方法的信息。通过反射,Java代码能够动态地创建对象、调用方法、改变字段的值等,而无需在编译时…

基础篇3 浅试Python爬虫爬取视频,m3u8标准的切片视频

浅试Python爬取视频 1.页面分析 使用虾米视频在线解析使用方式:https://jx.xmflv.cc/?url目标网站视频链接例如某艺的视频 原视频链接 解析结果: 1.1 F12查看页面结构 我们发现页面内容中什么都没有,video标签中的src路径也不是视频的数据。 1.2 …

linux清理缓存垃圾命令和方法介绍

在Linux系统中,清理缓存和垃圾文件可以通过多种方法完成,这些方法旨在释放磁盘空间、提高系统性能。以下是一些常用的方法,结合了搜索结果中的信息: 1. 使用sync和echo命令清除RAM缓存和交换空间1 清除页面缓存(Page …

不讲概念,讲实操,mysql 分表模糊查询、分页查询 及 merge 表的使用

1.Mysql merge合并表的要求 1.合并的分表必须是 MyISAM 引擎,MyISAN引擎是不支持事务的。2.Merge表只保证合表后数据唯一性,合表前的数据可能会存在重复。3.表的结构必须一致,包括索引、字段类型、引擎和字符集。4.删除 tb_member1 分表正确…

原理图设计的通用规范

原理图各页内容依次为:封面、目录、电源、时钟、CPU、存储器、逻辑、背板(母板)接口等。 原理图上所有的文字方向应该统一,文字的上方应该朝向原理图的上方(正放文字)或左方(侧放文字&#xff…

Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10)

原文:Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10) - 知乎 阿里的FunAsr对Whisper中文领域的转写能力造成了一定的挑战,但实际上,Whisper的使用者完全可以针对中文的语音做一些优化的措施,换句话说,…

【LeetCode热题100】51. N 皇后(回溯)

一.题目要求 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方…

hadoop:案例:将顾客在京东、淘宝、多点三家平台的消费金额汇总,然后先按京东消费额排序,再按淘宝消费额排序

一、原始消费数据buy.txt zhangsan 5676 2765 887 lisi 6754 3234 1232 wangwu 3214 6654 388 lisi 1123 4534 2121 zhangsan 982 3421 5566 zhangsan 1219 36 45二、实现思路:先通过一个MapReduce将顾客的消费金额进行汇总,再通过一个MapReduce来根据金…

RocketMQ是什么?

文章目录 一、RocketMQ是什么?二、RocketMQ 应用场景三、RocketMQ 优缺点1.优点2、缺点 一、RocketMQ是什么? RocketMQ 是一款纯 java、分布式、队列模型的消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。 二、Rocke…

java数据结构与算法刷题-----LeetCode417. 太平洋大西洋水流问题

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 深度优先遍历 深度优先遍历 解题思路:时间复杂度O( …

DIY蓝牙键盘(1) - 理解 键盘报文(免费)

DIY蓝牙键盘(1) - 理解键盘报文 1. 键盘报文体验 一个键盘对于用户的体验是,用户按按键A他能看到字母A会在主机上显示出来。那这是如何实现的? 其实很简单,只要键盘发送下面的两个报文给主机,字母A就能在主机上显示出来。 (1)…

【Qt】Ubuntu20.04.6+Qt5.15.2+QtCreator10.0.1无法输入中文

1、前提条件 1)已经安装了fcitx sudo apt install fcitx sudo apt install fcitx-pinyin sudo apt install fcitx-bin fcitx-table-all sudo apt install fcitx-qt52)系统已经配置fcitx 3)将系统下 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitx…

CSS3新增的语法(三)【2D,3D,过渡,动画】

CSS3新增的语法(三)【2D,3D,过渡,动画】 10.2D变换10.1. 2D位移10.2. 2D缩放10.3. 2D旋转10.4. 2D扭曲(了解)10.5. 多重变换10.6. 变换原点 11. 3D变换11.1. 开启3D空间11.2. 设置景深11.3. 透视点位置11.4. 3D 位移11…

java数据结构与算法刷题-----LeetCode79. 单词搜索

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 回溯深度优先遍历 回溯深度优先遍历 解题思路:时间复…

Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能

Vue 大文件切片上传实现指南 背景 在Web开发中,文件上传是一个常见的功能需求,尤其是当涉及到大文件上传时,为了提高上传的稳定性和效率,文件切片上传技术便显得尤为重要。通过将大文件切分成多个小块(切片&#xff0…

Rust线程间通信通讯channel的理解和使用

Channel允许在Rust中创建一个消息传递渠道,它返回一个元组结构体,其中包含发送和接收端。发送端用于向通道发送数据,而接收端则用于从通道接收数据。不能使用可变变量的方式,线程外面修改了可变变量的值,线程里面是拿不…

UE5启用SteamOS流程

一、安装OnlineSubsystemSteam插件 1、在UE里安装OnlineSubsystemSteam 2、设置默认开始地图 3、设置DefaultEngine.ini文件: 打开项目根目录/Config/DefaultEngine.ini文件 打开官网的配置说明 复制并粘贴到该文件中 4、设置运行模式 5、测试 确保Steam平台已…

云原生:应用敏捷,华为视角下的应用现代化

Gartner 也提出,到 2023 年,新应用新服务的数量将达到 5 亿,也即是说:“每个企业都正在成为软件企业”。据IDC 预测,到 2025 年三分之二的企业将成为多产的“软件企业”,每天都会发布软件版本。越来越多的企…

【HTML】简单制作一个动态3D正方体

目录 前言 开始 HTML部分 JS部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],JS的文件名改…