Docker Compose 基础知识(三)

Docker Compose 基础知识

什么是 Docker Compose ?

Docker Compose 是 Docker 官方提供的一个工具,用于定义和管理多个 Docker 容器的应用程序。它基于 YAML 文件格式,允许你通过
一个定义文件来描述和配置整个应用程序的组件,包括容器、网络、存储卷等。

Docker Compose 基本概念

  • Compose 文件 :Compose 文件是一个 YAML 格式的文本文件,用于定义应用程序的组件、配置和依赖关系。在 Compose 文件中,你可以指
    定容器的镜像、端口映射、环境变量、网络设置等。

  • 服务 (Services): Compose 文件中的每个容器被称为一个服务。服务定义了一个容器实例的配置和行为,并可以包含多个容器实例。每个服务
    可以基于一个或多个镜像构建。

  • 堆栈(Stack): Compose 文件中的一组服务被称为一个堆栈。堆栈是一个完整的应用程序,由多个相互关联的服务组成。

  • 网络(Networks): Compose 文件中可以定义自定义网络,用于连接堆栈中的服务。这样,堆栈内的服务可以相互通信,而堆栈之外的服务则无法访问。

  • 存储卷(Volumes): Compose 文件中可以定义存储卷,用于容器之间共享数据。

  • 命令行工具: Docker Compose 提供了一组命令行工具,用于构建、启动、停止和管理应用程序堆栈。你可以使用 docker-compose 命令来执行这些操作。

Docker Compose 工作原理:

是基于定义文件的描述和配置。通过运行 docker-compose up 命令,Compose 会解析 Compose 文件,并根据文件中的定义创
建和管理容器。Compose 会自动创建所需的网络、存储卷等资源,并将服务之间的相互依赖关系和通信配置好。

通过 Docker Compose,你可以轻松地管理多个容器组成的应用程序,并且可以通过一个简单的定义文件来描述整个应用程序的结构和配置。

Dockers Compose 学习示例

  • 创建 Docker Compose 文件 docker-compose.yml
version: '3'
services:backend:image: backend-imageports:- 8080:8080environment:- ENV_VAR=value  networks:- my-networkfrontend:image: frontend-imageports:- 80:80depends_on:- backend  networks:- my-networkservices:db:image: mysqlvolumes:- my-volume:/var/lib/mysql  
networks:my-network:driver: bridgeexternal: truevolumes:my-volume:external: trueversion: '3' 表示使用 Compose 文件的版本 3。services 下定义了两个服务:backend 和 frontend。每个服务都指定了镜像名称(使用自定义的镜像名称替换 backend-image 和 frontend-image)。environment  参数来设置容器的环境变量。ports 定义了容器端口与主机端口之间的映射,用于访问服务。depends_on 参数来设置容器之间的依赖关系,在服务的配置中,通过 depends_on 参数指定依赖的服务名称,确保依赖的服务在当前服务之前
启动,frontend 服务依赖于 backend 服务。这意味着在启动 frontend 服务之前,会先启动 backend 服务。networks 定义了自定义的网络 my-network,用于连接服务之间的通信。external: true 是在 Docker Compose 文件中定义网络或卷时的一个属性,用于指示使用外部资源而不是在当前文件中创建新的资源。具体来说:当 external: true 应用于网络时,表示使用已经存在的外部网络,而不是在当前文件中创建新的网络。这可以用于多个 Docker Compose 文件之
间共享网络,或者使用外部的 Docker 网络。当 external: true 应用于卷时,表示使用已经存在的外部卷,而不是在当前文件中创建新的卷。这可以用于多个容器组之间共享数据卷,或者使用
外部的数据卷。使用 external: true 可以方便地在 Docker Compose 文件中引用外部资源,而不需要在当前文件中重复定义已经存在的网络或卷。这提供了更多的
灵活性和可重用性,使得多个容器组之间可以共享和重用资源。
  • docker-compose up启动
执行命令: docker compose up -d应用程序堆栈将会启动,后端服务将监听主机的 8080 端口,前端服务将监听主机的 80 端口。你可以通过访问 http://localhost:80 来访问前端服务,以及通过访问 http://localhost:8080 来访问后端服务。

Docekr Compose 命令

使用 Docker Compose 可以方便地管理和操作容器组。以下是关于使用 Docker Compose 启动和停止容器组的方法:

在包含 docker-compose.yml 文件的目录中执行命令:

使用 docker compose up 启动容器组:Docker Compose 会根据配置文件中定义的服务和容器设置,自动创建并启动相关的容器。
日志输出将会显示在终端上,可以使用 Ctrl + C 组合键停止容器组。使用 `docker compose down ` 停止和删除容器组:Docker Compose 会停止并删除相关的容器、网络和卷。这两个命令不会删除容器,只是启动或停止已经存在的容器。docker compose ps 命令来查看容器组中运行的容器的状态。使用 docker compose exec 命令在容器组中执行命令:
docker compose logs  --tail=50 命令查看容器组的日志信息:可以使用 --tail 参数来限制显示的行数docker compose exec <服务名称> <命令> 命令在容器组中执行特定服务的命令。例如,要在名为 web 的服务容器中执行命令 ls -l,可以执行 docker compose exec web ls -l。使用 Docker Compose 可以简化管理多个容器的过程,并提供了一种便捷的方式来定义、启动和停止容器组。对于复杂的应用程序或多容器
的架构,使用 Docker Compose 可以更好地组织和管理容器环境。

Docker Compose 扩展和更新容器组

  • 扩展容器组

在 Docker Compose 文件中,可以通过调整容器组的副本数来扩展容器组。通过增加容器的副本数,可以实现更高的并发处理能力和负载均衡。
在服务定义中,使用 replicas 关键字来指定容器的副本数

version: "3"
services:app:image: my-appdeploy:replicas: 3replicas 属性指定了 app 服务的副本数为 3,这将创建和管理 3 个具有相同镜像和配置的容器副
  • 更新容器组

更新容器组可能包括更新镜像、重新构建容器等操作。
更新镜像:在 Docker Compose 文件中,将容器的 image 属性指定为新的镜像名称或标签。然后使用 docker-compose up 命令重新构建和启
动容器组。Docker Compose 会自动检测到镜像的变化,并更新容器组。

重新构建容器:如果需要重新构建容器,可以使用 docker compose build 命令。它会根据 Docker Compose 文件中的定义重新构建容器。

version: "3"
services:app:build:context: .dockerfile: Dockerfile在扩展和更新容器组时,可以根据实际需求进行调整。通过增加容器的副本数来扩展容器组,可以提高容器组的性能和可伸缩性。通过更新镜像
或重新构建容器,可以使用新的代码或配置来更新容器组。

Docker 安全机制

Docker 提供了一些安全机制和功能来管理用户、隔离容器和限制资源使用。

用户和用户组管理:

  • Docker 允许在容器内部使用不同的用户和用户组来运行进程。可以使用 USER 指令在 Dockerfile 中指定容器内的用户或用户组。

  • 通过将容器内的进程与特定的用户或用户组关联,可以限制容器内进程的权限,提高容器的安全性。

命名空间和控制组:

  • Docker 使用 Linux 内核的命名空间和控制组功能来实现容器的隔离和资源限制。
  • 命名空间提供了进程、网络、文件系统和用户等方面的隔离,使得容器内的进程无法感知和访问其他容器的资源。
  • 控制组用于限制容器可以使用的资源,如 CPU、内存、磁盘和网络带宽等。

容器的权限和访问控制:

  • 可以使用 --cap-drop 和 --cap-add 参数来限制容器内进程的特权。
  • 可以使用 --security-opt 参数来设置容器的安全选项,如 SELinux 标签、AppArmor 配置等。
  • 可以使用 --ulimit 参数来限制容器的资源使用,如最大 CPU 使用时间、内存限制等。
可用于增强容器的安全性,限制容器内进程的特权级别。
docker run --cap-drop=SYS_ADMIN ubuntu:latest
docker run --cap-add=NET_ADMIN nginx:latest使用不同的选项来启用或禁用特定的安全功能,如 SELinux 标签或 AppArmor 配置等。
docker run --security-opt=label=disable alpine:latest
docker run --security-opt=apparmor=docker-nginx-profile nginx:latest它来限制容器的资源使用,如最大 CPU 使用时间、内存限制等。
docker run --ulimit cpu=1 --ulimit mem=512m my-app:latest

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

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

相关文章

jffs2文件系统制作

#!/bin/bash rm -rf rootfs.jffs2 chmod 755 ./rootfs -R chown root:root ./rootfs -R sudo mkfs.jffs2 -r ./rootfs -e $((64*1024)) -o rootfs.jffs2

探寻智能酒精壁炉在人类文化传承和精神需求中的重要意义

真火壁炉在人类文明中扮演着至关重要的角色&#xff0c;它不仅是温暖与照明的来源&#xff0c;更承载着人类的情感、记忆和文化传承。从古至今&#xff0c;真火壁炉一直都是家庭和社区聚集的焦点&#xff0c;象征着温暖、交流与家庭团聚。并且随着科技的进步&#xff0c;能使用…

k8s中pod的亲和性与反亲和性

一、节点选择 nodeSelector 提供了一个非常简单的方式&#xff0c;将 Pod 限定到包含特定标签的节点上。亲和性与反亲和性&#xff08;affinity / anti-affinity&#xff09;特性则极大地扩展了限定的表达方式。主要的增强点在于&#xff1a; 表达方式更加有效&#xff08;不仅…

SkyWalking介绍和Docker环境下部署

一、Skywalking概述 1、Skywalking介绍 Skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务&#xff0c;云原生架构和基于容器&#xff08;Docker&#xff0c;K8S,Mesos&#xff09;架构而设计&#xff0c;它是一款优秀的APM&#xff08;Application Perfo…

Halcon灰度的平均值和偏差intensity

Halcon灰度的平均值和偏差 intensity 算子用于计算单张图像上多个区域的灰度值的平均值和偏差。该算子的原型如下&#xff1a; intensity (Regions, Image ::: Mean, Deviation )其各参数的含义如下。 参数1&#xff1a;Regions&#xff08;输入参数&#xff09;&#xff0c;…

harmonyOS 时间选择组件(TimePicker)

本文 我们来说 TimePicker 时间组件 首先 我们搭一个最基本的组件骨架 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }然后 在 Column 组件内 放一个 TimePicker进去 这里 我们就可以看到 一个时间的选择器了 DatePicker 捕获当前…

孪生神经网络MATLAB实战[含源码]

​一、算法原理 孪生神经网络&#xff08; Siamese neural network&#xff09;是一种深度学习网络&#xff0c;它使用两个或多个具有相同架构、共享相同参数和权重的相同子网。孪生网络通常用于寻找两个可比较事物之间的关系的任务。孪生网络的一些常见应用包括面部识别、签名…

node.js+mysql旅游景点分享网站-计算机毕业设计源码03796

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。旅游景点分享网站设计&#xff0c;主要的模块包括查看后台首页、轮播图&#xff08;轮播图管理&#xff09;、网站公告管理&#xff08;网站公告…

AQS 抽象队列同步器

AQS AQS &#xff08;抽象队列同步器&#xff09;&#xff1a; AbstractQueuedSynchronizer 是什么 来自jdk1.5&#xff0c;是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架以及JUC的基石&#xff0c;主要用于解决锁分配给谁的问题整体…

Linux第17步_安装SSH服务

secure shell protocol简称SSH。 目的&#xff1a;在进行数据传输之前&#xff0c;SSH先对联级数据包通过加密技术进行加密处理&#xff0c;然后再进行数据传输&#xff0c;确保数据传输安全。 1、在安装前&#xff0c;要检查虚拟机可以上网&#xff0c;否则可能会导致安装失…

电商带货品牌直播间SOP运营执行步骤

【干货资料持续更新&#xff0c;以防走丢】 电商带货品牌直播间SOP运营执行步骤 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 直播运营模板合集&#xff08;完整资料包含以下内容&#xff09; 目录 直播业务商业框架.png直播工作流程SOP梳理.xlsx 2023年抖…

Protobuf 属性数据丢失问题

xxxx.proto文件 message xxx{string name 1double dsp 2;// 数据 } 这里有一个坑&#xff0c;如果给的这个dsp0 (通常会给默认值0) ,通过protobuf前端解析时&#xff0c;这个属性是会丢失的。 数据只会接受到name属性

HubSpot的内容管理系统(CMS)好用吗?

HubSpot的内容管理系统&#xff08;CMS&#xff09;通常被认为是功能强大且用户友好的工具&#xff0c;尤其适用于数字营销和在线业务。以下是一些HubSpot CMS的优势和功能&#xff1a; 用户友好的编辑界面&#xff1a; HubSpot CMS提供直观的编辑界面&#xff0c;具有拖放式编…

数字藏品如何赋能线下实体?以 BOOMSHAKE 潮流夜店为例

此篇为报告内容精华版&#xff0c;更多详细精彩内容请点击 完整版 在数字化浪潮的推动下&#xff0c;品牌和企业正在迎来一场前所未有的变革。传统市场营销策略逐渐让位于新兴技术&#xff0c;特别是非同质化代币&#xff08;NFT&#xff09;的应用。这些技术不仅改变了品牌资…

Python高级用法:描述符(descriptor)

描述符 描述符允许自定义在引用一个对象的属性时应该完成的事情。它是一个类&#xff0c;定义了另一个类的属性的访问方式。换句话说&#xff0c;一个类可以将属性管理委托给另一个类。 描述符类基于3个特殊方法&#xff0c;这3个方法组成了描述符协议&#xff08;descriptor…

scala 安装和创建项目

Scala&#xff0c;一种可随您扩展的编程语言&#xff1a;从小型脚本到大型多平台应用程序。Scala不是Java的扩展&#xff0c;但它完全可以与Java互操作。在编译时&#xff0c;Scala文件将转换为Java字节码并在JVM&#xff08;Java虚拟机&#xff09;上运行。Scala被设计成面向对…

【JAVA】Iterator 怎么使用?有什么特点

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Iterator 接口的主要方法&#xff1a; 例子 特点&#xff1a; 结语 我的其他博客 前言 在编程的世界里&#xff0c;迭代…

RGB,RGB-D,单目,双目,sterro相机,实例相机介绍

相机—特点及区别 1.相机种类 RGB&#xff0c;RGB-D&#xff0c;单目&#xff0c;双目&#xff0c;sterro相机&#xff0c;实例相机 2.相机特点 2.1单目 只使用一个摄像头进行SLAM&#xff0c;结构简单&#xff0c;成本低 三维空间的二维投影 必须移动相机&#xff0c;才…

DTM分布式事务

DTM分布式事务 从内网看到了关于事务在业务中的讨论&#xff0c;评论区大佬有提及DTM开源项目[https://dtm.pub/]&#xff0c;开学开学 基础理论 一、Why DTM ​ 项目产生于实际生产中的问题&#xff0c;涉及订单支付的服务会将所有业务相关逻辑放到一个大的本地事务&#xff…

卷积神经网络|迁移学习-猫狗分类完整代码实现

还记得这篇文章吗&#xff1f;迁移学习|代码实现 在这篇文章中&#xff0c;我们知道了在构建模型时&#xff0c;可以借助一些非常有名的模型&#xff0c;这些模型在ImageNet数据集上早已经得到了检验。 同时torchvision模块也提供了预训练好的模型。我们只需稍作修改&#xf…