云原生(四)、Docker-Compose

Docker-Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个简单的 YAML 文件来配置应用程序的服务、网络和卷,从而使得在不同环境中轻松部署应用程序变得更加简单和可靠。

Docker Compose 主要由以下几个核心组件组成:

  1. YAML 文件:用于定义 Docker 应用程序的配置文件,包括服务、网络、卷等信息。这个文件通常命名为 docker-compose.yml

  2. 服务(Services):每个服务对应一个容器,用于运行应用程序中的一个特定组件,比如一个数据库、Web 服务器、消息队列等。

  3. 网络(Networks):用于定义容器之间的网络连接方式,包括桥接网络、主机网络等。

  4. 卷(Volumes):用于定义容器内外部的数据持久化和共享。

通过 Docker Compose,用户可以通过简单的命令启动、停止、重启整个应用程序,而不需要手动创建和管理每个容器。这使得开发、测试和生产环境之间的部署更加一致和可重复。

docker-compose 官方文档: https://docs.docker.com/compose/

# 容器批量管理工具
# Compose定义和运行多个docekr容器,通过Compose,使用一个yarm文件管理应用服务。通过一个简单的命令,就可以将所有服务全部启动Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience.Compose simplifies the control of your entire application stack, making it easy to manage services, networks, and volumes in a single, comprehensible YAML configuration file. Then, with a single command, you create and start all the services from your configuration file.

Compose中有两个重要的概念:

  • 服务:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例,
    • 订单服务image
    • 物流服务image
    • 用户服务iamge
    • 支付服务image
    • 4个容器后面构成一个服务 service
  • 项目:由一组关联的应用容器组成的一个完整的业务单元,在docker-compose中定义

Compose项目是由python编写的,实际上就是调用了Docker服务提供的API来对容器进行管理,因此,只要所在的操作系统的平台支持DockerAPI,就可以在其上利用Compose来进行容器编排管理

1、docker-compose安装

下载文件,并安装授权

# 方法1
sudo apt-get update
sudo apt-get install docker-compose-plugin#方法2
sudo yum update
sudo yum install docker-compose-plugin#安装成功
[root@hcss-ecs-8f46 ~]# docker-compose -v
Docker Compose version v2.24.7
尝试使用compose

官方案例:https://docs.docker.com/compose/gettingstarted/

Step1

1、Create a directory for the project:

创建文件目录,并进入

mkdir composetest
cd composetest

2、Create a file called app.py in your project directory and paste the following code in:

在composetest目录像创建app.py脚本文件,录入内容

import timeimport redis
from flask import Flaskapp = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)

3、Create another file called requirements.txt in your project directory and paste the following code in:

创建一个文本文件requirements.txt,录入内容

flask
redis
Step2

The Dockerfile is used to build a Docker image. The image contains all the dependencies the Python application requires, including Python itself.

In your project directory, create a file named Dockerfile and paste the following code in:

在项目目录创建Dockerfile文件,录入内容

# syntax=docker/dockerfile:1
FROM python:3.10-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
Step3

Create a file called compose.yaml in your project directory and paste the following:

创建compose.yaml文件,录入内容

services:web:build: .ports:- "8000:5000"redis:image: "redis:alpine"
Step4

使用命令docker compose up 运行yaml文件,它会自动运行文件中所有的镜像并构建容器

docker compose up

测试:访问服务器ip:80,可以看到一个时间计数器。

docker compose 命令需要在项目目录下才能使用

2、Compose命令

[root@hcss-ecs-8f46 composetest]# docker compose --helpUsage:  docker compose [OPTIONS] COMMANDDefine and run multi-container applications with DockerOptions:--ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")--compatibility              Run compose in backward compatibility mode--dry-run                    Execute command in dry run mode--env-file stringArray       Specify an alternate environment file-f, --file stringArray           Compose configuration files--parallel int               Control max parallelism, -1 for unlimited (default -1)--profile stringArray        Specify a profile to enable--progress string            Set type of progress output (auto, tty, plain, quiet) (default "auto")--project-directory string   Specify an alternate working directory(default: the path of the, first specified, Compose file)-p, --project-name string        Project nameCommands:attach      Attach local standard input, output, and error streams to a service's running containerbuild       Build or rebuild servicesconfig      Parse, resolve and render compose file in canonical formatcp          Copy files/folders between a service container and the local filesystemcreate      Creates containers for a servicedown        Stop and remove containers, networksevents      Receive real time events from containersexec        Execute a command in a running containerimages      List images used by the created containerskill        Force stop service containerslogs        View output from containersls          List running compose projectspause       Pause servicesport        Print the public port for a port bindingps          List containerspull        Pull service imagespush        Push service imagesrestart     Restart service containersrm          Removes stopped service containersrun         Run a one-off command on a servicescale       Scale services start       Start servicesstats       Display a live stream of container(s) resource usage statisticsstop        Stop servicestop         Display the running processesunpause     Unpause servicesup          Create and start containersversion     Show the Docker Compose version informationwait        Block until the first service container stopswatch       Watch build context for service and rebuild/refresh containers when files are updatedRun 'docker compose COMMAND --help' for more information on a command.

说明:
一个普通的工作流程以docker compose up -d 启动应用程序开始

docker compose logs和ps命令可以用来验证应用程序的状态,还能帮助调试。

修改代码后,先执行 docker compose build 构建新的镜像,然后执行 docker compose up-d 取代运行中的容器

注意,Compose会保留原来容器中所有旧的数据卷,这意味着即使容器更新后,数据库和缓存也依旧在容器内(这很可能造成混淆,因此要特别小心)

如果你修改了Compose的YAML文件,但不需要构建新的镜像,可以通过up-d参数使Compose以新的配置替换容器

如果想要强制停止Compose并重新创建所有容器,docker compose stop xxxx和 docker compose rm xxxx

简单使用:
1、执行命令运行容器:docker compose up -d
2、查看镜像:docker images
3、停止和删除容器: docker compose stop xx和 docker compose rm xxxx

3、compose.yaml文件

模板文件是Compose的核心,涉及的指令关键字比较多但是大部分的指令与docker run相关的参数的含义是类似的

默认的模板名是docker-compose.yml

#语法-3层
version:""
services:#定义很多服务服务1:#当前的服务配置服务2:#当前服务配置
#服务要用的网络、卷、等其他全局规则
volumes :
networks :
configs :
...

官网链接:https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples

yaml文件参数
  1. version: 指定 Compose 文件格式的版本。版本号决定了可以使用的功能和语法。

  2. services: 定义要运行的各个服务的配置。每个服务可以包含以下参数:

    • image: 指定要使用的镜像名称。
    • build: 指定 Dockerfile 所在的目录路径,用于构建镜像。
    • ports: 指定端口映射,将容器内部端口映射到主机的端口。
    • volumes: 指定挂载的数据卷。
    • environment: 设置环境变量。
    • command: 指定要运行的命令。
    • 等等,还有很多其他的参数可以用于配置服务的行为。
  3. networks: 定义要使用的网络配置。可以配置自定义网络以便服务之间的通信。

  4. volumes: 定义要使用的卷配置。可以配置匿名卷或具名卷,用于数据持久化或共享。

  5. configs: 定义要使用的配置对象。可以将配置文件注入到服务中,以便动态配置。

  6. secrets: 定义要使用的敏感数据。可以将敏感数据注入到服务中,以便安全地使用。

  7. deploy: 用于指定部署配置的参数。这些参数包括部署的模式、副本数、更新策略等。

  8. restart: 指定容器退出时的重启策略,如 “no”、“always”、“on-failure” 等。

  9. depends_on: 指定服务之间的依赖关系,确保一个服务在另一个服务之前启动。(重要)

  10. labels: 为服务添加标签,用于组织和管理。

  11. extends: 允许服务的配置从其他服务或外部文件中继承配置。

  12. external_links: 将容器链接到在 Docker 外部定义的容器。

  13. container_name: 指定容器的名称。

  14. expose: 暴露容器的端口,但不映射到主机。

  15. extra_hosts: 添加额外的主机名解析到容器中。

  16. healthcheck: 配置服务的健康检查选项。

  17. logging: 配置服务的日志记录选项。

  18. stdin_open/tty: 控制是否打开标准输入以及是否分配一个伪终端。

  19. privileged: 指定容器是否拥有特权访问。

  20. tmpfs: 将临时文件系统挂载到容器中。

  21. ulimits: 配置容器的资源限制。

4、实战 WorldPress

github项目地址:https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/wordpress

  • 根据文档创建docker-compose.yml文件
  • 执行命令docker compose up -d启动项目

通过服务器ip:80访问项目。
在这里插入图片描述

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

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

相关文章

前端开发者如何开发自己的地图功能

地图开发 市面上有高德,百度属于常用的,以及小程序内置的腾讯地图,通常用这部分的功能,都需要申请对应的key,来进行使用,一般刚刚开始流量不大,到没什么,流量一大就需要付费。 如何…

数库据设计最佳实践

中老年程序员,从业生涯设计过很多数据库,有用上的也有没用上的,有精心设计花无数心思更改了无数次的也有敷衍了事能用就行的,有最糟糕的设计也有感觉还不错的。在设计和修改过程中有很多疑问和感悟,在此记录一下以方便…

HTML静态网页成品作业(HTML+CSS)——世博园介绍(2个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…

BUUCTF-Ezsql1

1.打开靶机 打开第一个链接 2.万能密码 使用万能密码:a or 1 # 密码为随意 第二个用kali打开 3.ssh连接靶机 ssh ctf284490d0-7600-4c65-9160-5ced02f45633.node5.buuoj.cn -p 28191 由题可知密码为123456 4.找到并修改index.php文件 找到index.php文件 #内容如…

spring启动自动执行方法

原文链接: Spring Boot 启动时,让方法自动执行的 4 种方法!-阿里云开发者社区 (aliyun.com) -------------------------------------------------------------------------------------------------------------------------------- 在springBoot中我…

Springboot整合支付宝沙箱支付

2.配置说明 要记住这几个重要的配置 appId 这个是appIdprivateKey 商户私钥publicKey 支付宝公钥, 即对应APPID下的支付宝公钥notifyUrl 支付成功后异步回调地址(注意是必须是公网地址)returnUrl #支付后回调地址signType 签名类型 一般写 RSA2charset utf-8format json #网关…

数据结构奇妙旅程之红黑树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

印染厂区污水怎么处理

印染厂污水处理是一项十分重要且紧迫的环境问题。随着工业化的快速发展,印染厂所排放的大量废水不仅对环境造成了严重影响,也对人们的生活和健康带来了潜在的威胁。因此,寻找有效的印染厂污水处理方法显得尤为重要。 针对印染厂污水的特点&am…

通过Arthas修改并热发布代码

通过Arthas修改并热发布代码 主要使用jad、mc、retransform三个命令: jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.javamc /tmp/UserController.java -d /tmpretransform /tmp/com/example/demo/arthas/user/UserCo…

tp8 mpdf 导出pdf

1. 安装mpdf composer require mpdf/mpdf 2. 然后 使用 use mpdf\Mpdf; 或者 require_once __DIR__ . /vendor/autoload.php; 官方文档 mPDF – mPDF 手册 文档里有很多东西 可以自己去研究 3. 编写代码 下载 (支持中文) $mpdf new Mpdf([mode > utf-8,"autoS…

【技术干货】MediaCrawler:一站式社交平台数据抓取利器,带你玩转小红书、抖音、快手、B站和微博数据分析

一、引言 大数据时代,社交媒体平台上的海量信息为我们提供了丰富洞察市场、研究用户行为的机会。然而,如何高效便捷地收集和整理这些分散在各平台的数据呢?今天,我们将为您揭秘一款专为小红书、抖音、快手、B站和微博打造的强大数…

用python实现视频异常检测

视频异常检测是一个复杂的任务,它涉及到对视频帧的分析和比较,以检测与正常模式不符的异常行为或事件。下面是一个基本的步骤指南,以及如何使用Python实现视频异常检测: 步骤指南 视频帧提取:首先,你需要…

实在智能与中国信通院联合牵头智能体(Agent)标准编制

近日,中国信息通信研究院(以下简称“信通院”)启动国内首个《智能体(Agent)技术要求与评估方法》系列标准编制,实在智能作为参编单位并牵头编制技术能力部分,深度参与该标准对智能体技术要求和评…

阿里云ecs服务器配置反向代理上传图片

本文所有软件地址: 链接:https://pan.baidu.com/s/12OSFilS-HNsHeXTOM47iaA 提取码:dqph 为什么要使用阿里云服务器? 项目想让别人通过外网进行访问就需要部署到我们的服务器当中 1.国内知名的服务器介绍 国内比较知名的一些…

机器学习复习(9)——自定义dataset

目录 第一种dataset(文件夹名即为标签) 用于将格式(1)转换为格式(2) 第二种dataset(标签在labels文件夹下的对应的txt文件里面) 第一种dataset(文件夹名即为标签) 数据组织格式(1) --data ----train …

续上篇 qiankun 微前端配置

上篇文章地址:微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】-CSDN博客 主应用: src/main.js 配置: import Vue from vue import App from ./App.vue import router from ./router import { registerMicroApps, start } …

【小程序开发】蓝牙设备API——单点蓝牙应用程序编程接口整理(二)

ty.device.getBLEDeviceRSSI 获取 BLE 外设的信号 需引入DeviceKit,且在>1.2.6版本才可使用 参数 Object object 属性类型默认值必填说明deviceIdstring是设备模型 deviceId 设备 Idcompletefunction否接口调用结束的回调函数(调用成功、失败都会执…

jar读取目录配置、打包jar后无法获取目录下的配置

jar读取目录配置、打包jar后无法获取目录下的配置 jar读取目录配置、打包jar后无法获取目录下的配置。java打成jar包后获取不到配置文件路径。解决项目打成jar包上线无法读取配置文件。打包jar后无法读取resource下的配置文件 场景 需要读取 src/main/resources/mapper下的所…

大机中的汇编语言该怎么学

提起程序开发,就不得不说合久必分,分久必合,反成各个程序段之间都有这个关系,而多个程序又组成一个功能组,可以完成一项业务,ASM比JCL难很多,因为它涉及到地址和业务。 一 ASM 的难度如何 比方…