Docker 基础使用(5)Compose

news2024/11/18 6:01:37

文章目录

  • 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.coloradmin.cn/o/1812082.html

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

相关文章

MySQL-数据处理函数(-1)

033-数据处理函数之获取日期时间 now():获取的是执行select语句的时刻。sysdate():获取的是执行sysdate()函数的时刻。 select now(), sleep(2), sysdate();获取当前日期 select curdate(); select current_date(); select current_date;获取当前时间…

30岁迷茫?AI赛道,人生新起点

前言 30岁,对于许多人来说,是一个人生的分水岭。在这个年纪,有些人可能已经在某个领域取得了不小的成就,而有些人则可能开始对未来的职业方向感到迷茫。如果你正处于这个阶段,那么你可能会问自己:30岁转行…

numpy创建二维数组

1.numpy.array(object, dtypeNone, copyTrue, orderK, subokFalse, ndmin0) # 创建一个数组,将输入对象转换为数组。 # 如果输入对象是列表,元组或数组,则创建一个数组,并将输入对象中的元素复制到数组中。 arr np.array([[1, 2…

低代码平台与无代码平台,有哪些相同点和不同点

低代码和无代码 低代码(Low-Code)是一种软件开发方法,它使得开发人员能够通过图形界面、拖放组件和模型驱动的逻辑,快速地构建和部署应用程序,而无需编写大量的代码。而低代码平台就是使用低代码的方式进行开发&#…

STL——Stacks容器

一、stack 1.操作 语法: <><>!所有的这些操作可以被用于堆栈. 相等指堆栈有相同的元素并有着相同的顺序。 2.empty 语法: bool empty();如当前堆栈为空&#xff0c;empty() 函数 返回 true 否则返回false. 3.pop 语法: void pop();pop() 函数移除堆栈中最顶层元…

Nginx 版本升级方案

因 nginx发现漏洞、需 Nginx 的版本进行更新&#xff0c;需要用到Nginx服务器提供的平滑升级功能。 一、Nginx安装 Linux服务器 离线安装 nginx_linux 离线安装nginx 依赖包 百度云-CSDN博客 二、查看已安装的 Nginx 版本信息&#xff0c;configure 配置信息 ## nginx 目录 /…

数据爱好者的综合指南——Google篇

在数据驱动的决策世界中&#xff0c;获取准确而全面的信息至关重要。Google 搜索结果抓取是一种强大的技术&#xff0c;可以让企业、调查人员和研究人员从搜索引擎结果中提取可靠的数据。本综合指南将深入研究 Google 搜索结果的最佳实践、工具和道德考量&#xff0c;以确定能够…

C# Interlocked 原子操作

目录 注解 方法 适用于 案例 1&#xff1a;Add 对两个整数进行求和并用和替换第一个整数&#xff0c;上述操作作为一个原子操作完成 2&#xff1a;Exchange Exchange(UInt32, UInt32) 以原子操作的形式&#xff0c;将 32 位无符号整数设置为指定的值并返回原始值。 参考…

【python - 函数】

一、测试 如果我们写出一下一些泛化的函数&#xff0c;①计算边长为r的正方形面积②半径为r的圆的面积③边长为r的六边形面积。 我们运行代码计算一下边长为10的六边形面积&#xff0c;可以看到它约等于260&#xff0c;但是我们计算一下边长为-10的六边形面积它也同样成功了&…

帝国CMS火车头采集发布模块详细使用方法

火车头采集文章数据发布到帝国CMS系统操作步骤如下&#xff1a; 1. 下载火车头采集帝国cms发布模块&#xff1a;帝国cms发布模块接口下载地址&#xff08;免登录&#xff09;-CSDN &#xff1b; 2. 帝国cms发布模块导入火车头采集软件&#xff1b; 3. 填写帝国cms数据库中相…

基于(C++)VTK9.3.0+Microsoft Visual Studio2017的DICOM影像VR体绘制完整实现代码

开发基于(C++)VTK9.3.0+Microsoft Visual Studio2017的DICOM影像VR体绘制程序的前提是: 1、已编译完成VTK9.3.0,可在VTK官网下载VTK9.3.0源码,官网下载地址:Download | VTK 选择所需的VTK版本进行下载 具体编译VTK的过程我就不详细介绍了,有需要可以提供支持。下面直接…

php yield使用

一&#xff0c;概念 yield简单的调用形式看起来像一个return申明&#xff0c;不同之处在于普通return会返回值并终止函数的执行&#xff0c;而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。yield只有在调用的时候才会执行&#xff0c;并不产生多余的…

【2024Python教程】Python文件打包成exe,如果有图片怎么打包?有手就会的超简单教程

目录 pyinstaller模块打包exe&#xff08;无图片或其他文件打包版&#xff09; 第一步 安装pyinstaller模块&#xff1a; 第二步 找到需要打包的主程序文件夹 第三步 打包exe文件 第四步 确认exe文件是否可以打开 pyinstaller模块打包exe&#xff08;有图片打包版--方法一…

瑞幸携陈建斌迎“白月光”回归,品牌联名为何屡试不爽?

要说品牌联名看谁家&#xff0c;那真不得不提瑞幸。一招“酱香拿铁”直接“热翻”各大平台&#xff0c;不少网友感慨“人生第一杯茅台&#xff0c;居然是瑞幸给的”。而上个月瑞幸又上了一波“大招”&#xff0c;携手“大胖橘”陈建斌老师回归初代产品“橘金气泡美式”&#xf…

一文读懂数据中台

前言&#xff1a;数据中台的目标是让数据持续用起来&#xff0c;通过数据中台提供的工具、方法和运行机制&#xff0c;把数据变为一种服务能力&#xff0c;让数据更方便地被业务所使用。下图所示为数据中台总体架构图&#xff0c;数据中台是在底层存储计算平台与上层的数据应用…

Qt——窗口

目录 概述 菜单栏 创建菜单栏 创建子菜单 添加分割线 添加图标 工具栏 创建工具栏 设置初始位置和停靠位置 设置浮动属性 设置移动属性 状态栏 创建状态栏 显示实时消息 添加控件 浮动窗口 创建浮动窗口 对话框 创建对话框 对话框的分类 Qt 内置对话框 …

基于.Net 框架实现WebSocket 简单通信——服务端

新建项目 创建一个.Net 框架的控制台程序。 添加包 项目 → 管理 NuGet 程序包打开包管理窗口&#xff0c;添加SuperWebSocket 程序包。 实现 项目 → 添加类打开添加新项窗口&#xff0c;添加一个C#类。 启动监听 WebSocketServer socket new WebSocketServer();Conso…

浅谈DALL-E2

目录 1.概述 2.诞生背景 3.作用 4.版本历史 5.模型和技术 6.应用场景 6.1.十个应用场景 6.2.游戏开发 7.接口 8.未来展望 9.总结 1.概述 DALL-E2 是由 OpenAI 开发的一个图像生成模型&#xff0c;可以根据文本描述生成高质量的图像。DALL-E2 是 DALL-E 的升级版&am…

【小白学Python】自定义图片的生成(一)

目录标题 安装Pillowdemo代码初次代码计划 个人需要&#xff0c;基于文字生成图片。 除了AI外&#xff0c;对于简单的图片&#xff0c;Python在这方面也非常擅长。 我算是一个Python小白&#xff0c;除了业余时尝试过Python基本语法的练习&#xff0c;从未真正使用过Python。…

电流的本质是什么

话说很久以前&#xff0c;科学发现纯靠人眼识别。有一天&#xff0c;泰勒斯(古希腊哲学家&#xff0c;被称为科学的祖师爷)一时手痒&#xff0c;拿着琥珀与皮毛摩擦。 结果他发现那种半透明的小石头&#xff0c;居然产生了吸引小物体的魔力。 面对这个现象&#xff0c;老泰开始…