Docker Compose(容器编排)——9

目录

  1. 什么是 Docker Compose
  2. 生活案例
  3. 为什么要 Docker Compose
  4. Docker Compose 的安装
  5. Docker Compose 的功能
  6. Docker Compose 使用场景
  7. Docker Compose 文件(docker-compose.yml)
    1. 文件语法版本
    2. 文件基本结构及常见指令
  8. Docker Compose 命令清单
    1. 命令清单如下
    2. 命令格式
    3. 常见选项说明
    4. 常见命令说明
  9. 操作案例
  10. 综合案例
    1. Docker Compose 部署自定义服务
    2. Docker Compose 部署 WordPress
  11. 常见问题
    1. up、 run 和 start 之间有什么区别
    2. 如何在同一主机上运行 Compose 文件的多个副本
    3. 可以控制服务启动顺序吗?

1.什么是 Docker Compose

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

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义, 整个 docker-compose.yml 定义一个项目。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
通过 compose 可以方便的管理多个服务。

2.生活案例

docker compose 就像航母一样,有舰载机、防空导弹,舰载机、导弹呢就是一个个容器。

3.为什么要 Docker Compose

  • Docker 是一个轻量化的应用程序, Docker 官方推荐每个 Docker 容器中只运行一个进程。
  • 如果一个应用需要涉及到 MySQL、 nginx 等环境, 那么我们需要分别为应用、数据库和 nginx 创建单独的 docker 容器,然后分别启动容器。
  • 想象一下,当我们构建好 Docker 之后,每次启动应用,都至少需要 docker run三次, 或者写一些脚本来实现, 这样会比较繁琐。
  • 另外,这些 docker 容器都是分散独立的,也不方便镜像管理。那既然这些 docker容器 都是为了同一个应用服务,我们就应该把它们放到一起,这就引出了 dockercompose 来解决这类型的问题。
     

4.Docker Compose 的安装

安装 docker 的时候,我们默认已经安装了 docker-compose,安装的组件包名称为docker-compose-plugin,此处不再赘述

5.Docker Compose 的功能

Compose 使用的步骤:

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker compose up 命令来启动并运行整个应用程序。

核心功能

Compose 具有管理应用程序整个生命周期的命令:

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

6.Docker Compose 使用场景

单主机部署

快速搭建一个单节点开发或者测试环境,方便使用。

不同环境隔离

通过指定 project 来运行不同的环境,实现隔离的目的。
 

7.Docker Compose 文件(docker-compose.yml)

文件语法版本

目前官方支持三个大版本, 即 Version 1、 Version 2 及 Version 3, 其中 Version 1 已经被废弃掉了。当前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。 本文章主要基于 3.8 版本的 Compose file 语法进行讲解,其他版本介绍参见

Compose file versions and upgrading | Docker Docs

文件基本结构及常见指令


 常见字段格式语法

image

指定容器运行的镜像。以下格式都可以:

command

覆盖容器启动的默认命令。
 

entrypoint

覆盖容器默认的 entrypoint。


 

也可以是以下格式:

environment

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


 

networks

指定容器运行的网络:配置容器网络

 配置网络驱动和子网信息

volumes

将主机的数据卷或者文件挂载到容器里。


 

ports

指定端口映射。以下格式都可以:

expose

暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数:


 

build

指定为构建镜像上下文路径:例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:


 

或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:

  • context:上下文路径。
  • dockerfile:指定构建镜像的 Dockerfile 文件名。
  • args:添加构建参数,这是只能在构建过程中访问的环境变量。
  • labels:设置构建镜像的标签。

depends_on

设置依赖关系。

  • docker compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和redis ,才会启动 web。
  • docker compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker compose up web 还将创建并启动 db 和 redis。
  • docker compose stop :按依赖关系顺序停止服务。在以下示例中, web 在 db 和redis 之前停止。

 

可以指定条件, healthy 需要配置 healthcheck 来完成

health check 样例

env_file

从文件添加环境变量。可以是单个值或列表的多个值。

也可以是列表格式

8.Docker Compose 命令清单

命令清单如下

命令格式

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。
docker-compose 命令的基本的使用格式为

常见选项说明
  • -f, --file 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定
  • -p, --project-name 指定项目名称,默认将使用所在目录名称作为项目名
     
常见命令说明

up

该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服
务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。

  • -d 在后台运行服务容器, 推荐在生产环境下使用该选项
  • --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用
  • --no-recreate 如果容器已经存在了,则不重新创建,不能与 --forcerecreate 同时使用
     

down

停止所有容器,并删除容器和网络

-v, --volumes 删除容器同时删除目录映射

run

该命令可以在指定服务容器上执行相关的命令

  • -d 后台运行容器
  • --name NAME 为容器指定一个名字
  • --entrypoint CMD 覆盖默认的容器启动指令
  • -e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量
  • -u, --user="" 指定运行容器的用户名或者 uid
  • --rm 运行命令后自动删除容器
  • -p, --publish=[] 映射容器端口到本地主机
     

9.操作案例

创建 compose 目录

进入 base 目录,创建 docker-compose.yml 文件

输入一下内容

输入 docker config 会做检查

我们修改错误信息,将版本转为字符串,再次检查

 

创建首页目录,编辑首页内容

启动服务

通过页面访问

 

停止服务

启动服务

删除服务

 

10.综合案例

Docker Compose 部署自定义服务

我们编写一个简单的案例, nginx 反向代理到我们的一个 springboot 微服务,微服务访问我们的 msyql 数据库查询用户信息.

设计数据非常简单的一个表信息,写入两条数据,文件为 init.sql

创建一个 springboot 应用,配置 maven 项目

添加启动类

配置数据库信息,注意本地测试的时候红色部分调整为 ip 地址,而我们实际的服务使用的 mysql 的一个服务名称。


 

配置用户控制器,简单配置,不再去涉及 mapper 那些内容通过 jdbc 直接完成操作

编译打包

进入打包的目录,本地测试正常启动

本地测试正常访问

编写 docker-compose.yml

创建工程目录和卷目录

将 nginx 的反向代理配置 bit.conf 放入到./nginx/conf.d,其中内容为

将数据库初始化文件 init.sql 放入到./mysql/init 目录

将应用 jar 包放入到./app 目录

启动项目


 

浏览器访问 nginx,可以看到用户信息正常返回

Docker Compose 部署 WordPress

什么是 WordPress

WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。
WordPress 有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用 HTML 代码、 CSS、 PHP 等相关知识。WordPress 官方支持中文版,同时有爱好者开发的第三方中文语言包,如 wopus 中文语言包。 WordPress 拥有成千上万个各式插件和不计其数的主题模板样式。

编写 Docker Compose


运行站点



访问 web 页面

配置参数,点击安装

登录

删除,释放空间

11.常见问题

up、 run 和 start 之间有什么区别

通常,你想要 docker compose up. 用于 up 启动或重新启动 docker-compose.yml.在默认的“附加”模式下,会看到来自所有容器的所有日志。在“分离”模式 ( -d) 中,启动容器后 Compose 退出,但容器继续在后台运行。该 docker compose run 命令用于运行“一次性”或“临时”任务。它需要您要运行的服务名称,并且只为正在运行的服务所依赖的服务启动容器。用于 run 运行测试或执行管理任务,例如从数据卷容器中删除或添加数据。该 run 命令的作用类似于 dockerrun -ti 它打开容器的交互式终端并返回与容器中进程的退出状态匹配的退出状态。docker compose start 命令仅对重新启动先前创建但已停止的容器有用。它从不创建新容器。
 

如何在同一主机上运行 Compose 文件的多个副本

Compose 使用项目名称为项目的所有容器和其他资源创建唯一标识符。要运行项目的多个副本,请使用-p 命令行选项 或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称。

可以控制服务启动顺序吗?

可以控制启动顺序,通过依赖指定,并且可以配合 healthcheck 等健康检查成功以后再启动

 

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

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

相关文章

垃圾回收器CMS和G1的区别

CMS和G1的区别 区别一: 使用范围不一样 CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用 区别二: STW的时间 CMS收集器以最小的停顿时间为目标的收…

C++11(下)

可变参数模板 C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板. 相比C98/03, 类模版和函数模版中只能含固定数量的模版参数, 可变模版参数无疑是一个巨大的改进, 然而由于可变模版参数比较抽象, 使用起来需要一定的技巧, 所以这块还是比较晦涩的.掌握一些基…

Vue 3项目的运行过程

概述: 使用Vite构建Vue 3项目后,当执行yarn dev命令启动服务时,项目就会运行起来,该项目会通过src\main.js文件将src\App.vue组件渲染到index.html文件的指定区域。 文件介绍: src\App.vue文件 Vue 3项目是由各种组件…

递归实现指数型枚举

title: 递归实现指数型枚举 date: 2023-12-10 19:29:20 tags: 递归 catgories: 算法进阶指南 —> 传送门 题目大意 从 1 ~ n n n 这 n n n 个整数随机选取任意多个,输出所有可能的选择方案 思路 这等价于每个整数可以选或者不选,所有的方案总数共有…

Spring Boot的日志

打印日志 打印日志的步骤: • 在程序中得到日志对象. • 使用日志对象输出要打印的内容 在程序中得到日志对象 在程序中获取日志对象需要使用日志工厂LoggerFactory,代码如下: package com.example.demo;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public c…

STM32——继电器

继电器工作原理 单片机供电 VCC GND 接单片机, VCC 需要接 3.3V , 5V 不行! 最大负载电路交流 250V/10A ,直流 30V/10A 引脚 IN 接收到 低电平 时,开关闭合。

Go Fyne 入门

Fyne是一个用于创建原生应用程序的UI工具包,它简单易用,并且支持跨平台。以下是一个简单的Fyne教程,帮助你入门: 1. 安装Fyne 首先,确保你已经安装了Go语言。然后,在终端中运行以下命令来安装Fyne&#x…

android-xml语法

xml解析器 Android的XML文件语法是由Android系统中的解析器解析的。具体来说,Android使用了一个名为"Android Asset Packaging Tool (AAPT)"的工具来解析和处理XML文件。AAPT负责将XML文件编译为二进制格式,并在构建过程中将其打包到Android应…

第2节:Vue3 模板语法

Vue3 的模板语法主要包括以下几个部分&#xff1a; 插值表达式&#xff1a;使用双大括号 {{ }} 包裹变量&#xff0c;可以直接在模板中显示变量的值。 <div>{{ message }}</div>指令&#xff1a;以 v- 开头&#xff0c;后面跟一个自定义的名字&#xff0c;用于操…

从Centos-7升级到Centos-Stream-8

如果在正式环境升级&#xff0c;请做好数据备份以及重要配置备份&#xff01;因为升级会造一部分应用被卸载。 注意&#xff1a;升级前请备份好数据&#xff0c;升级可能会导致ssh的root用户无法登陆、网卡名称发生改变、引导丢失无法开机等问题。 1.安装epel源 yum -y install…

【Spring教程20】Spring框架实战:AOP(面对切面编程)知识总结

欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》&#xff0c;本文的上一篇为《利用 AOP通知获取数据代码…

软件测试(接口测试业务场景测试)

软件测试 手动测试 测试用例8大要素 编号用例名称&#xff08;标题&#xff09;模块优先级预制条件测试数据操作步骤预期结果 接口测试&#xff08;模拟http请求&#xff09; 接口用例设计 防止漏测方便分配工具&#xff0c;评估工作量和时间接口测试测试点 功能 单接口业…

华为OD机试真题-字符串变换最小字符串-2023年OD统一考试(C卷)

题目描述: 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。变换规则:交换字符串中任意两个不同位置的字符。 输入描述:一串小写字母组成的字符串s 输出描述:按照要求进行变换得到的最小字符串 补充说明:s是都是小写字符组成…

一台是阿里云,一台是腾讯云,一台是华为云,一台是百度云等多种公有云混合安装K8S集群

1. 修改主机名称和添加hosts #永久修改主机名 hostnamectl set-hostname master && bash #在master01上操作&#xff0c;阿里云服务器 hostnamectl set-hostname worker1 && bash #在node01上操作&#xff0c;阿里腾讯云服务器 hostnamectl set-ho…

利用Microsoft Visual Studio Installer Projects打包安装包

利用Microsoft Visual Studio Installer Projects打包安装包 具体步骤步骤1&#xff1a;安装扩展步骤2&#xff1a;创建 Setup 项目步骤3&#xff1a;设置属性步骤4&#xff1a;添加输出步骤5&#xff1a;添加文件步骤6&#xff1a;添加桌面快捷方式步骤7&#xff1a;添加菜单快…

【Table/SQL Api】Flink Table/SQL Api表转流读取MySQL

引入依赖 jdbc依赖 flink-connector-jdbc mysql-jdbc-driver 操作mysql数据库 <!-- Flink-Connector-Jdbc --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>…

Ubuntu上安装 Git

在 Ubuntu 上安装 Git 可以通过包管理器 apt 进行。以下是在 Ubuntu 上安装 Git 的步骤&#xff1a; 打开终端。你可以按 Ctrl Alt T 组合键来打开终端。 运行以下命令以确保你的系统的软件包列表是最新的&#xff1a; sudo apt update 安装 Git&#xff1a; sudo apt inst…

RT-DERT改进策略:AKConv即插即用,轻松涨点

摘要 提出了一种算法&#xff0c;用于生成任意尺寸卷积核的初始采样坐标。与常规卷积核相比&#xff0c;提出的AKConv实现了不规则卷积核的函数来提取特征&#xff0c;为各种变化目标提供具有任意采样形状和尺寸的卷积核&#xff0c;弥补了常规卷积的不足。在COCO2017和VisDro…

Anaconda文件目录(打开默认路径)更改

Anaconda 文件默认目录更改 每次打开 Anaconda 都在C盘怎么办&#xff0c;如何改为D盘或是其他盘符位置&#xff1f; 可以进行下述操作。 1. 单次修改路径 单次修改路径&#xff1a;在 exe 文件(Anaconda Prompt (Anaconda_py))中写入下面代码&#xff1a; jupyter notebook …

STM32 标准外设SPL库、硬件抽象层HAL库、低层LL库区别?

1、STM32 之一 HAL库、标准外设库、LL库_ZCShou的博客-CSDN博客_ll库&#xff08;仔细阅读&#xff09; 2、STM32标准外设库、 HAL库、LL库 - King先生 - 博客园 3、STM32 之 HAL库_戈 扬的博客&#xff08;仔细阅读&#xff09; 4、STM32 LL 为什么比 HAL 高效&#xff1…