Docker 基础使用(5)Compose

文章目录

  • Docker Compose 基础认识
  • Docker Compose 基础语法
  • Docker Compose 基础指令
  • Docker Compose 使用实例

Docker 基础使用(0)基础认识
Docker 基础使用(1)使用流程概览
Docker 基础使用(2)镜像与容器
Docker 基础使用(3)存储卷
Docker 基础使用(4)网络管理
Docker 基础使用(5)Compose

Docker Compose 基础认识

Docker Compose 的作用

docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。

简单理解:根据前面的学习,在容器启动时,由于 存储卷、网络管理、容器间的相互依赖等因素, 使得启动指令参数变的复杂,并且通常需要分多段指令执行。并且难以管理,为了解决这个问题,便需要使用 Docker Compose 。Docker Compose 作用即为容器编排。

Docker Compose 服务和项目的概念

服务 ( service ): 一个应用的容器。
项目( project ): 由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。 即一个docker-compose.yml通过组织容器定义项目。

Docker Compose 的具体功能

• 启动,停止和重建服务
• 查看正在运行的服务的状态
• 流式传输运行服务的日志输出
• 在服务上运行一次性命令

Docker Compose 的安装

一般来说安装Docker时会自动安装Docker Compose 。这个时候只需要使用 docker compose version指令来验证docker compose 应用是否存在即可。
在这里插入图片描述

Docker Compose 基础语法

首先看一个简单的 yaml docker-compose.yml配置文件。可以直观看到其是如何配置的,之后便是一些字段、语法、指令的说明。(仅作了解,在这个GPT那么发达时间点上,没必要记)

version: '3'
services:
  服务名称:
    image: 镜像名称:标签
    container_name: 容器名称
    ports:
      - "主机端口:容器端口"
    volumes:
      - 主机路径:容器路径
    environment:
      - 环境变量=值
    networks:
      - 网络名称

networks:
  网络名称:
    driver: bridge
image字段形式
image: redis
image: redis:5
image: 
redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398
bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis

command字段形式
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000

environment 字段
environment 添加环境变量
可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,
以确保 YML 解析器不会将其转换为 True 或 False

#map 语法
environment:
 RACK_ENV: development
 SHOW: "true"
 USER_INPUT:
#数组语法
environment:
 - RACK_ENV=development
 - SHOW=true
 - USER_INPUT
networks字段:

services:
 frontend:
 image: awesome/webapp
 networks:
 - front-tier
 - back-tier
 monitoring:
 image: awesome/monitoring
 networks:
 - admin
 backend:
 image: awesome/backend
 networks:
 back-tier:
 aliases:
 - database
 admin:
 aliases:
 - mysql

docker compose networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
  admin:
    driver: bridge
这段代码定义了三个网络:front-tier、back-tier 和 admin。
这些网络都是使用默认的 bridge 驱动程序,用于容器间的通信和隔离。

front-tier: 可以用于前端服务的容器通信,例如Web服务器或者其他前端服务。
back-tier: 可以用于后端服务的容器通信,例如数据库或者消息队列等后端服务。
admin: 可以用于管理服务的容器通信,例如管理控制台或者日志收集服务等。
volumes 字段

services:
 db:
 image: postgres:latest
 volumes:
 - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
 - "/localhost/data:/var/lib/postgresql/data"
 
#完整语法
services:
 backend:
 image: awesome/backend
 volumes:
 - type: volume
 #命名卷
 source: db-data
 target: /data
 volume:
 nocopy: true
 #绑定卷
 - type: bind
 source: /var/run/postgres/postgres.sock
 target: /var/run/postgres/postgres.sock

此外还有许多字段,总结一下它们的整体结构

version:  表示当前使用的 docker-compose 语法的版本
services1: # 服务,可以存在多个
servicename: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,
如果不是集群模式相当于 docker run 的时候指定的一个名称,
 #集群(Swarm)模式是多个容器的逻辑抽象
 image: # 必选,镜像的名字
 command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令
 environment: # 可选,等价于 docker container run 里的 --env 选项
设置环境变量
 volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据
卷
 networks: # 可选,等价于 docker container run 里的 --network 选项
指定网络
 ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映
射
 expose: # 可选,指定容器暴露的端口
 build: #构建目录
 depends_on: #服务依赖配置
 env_file: #环境变量文件
servicename2:
.....

Docker Compose 基础指令

- **docker-compose up: 通过此命令启动docker-compose文件定义的所有服务。
- **docker-compose down: 停止并移除由docker-compose启动的所有容器。
- **docker-compose ps: 显示docker-compose启动的所有服务的状态。
- **docker-compose exec: 在正在运行的容器中执行命令。
- **docker-compose build: 构建或重新构建docker-compose文件定义的服务。
- **docker-compose logs: 显示docker-compose服务的日志输出。
- **docker-compose pull: 从docker镜像仓库拉取服务的最新镜像。
- **docker-compose restart: 重启docker-compose服务。
- **docker-compose pause: 暂停docker-compose服务。
- **docker-compose unpause: 取消暂停docker-compose服务。

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。 可以使用常用的选项如-f, --file 指定使用的 Compose 模板文件。(默认为 docker-compose.yml文件) 还可以使用-p, --project-name 指定项目名称。(默认将使用所在目录名称作为项目名)

Docker Compose 使用实例

(演示一个Docker Compose完整且简易的使用流程,注意docker-compose.yml依靠缩进确定字段范围,类似python)

完整指令 
1. 创建并进入docker-compose.yml目录
mkdir testcompose 
cd ./testcompose 

2. 利用vim创建并编辑docker-compose.yml文件  
# 进入文件
vim docker-compose.yml 
# 编辑内容
version: "3.8"
services:
  web:
    image: nginx:1.24.0
    environment:
      TEST: 1
    ports:
      - 8979:80
    networks:
      - mytestnet
    volumes:
      - ./mynginxhome:/usr/share/nginx/html
    depends_on:
      - mysql
      - redis
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "wsk"
    networks:
      - mytestnet
    volumes:
      - /data/maxhou/mysqldata/varlib/:/var/lib/mysql
    healthcheck:
      test: mysql --user=root --password='wsk' -e "SELECT 1;"
      interval: 10s
      timeout: 5s
      retries: 10
  redis:
    image: redis:7
    networks:
      - mytestnet
    healthcheck:
      test: redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
networks:
  mytestnet:

 
3. 检查所编写的docker-compose.yml文件语法是否正确
docker compose config

4.启动
docker compose up -d

5. 停止 / 删除服务
docker compose stop
docker compose down
 

在这里插入图片描述
7.

(报错)
在这里插入图片描述
(正确)
在这里插入图片描述
4 启动如遇到以下面的情况说明在加载镜像源,由于默认从外网加载,所以速度很慢,甚至无法加载。
在这里插入图片描述
此问题可参考以下解决方法
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024中国海洋装备展暨航海装备大会(福州海峡国际会展中心)

关于邀请参加2024中国海洋装备博览会的函 为加快推动海洋强国建设。在福建省人民政府的大力支持下,第二届中国海洋装备博览会将于2024年11月15-18日在福州举办。 博览会将进一步聚焦产业链和供应链协同创新,着力推动现代海洋产业体系建设,促进海洋科技…

Git保姆级教程

目录 Git是什么,为什么要学这个工具? 码云注册并创建仓库 Git安装 查看本地仓库状态 添加到暂存区 提交到本地库 修改文件 版本回退 创建、切换和删除分支 合并分支 克隆远端库到本地 将本地库推送到远端库 命令设置别名 Git是什么&#xf…

人工智能在【多模态:多组学+复发转移+肿瘤起源】的最新研究进展|顶刊速递·2024-06-11

小罗碎碎念 本期文献速递的主题是——人工智能多模态/多组学肿瘤的复发转移肿瘤起源。 今天的六篇文章比较特殊,大家要好好留心一下,因为选题是老板亲自下场定的,机会难得。 最近状态不太好,这周还要在北京待几天处理些事情&#…

算法day25

第一题 394. 字符串解码 解法:模拟栈的完成上述的操作; 分析: 下面以如图的字符串来分析; 首先定义一个数字栈用来存放数字,同时定义一个容器stringbuffer栈,里面用来存放字符串; 1、遇到数字&…

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA(AMBA 1) 第二代AMBA(AMBA 2) 第三代AMBA(AMBA 3) 第四代AMBA(AMBA 4) 第五代AMBA(AMBA 5) AMBA协议简介 ASB&#x…

VRRP多备份组(华为)

#交换设备 VRRP多备份组 当 VRRP 配置为单备份组时,业务全部由 Master 设备承担,而 Backup 设备完全处于空闲状态,没有得到充分利用。VRRP 可以通过配置多备份组来实现负载分担,有效地解决了这一问题。 VRRP 允许同一台设备的…

排序方法——《快速排序》

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan.                        …

10、系统安全及应用

1、账号安全 用户的账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用户账号才能进入计算机。 1.1 系统账号清理 在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其…

Java版本+企业电子招投标系统源代码+支持二开+Spring cloud +鸿鹄电子招投标系统

随着公司的迅速扩张,对内部采购管理的要求也随之提高。为了构建一个公平、透明、公正的采购体系,并有效降低采购成本,我们决定开发一款符合国家电子招投标法规的电子招标采购软件。该软件将提升招投标工作的公开性和透明度,通过电…

macOS Sequoia 开发者测试版下载和安装教程

macOS Sequoia 于 2024年6月10日在WWDC 2024 上发布,里面添加了AI、窗口排列、操控iPhone等功能,目前发布的为测试版本,可能很多人不知道怎么去下载安装,现在小编教一下大家怎么安装最新的 macOS Sequoia 开发者测试版。 下载 mac…

Qt系统相关

本文目录 1.Qt事件事件的处理标签事件鼠标事件滚轮事件按键事件定时器事件窗口事件事件派发器 2.Qt文件操作QFile的基本使用 3.Qt多线程使用线程线程锁connect的第五个参数 条件变量和信号量 4.Qt网络编程UDP SocketTCP SocketQTcpServerQTcpSocket HTTP的编写 5.QT多媒体播放音…

vivado HW_SIO_GT

描述 Xilinx的可定制LogiCORE™IP集成误码率测试仪(IBERT)核心 FPGA是为评估和监控千兆收发器(GTs)而设计的。IBERT core支持系统内串行I/O验证和调试,使您能够进行测量和优化 您的设计中的高速串行I/O链路。参考综合误…

【ARM Coresight Debug 系列 -- ARMv8/v9 软件实现断点地址设置】

请阅读【嵌入式开发学习必备专栏 】 文章目录 ARMv8/v8 软件设置段带你断点地址软件配置流程代码实现 ARMv8/v8 软件设置段带你 在ARMv8/9架构中,可以通过寄存器 DBGBVR0_EL1 设置断点。这个寄存器是一系列调试断点值寄存器中的第一个DBGBVRn_EL1,其中n…

Transformer结合U-Net登上Nature子刊!最新成果让精度和效率都很美丽

最近一种基于视觉Transformer改进的U-Net来检测多光谱卫星图像中甲烷排放的深度学习方法登上了Nature子刊。与传统方法相比,该方法可以识别更小的甲烷羽流,显著提高检测能力。 这类Transformer与U-Net结合的策略是一种创新的深度学习方法,它…

大模型生成短视频

最近看到一个开源项目可以通过AI生成短视频,然后尝试了下,感觉还不错,下面是具体步骤。 项目名叫moneyprinterTurbo,它本意是对接到Youtube,自动生成视频并上传到Youtube获取流量赚钱,所以项目名叫moneypri…

函数计时的方法

1. console 对象 可以调⽤ console 对象的 time 和 timeEnd ⽅法来对⼀段程序进⾏时间计算。例如: function fib(n) {if (n 0) return;let a arguments[1] || 1;let b arguments[2] || 1;[a, b] [b, a b];fib(--n, a, b); } console.time(); // 记时开始 fib…

纹理贴图必须要输入顶点坐标或纹理坐标吗

最近知识星球的一位同学,面试时被问到:纹理贴图必须要输入顶点坐标或纹理坐标吗? 他一下子被这个问题问蒙了,虽然他知道正确答案是否定的,但是说不上来理由。 这个就引出了文本提到的全屏三角形,它不需要顶点缓冲区,而是利用顶点着色器直接生成所需的顶点坐标和纹理坐标…

推荐一些企业热门的 DevOps 工具(非常详细)零基础入门到精通,收藏这一篇就够了

最近一段时间,我们见证了 DevOps 技术的飞速发展。当今流行且功能强大的工具可能会成为下一年度的过时工具,甚至可能很快被另一种工具取代。如前所述,作者的目的不是通过这篇文章来评判哪些工具最受欢迎或功能最全,而是让读者全面…

【每日一题】错误的集合

错误的集合 ✨审题:在一个1-n的数组中,会有一个元素重复,一个元素丢失;👉目标;找到重复的元素和丢失的元素并放入一个数组中返还回去 ✨有没有想到单身狗问题的进阶版那个思路,找2个单身狗,一个…

tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值)

目录 延迟应答 引入 介绍 原则 拥塞控制 引入 网络出现拥塞 引入 介绍 介绍 拥塞窗口 介绍 决定滑动窗口的大小 慢启动 介绍 为什么要有慢启动 阈值 算法 总结 延迟应答 引入 发送方一次发送更多的数据,发送效率就越高 因为要写入网卡硬件的io速度很慢,尽量…