当前位置: 首页 > news >正文

【云原生】Docker Compose 使用详解

目录

一、前言

二、Docker Compose 介绍

2.1 Docker Compose概述

2.2 Docker Compose特点

2.3 Docker Compose使用场景

三、Docker Compose 搭建

3.1 安装docker环境

3.2 Docker Compose安装方式一

3.2.1 下载最新版/如果不是最新可替换最新版本

3.2.2 设置权限

3.2.3 设置软链接

3.2.4 查看版本

3.3 Docker Compose安装方式二

3.3.1 安装python3

3.3.2 安装python-pip3并升级

3.3.3 执行如下命令安装 docker-compose

3.3.4 查看docker-compose版本

四、Docker Compose常用功能

4.1 使用docker安装redis

4.2 Docker Compose 配置文件属性概述

4.2.1 version

4.2.2 serivces - build

4.2.3 serivces - image

4.2.4 serivces - container_name

4.2.5 serivces - ports

4.2.6 serivces - command

4.2.7 serivces - depends_on

4.2.8 serivces - deploy

4.2.9 serivces - networks

4.2.10 serivces - volumes

4.3 Docker Compose常用命令(指令)

五、Docker Compose 构建容器使用案例

5.1 使用Docker Compose构建redis镜像

5.2 使用自定义网络创建mysql镜像

5.3 使用自定义数据卷

5.3.1 使用自定义volume方式一

5.3.2 使用自定义volume方式二

5.4 links与depends_on定义容器依赖关系

5.4.1 Docker Compose links指令使用案例

5.4.2 Docker Compose depends_on 指令使用案例

六、写在文末


一、前言

当前docker的应用已经非常普遍,使用docker之后,各类技术组件、中间件的安装部署和运维变得容易,同时也大大提升了服务器利用率,带来的好处是多方面的,另一方面,k8s的火热,也让docker进一步走进了很多人的视线,但是如何更加深度的应用docker和管理docker呢?本文将详细介绍docker的另一种编排工具docker-compose的使用。

二、Docker Compose 介绍

2.1 Docker Compose概述

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

  • 通过一个单独的 docker-compose.yml 配置文件,可以定义应用程序的服务、网络、卷以及其他配置信息。

  • 使用 Docker Compose 可以轻松地启动、停止和管理整个应用程序,而无需手动运行多个 docker run 命令。

  • Docker Compose 非常适合开发、测试和部署复杂的多容器应用程序,使得容器化应用程序的管理更加简单和高效。

  • 使用 Docker Compose,您只需要在安装了 Docker 的环境中安装 Docker Compose 工具即可。

2.2 Docker Compose特点

Docker Compose 具有以下特点:

  1. 简化多容器应用程序的管理

    1. Docker Compose 允许您将多个容器组合成一个应用程序,并通过一个配置文件来定义和管理它们。这使得启动、停止、重建和管理整个应用程序变得简单。

  2. 声明式配置

    1. 使用 YAML 文件来定义应用程序的配置,使得配置文件易于阅读、理解和维护。您可以定义服务的各种属性,如镜像、环境变量、端口映射、卷挂载等。

  3. 快速启动和停止

    1. 通过简单的命令,如 docker-compose updocker-compose down,您可以快速启动和停止整个应用程序。这使得本地开发和测试变得方便和高效。

  4. 自动化容器之间的网络连接

    1. Docker Compose 自动为应用程序中的服务创建一个默认网络,并将每个容器连接到该网络。这使得容器之间的通信变得简单,可以通过服务名称来进行访问,而无需处理 IP 地址和端口号。

  5. 数据卷管理

    1. Docker Compose 允许您定义卷挂载,将容器内的数据持久化到宿主机上。这简化了数据的管理和迁移,并可以确保数据的持久性。

  6. 可扩展性和复用性

    1. Docker Compose 允许您轻松地扩展和重用配置文件。您可以定义多个环境(如开发、测试、生产等)的配置,并根据需要进行组合和使用。

2.3 Docker Compose使用场景

如果日常开发中遇到下面的场景,可以考虑使用Docker Compose

  • 搭建本地开发环境

    • Docker Compose 可以帮助开发人员在本地快速搭建和管理多容器的开发环境。通过定义每个服务的镜像、环境变量、端口映射等属性,开发人员可以轻松地启动和停止整个应用程序,并在不同的服务之间进行通信。

  • 部署测试环境

    • Docker Compose 可以用于在测试环境中运行和管理多容器的应用程序。通过创建一个与生产环境相似的容器组合,测试人员可以在一个独立的环境中进行端到端的测试,并且可以轻松地重建和销毁整个测试环境。

  • 持续集成和持续部署

    • Docker Compose 可以与持续集成和持续部署工具集成,如 Jenkins、GitLab CI、Travis 等。通过在配置文件中定义构建步骤和部署策略,可以将整个应用程序以容器化的方式自动构建、测试和部署到生产环境中。

  • 多环境部署

    • Docker Compose 允许你定义多个环境(如开发、测试、生产)的配置文件,并根据需要进行组合和使用,这使得在不同环境中轻松部署应用程序变得简单和可靠。

  • 微服务架构

    • Docker Compose 适用于构建和管理微服务架构。通过将每个微服务定义为一个独立的服务,并使用容器进行隔离,可以实现微服务之间的松耦合和独立部署。

三、Docker Compose 搭建

3.1 安装docker环境

在安装Docker Compose之前,需要先安装Docker 环境,因为Docker Compose是基于Docker 进行安装和使用的,网上关于Docker 的安装和搭建比较简单,这里就略过了。

3.2 Docker Compose安装方式一

这也是网上能看到的大多数小伙伴们安装的一种方式,操作步骤如下

3.2.1 下载最新版/如果不是最新可替换最新版本

注意docker compose的版本要与docker版本尽量对齐

sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

3.2.2 设置权限

sudo chmod +x /usr/local/bin/docker-compose

3.2.3 设置软链接

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

3.2.4 查看版本

docker-compose --version

3.3 Docker Compose安装方式二

上面这种方式在实际操作的时候,因为要从git上面拉取包文件,可能会非常满,所以推荐第二种方式,操步骤如下

3.3.1 安装python3

sudo yum install python3

3.3.2 安装python-pip3并升级

yum -y install python3-pip
pip3 install --upgrade pip

3.3.3 执行如下命令安装 docker-compose

pip3 install docker-compose

3.3.4 查看docker-compose版本

docker-compose --version

四、Docker Compose常用功能

接下来对Docker Compose中涉及到的常用功能做详细的介绍,官网地址:Docker Compose overview | Docker Docs

4.1 使用docker安装redis

看下面的命令应该不陌生,通过下面这行命令就能快速启动一个redis的服务

docker run --name my-redis -d -p 6379:6379 redis:6

使用上面的一个命令就可以快速开启redis的镜像服务,为什么还要使用docker-compose呢?docker-compose该如何编写呢?docker-compose编写的语法如何?接下来,以此案例为标准详细探讨下如何使用docker-compose。

4.2 Docker Compose 配置文件属性概述

Docker Compose 使用 YAML 文件来定义服务。官方推荐的默认文件名为 compose.yml ,但同时也支持 docker-compose.yml。

compose 文件中包含 6 个顶级属性:version、services、networks、volumes、configs 与secrets,及很多的它们下面所包含的属性,在下面的内容中将会结合实际的案例一一说明。首先在服务器目录下创建一个docker-compose.yml文件,后面的内容都编写在该文件中。

4.2.1 version

version 是一个顶级属性,但已经过时,不再需要在 compose 文件中出现了,但是为了保持可读性,通常会加上,从官网说明中可以看出。

4.2.2 serivces - build

services 是一个顶级属性,也是整个Docker Compose配置文件中作为服务定义最重要的属性,它用于定义一个应用中所包含的服务。Docker Compose 会将每个服务部署在各自的容器中。其下包含的第一级的属性即为服务名称,这个名称可以根据服务内容随意命名。而在服务名称下还可包含很多的属性,常用属性如下:

build

  • 用于指定一个 Dockerfile 的路径。而该 Dockerfile 则是用于创建当前服务镜像的。这个路径可以是以斜杠(/)开头的绝对路径,也可以是相对于当前 compose 文件的、以点(.)号开头的相对路径。

    • 如果 Dockerfile 文件名不是默认名称,则需要通过 build 下的 context 属性指定路径,dockerfile 属性指定文件名。

build:context: ./dockerfile: myDockerfile

4.2.3 serivces - image

用户指定当前服务所需要使用的镜像,这个镜像可以是本地镜像,也可以是远程镜像仓库中的镜像(会自动 pull)。

如果设置了 build,此时再设置的 image 属性即为构建出的镜像的名称与 Tag。

比如下面这段配置,指定image后面构建镜像时依赖的redis版本号

version: '3'
services:redis: # 服务名称image: redis:6.2.14 # redis镜像版本container_name: redis6.2.14 # 容器名称...

4.2.4 serivces - container_name

该属性用于设置容器名称,但并不是必须的。如果没有设置该属性,容器名称则会采用“合成方式”。而合成时需要用到 services 下的第一级属性。

  • 在 services 下存在一级属性,称为服务名称。该级属性是作为 services 下的第一级属性出现的。服务名称将来会作为容器名称的一部分出现。容器的名称格式为:当前 compose文件所在目录名_ 服务名称。

  • 如果在 services 下没有指定 image 属性,而是使用 bild 属性,即没有现成的镜像,而是根据 build 下指定的 Dockerfile 生成镜像,此时生成的镜像名称格式为:当前 compose 文件所在目录名-服务名称。

比如下面这段配置,指定构建出来的容器名称为redis6.2.14

version: '3'
services:redis: # 服务名称image: redis:6.2.14 # redis镜像版本container_name: redis6.2.14 # 容器名称...

4.2.5 serivces - ports

前面为暴露出的端口号,后面为容器中应用的端口号。如果仅设置了一个端口号,那么这个端口号是容器中应用的端口号,其暴露到宿主机的端口号会被随机分配。如下所示:

ports:- 8081:8081 # 绑定容器的 8081 端口到主机的 8081 端口- 9000:8000 # 绑定容器的 8000 端口到主机的 9000 端口- 443 # 绑定容器的 443 端口到主机的任意端口,容器启动时随机分配绑定的主机端口号

比如下面这段配置,表示开启的redis容器对外访问端口为6379,与容器内的6379端口对应

version: '3'
services:redis: # 服务名称image: redis:6.2.14 # redis镜像版本container_name: redis6.2.14 # 容器名称ports:- 6379:6379 # 指定宿主机端口与容器端口映射关系,宿主机:容器...

4.2.6 serivces - command

用于覆盖 Dockerfile 中的 CMD 指令内容,即启动该服务容器后立即运行的命令。如果直接按照Dockerfile中的CMD指令内容执行即可,则compose文件中无需该command属性。

比如下面这段配置,在command后面执行了一段指令,其目的就是最后要启动redis-server服务的命令

version: '3'
services:redis: # 服务名称image: redis:6.2.14 # redis镜像版本container_name: redis6.2.14 # 容器名称ports:- 6379:6379 # 指定宿主机端口与容器端口映射关系,宿主机:容器command: ["redis-server","/etc/redis/redis.conf"] # 指定配置文件启动redis-server进程...

4.2.7 serivces - depends_on

在 Docker Compose 中,depends_on 是一个用于定义服务之间依赖关系的关键字。它允许您指定一个或多个服务依赖于其他服务,以确保在启动或重新创建容器时,所依赖的服务先于依赖它们的服务启动。如下,web容器启动时,需要依赖db和redis两个容器的启动之后才会启动。

services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

depends_on补充说明,

  • 启动顺序

    • 通过在服务的配置中使用 depends_on,您可以告诉 Docker Compose 在启动容器时按照指定的顺序启动服务。例如,如果服务 A 依赖于服务 B 和服务 C,则在启动时,Docker Compose 会先启动服务 B 和服务 C,然后才会启动服务 A。

  • 仅表示依赖关系

    • depends_on 只表示依赖关系,而不会等待依赖的服务完全可用。它只确保在依赖的服务启动后再启动当前服务。因此,依赖的服务可能仍在进行初始化或准备阶段,而不一定已经完全可用。如果需要等待服务完全可用,可以结合使用其他工具或技术,例如健康检查或等待脚本。

  • 无法保证健康状态

    • depends_on 并不能保证依赖的服务在启动后处于健康状态。它只负责在启动时按照指定顺序启动服务,但并不检查服务的健康状态或等待服务变为可用状态。对于检查服务健康状态,可以使用其他机制,例如使用健康检查命令或工具。

  • 并行启动

    • 默认情况下,Docker Compose 会尽可能并行启动服务,而不是完全按照 depends_on 指定的依赖关系顺序启动。这是因为 Docker Compose 会尝试最大化容器的并发启动,以提高启动效率。如果需要强制按照依赖关系顺序启动,请使用 depends_on 结合 restart 关键字的 condition: ["service_started"] 选项。

4.2.8 serivces - deploy

用于指定当前服务容器的部署设置

docker-compose deploy命令的作用是将一个由docker-compose.yml定义的服务栈部署到Swarm集群。这个命令会创建所需的服务和网络,并在集群中启动它们。它还会管理服务的更新和扩展。

deploy属性下有一个常用属性 replicas,用于指定该服务启动的容器的数量。即实现一个服务多个容器。一旦指定了 deploy:replicas,就不能再指定container_name 属性了。因为各个启动的容器名称不能相同,而只能由系统自动生成。如下示例:

version: "3.9"services:wordpress:image: wordpressports:- "8080:80"networks:- overlaydeploy:mode: replicatedreplicas: 2endpoint_mode: vipmysql:image: mysqlvolumes:- db-data:/var/lib/mysql/datanetworks:- overlaydeploy:mode: replicatedreplicas: 2endpoint_mode: dnsrrvolumes:db-data:networks:overlay:

4.2.9 serivces - networks

用于指定当前服务容器要连接到的网络。该网络必须是已经存在的,通常会提前创建好,或通过顶级属性networks 创建的网络。

有些时候我们希望一些服务只能被一组特定的服务访问,这个时候使用只依靠默认的网络就行不通了,那么我们就需要根据自己的情况搭建我们的服务组的网络架构,就会用到docker-compose的networks功能了。networks主要有下面的几种:

default

默认情况下docker-compose会建立一个默认的网络,名称为docker-compose.yml所在目录名称小写形式加上“_default”,我们的TFLinux环境就是“tflinux_default”。

这个默认网络会对所有services下面的服务生效,所以services下面的各个服务之间才能够通过service名称互相访问。如果要自定义默认网络可以针对“default”网络进行设置,这样就会影响导默认网络了。

networks:default:driver: bridge

自定义

除了默认网络之外,我们也可以建立自定义的网络,这个网络名称就比较随意了。

networks:persist:driver: bridge

已存在的网络

有时候我们想使用我们通过docker network create创建好的网络,而不是让docker-compose创建一个新的,这个时候就需要用到“external”关键字了。

networks:persist:external:name: bridge2

4.2.10 serivces - volumes

volume 允许您在 Docker Compose 文件中定义卷,以便在多个容器之间共享数据。这些卷可以用于持久性数据存储,例如数据库文件、配置文件等。通过使用 docker-compose volume,您可以轻松地管理这些数据卷,并确保它们在容器之间共享和持久化。volume 通常可以使用路径与卷标两种方式。

比如像下面这种,就是路径的方式,直观且易于查看,但需要管理本地路径。

db:image: mariadb:latestports:- "3306:3306"volumes:- /etc/mysql:/var/lib/mysql

而下面是卷标方式,backend 与 backup 两个服务共享了 db-data 的卷,逻辑简洁明了,且无需管理本地路径。但具体卷标所代表的是 Docker 主机的哪个路径,并不能直观的看到。需要通过 docker volume inspect [卷标]来查看。

services:backend:image: awesome/databasevolumes:- db-data:/etc/databackup:image: backup-servicevolumes:- db-data:/var/lib/backup/data
volumes:db-data:

4.3 Docker Compose常用命令(指令)

Docker Compose通过docker-compose系列命令查看和控制compose中的所有服务容器。常用的操作命令总结如下。

  • docker-compose pull

    • 拉取 compose 中服务依赖的全部镜像或指定镜像。通过在命令后添加服务名称来指定。

  • docker-compose config

    • 检查 compose 文件是否正确。可添加选项-q,表示只有存在问题时才有输出。

  • docker-compose up

    • 启动 compose 配置文件中的所有容器。-d 选项表示后台启动。

  • docker-compose logs

    • 查看 comopse 中所有服务或指定服务的运行日志。通过在命令后添加服务名称来指定。

      默认情况下,将对不同的服务日志使用不同的颜色来区分。

  • docker-compose ps

    • 列出 compose 中所有服务或指定服务。通过在命令后添加服务名称来指定。

  • docker-compose top

    • 列出 compose 中当前正在运行的所有服务或指定服务。通过在命令后添加服务名称来

      指定。

  • docker-compose images

    • 列出 compose 中所有服务或指定服务对应的镜像。通过在命令后添加服务名称来指定。

  • docker-compose port

    • 列出指定服务容器的指定端口所映射的宿主机端口。

  • docker-compose run

    • 在指定服务上执行一条命令。

  • docker-compose exec

    • 进入指定服务容器。通过在命令后添加服务名称来指定。

  • docker-compose pause

    • 暂停 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定。

  • docker-compose unpause

    • 恢复 compose 中处于暂停状态的所有服务容器或指定服务容器。通过在命令后添加服

      务名称来指定。

  • docker-compose stop

    • 停止 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定。

  • docker-compose restart

    • 重启 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定。

  • docker-compose start

    • 启动 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定。

  • docker-compose kill

    • 通过发送 SIGKILL 信号停止指定服务的容器。

  • docker-compose rm

    • 删除 compose 中的、处于停止状态的所有服务容器或指定服务容器。通过在命令后添

      加服务名称来指定。

  • docker-compose down

    • 停止并删除 compose 中的所有服务容器、网络、镜像、数据卷。

五、Docker Compose 构建容器使用案例

有了上面的理论基础,接下来通过几个实际的案例更深入理解Docker Compose中配置属性的使用。

5.1 使用Docker Compose构建redis镜像

创建一个docker-compose-redis.yml文件,参照上文的配置项说明,配置内容如下

version: '3'
services:redis: # 服务名称image: redis:6 # redis镜像版本container_name: redis6 # 容器名称ports:- 6379:6379 # 指定宿主机端口与容器端口映射关系,宿主机:容器volumes:- /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf # 映射配置文件目录,宿主机:容器- /usr/local/docker/redis/data:/data # 映射数据目录,宿主机:容器privileged: true # 获取宿主机root权限command: ["redis-server","/etc/redis/redis.conf"] # 指定配置文件启动redis-server进程

使用下面的命令进行启动

docker compose -f docker-compose-redis.yml up -d

可以通过docker ps检查容器是否启动成功

5.2 使用自定义网络创建mysql镜像

docker 容器的网络通信方式有多种,但是自定义网络最灵活,最有用,在Docker中使用自定义网络可以帮助我们更好地管理容器之间的通信和隔离。在docker中使用自定义网络比较简单,只需要下面简单的几步即可:

  • 创建自定义网络

  • 查看自定义网络

  • 启动容器,连接到自定义网络

  • 查看容器网络

下面看一个具体的使用案例,使用自定义网络创建一个mysql镜像

1)自定义网络

docker network create mysql_network

2)查看自定义网络

docker network ls

3)使用自定义网络启动mysql容器

docker run --name mysql_02 --network mysql_network -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

上面演示了如何在docker 容器中使用自定义网络,如果是在docker-compose中使用自定义网络,可以参考下面的配置:

version: '3.8'services:mysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: mydbnetworks:- my-networkports:- "3306:3306"
#自定义网络
networks:my-network:driver: bridge

在这段配置中的最后一部分networks标签中,定义了一个名为my-network的网络,模式为bridge,最后再在启动mysql5.7镜像时指定网络为上述自定义的网络。使用下面的命令运行并启动镜像:

docker-compose up -d

关于docker-compose网络相关的设置,更详细的可以参阅官网文档进行深入研究:Networks top-level elements | Docker Docs

5.3 使用自定义数据卷

5.3.1 使用自定义volume方式一

使用自定义数据卷可以避免容器宕机之后数据丢失,在docker compose中可以使用自定义数据卷,仍以上文案例为例,再在docler-compose.yml配置文件中添加volume相关的信息,在下面的这种方式中,与我们使用docker创建一个mysql容器并且指定数据卷的方式相似

version: '3.8'services:mysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: mydbnetworks:- my-networkports:- "3306:3306"volumes:- /data/mysql/conf:/etc/mysql/conf.d- /data/mysql/data:/var/lib/mysql
networks:my-network:driver: bridge

然后使用docker-compose up -d启动容器

进入到数据卷目录,文件已经自动生成

5.3.2 使用自定义volume方式二

也可以像配置networks那样,在配置的最后面统一定义一个volume名称,也即声明数据卷,声明之后,docker compose在启动容器的时候就会自动去创建这个名称的数据卷,最后再在service属性配置镜像的时候进行引用即可,如下,创建一个nginx的配置文件,配置内容如下:

version: '2.1'services:nginx-demo:image: "nginx"networks:- nginx-networkports:- "80:80"volumes: #引用下面的数据卷名称,右边与容器的目录映射- nginx_volume:/usr/share/nginx/htmlnetworks:nginx-network:driver: bridgevolumes:nginx_volume: #声明数据卷,这里可以只需要声明即可,也可以填写具体的数据卷目录

然后使用命令启动:

docker compose -f docker-nginx-compose.yml up -d

容器是否启动成功呢?可以使用curl命令访问一下nginx

数据卷更详细的文档可以参考:Volumes top-level element | Docker Docs

5.4 links与depends_on定义容器依赖关系

Docker Compose的links指令,是一种连接容器的方式,它允许一个容器连接到另一个容器,或者说一个容器的启动依赖另一个容器先启动,并且可以通过容器名称来访问连接的容器。

在Docker Compose中,links可以在服务之间创建连接,以便它们可以相互通信。在引用中提到的错误是因为使用了links扩展方式,而links只能直接在docker-compose.yml文件中使用,不能在扩展文件中使用。如果需要在扩展文件中使用,可以使用networks来代替links。

5.4.1 Docker Compose links指令使用案例

比如下面的案例中,使用docker compose的方式定义了两个容器,nginx和redis,而nginx容器的启动需要依赖redis的启动,也可以说redis的启动影响nginx;

version: '3.1'services:nginx-demo:image: "nginx"networks:- nginx-networkports:- "80:80"volumes:- nginx_volume:/usr/share/nginx/htmllinks:- "redis:dev"redis:image: redis:6ports:- 6379:6379networks:nginx-network:driver: bridgevolumes:nginx_volume: #声明数据卷

使用命令:docker compose -f docker-links-compose.yml up -d 启动,从镜像的拉取和启动顺序来看,redis容器启动先于nginx;

最后通过docker ps命令检查容器是否启动成功

5.4.2 Docker Compose depends_on 指令使用案例

depends-on 指令用于指定一个容器的启动运行依赖于另一个容器。当 depends-on 指令被使用时,Docker 将不会启动依赖容器,直到被依赖的容器启动并运行成功。仍然以上面的links案例进行说明,只需要对配置做简单的调整即可。如下,将links标签更换为depends_on即可:

version: '3.1'services:nginx-demo:image: "nginx"networks:- nginx-networkports:- "80:80"volumes:- nginx_volume:/usr/share/nginx/htmldepends_on:- redisredis:image: redis:6ports:- 6379:6379networks:nginx-network:driver: bridgevolumes:nginx_volume: #声明数据卷

再次启动容器,可以看到效果和上面的links差不多

关于depends-on指令的详细说明,可以参照上文中的介绍进行理解,该指令在对微服务部署实践中非常实用,而且也是经常会使用到的一个指令,值得深入探究

六、写在文末

本文通过较大的篇幅从多个角度深入详细探讨了docker编排工具Docker Compose的使用,并结合相关的案例对其中涉及到的指令进行了深入的说明,合理使用Docker Compose可以为docker镜像的编排和管理带来很多好处,提升docker的运维效率,本篇到此结束,感谢观看。

相关文章:

【云原生】Docker Compose 使用详解

目录 一、前言 二、Docker Compose 介绍 2.1 Docker Compose概述 2.2 Docker Compose特点 2.3 Docker Compose使用场景 三、Docker Compose 搭建 3.1 安装docker环境 3.2 Docker Compose安装方式一 3.2.1 下载最新版/如果不是最新可替换最新版本 3.2.2 设置权限 3.2.…...

通过LabVIEW提升生产设备自动化水平

现代制造业对生产设备的自动化水平提出了越来越高的要求。使用LabVIEW这一强大的图形化编程环境,可以显著提升生产设备的自动化程度,改善生产效率和产品质量。本文将详细分析如何通过LabVIEW改善生产设备的自动化水平,并提供具体的实施策略与…...

面试题vue+uniapp(个人理解-面试口头答述)未编辑完整....

1.vue2和vue3的区别(vue3与vue2的区别(你不知道细节全在这)_vue2和vue3区别-CSDN博客)参考 Vue3 在组合式(Composition )API,中使用生命周期钩子时需要先引入,而 Vue2 在选项API&am…...

PPP-B2b精密产品使用注意事项及分析

1、因为在使用PPP-B2b进行定轨的时候,发的精密轨道产品是B3频点的,需要改正的卫星质心(Com)与SP3精密星历对比。 2、PPP-B2b产品吸收了电离层误差,因此电离层提取方面与IGS电离层完全无法对其。 3、由于PPP-B2b产品精…...

C语言(结构体)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…...

Python filter()用法:深入解析与实战应用

Python filter()用法:深入解析与实战应用 在Python编程中,filter() 函数是一个内置的高阶函数,它用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数在数据处理和筛选时非常有用&#xff0…...

k8s集群的存储卷、pvc和pv

目录 简介 简介 PV 全称叫做 Persistent Volume,持久化存储卷。它是用来描述或者说用来定义一个存储卷的,这个通常都是由运维工程师来定义。 PVC 的全称是 Persistent Volume Claim,是持久化存储的请求。它是用来描述希望使用什么样的或者说…...

二分搜索树深度优先遍历

二分搜索树深度优先遍历 二分搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,它具有以下特性:对于树中的任意节点,其左子树中的所有元素都小于该节点的值,其右子树中的所有元素都大于该…...

ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘‘

参考自: [Bug]: ImportError: cannot import name packaging from pkg_resources (/usr/local/lib/python3.10/dist-packages/pkg_resources/__init__.py) Issue #15863 AUTOMATIC1111/stable-diffusion-webui GitHub ImportError: cannot import name packaging from pkg…...

灯塔歌曲音乐下载官网

灯塔歌曲音乐下载官网网址:www.dengtamp3.com 灯塔音乐下载上线以“用心服务,认真负责”为核心价值。 我们的团队是一个青春的团队,朝气蓬勃。我们采用最新的服务模式,以网为媒为广大客户提供服务,我们坚持以“用心&a…...

数据结构的归并排序(c语言版)

一.归并排序的基本概念 1.基本概念 归并排序是一种高效的排序算法,它采用了分治的思想。它的基本过程如下: 将待排序的数组分割成两个子数组,直到子数组只有一个元素为止。然后将这些子数组两两归并,得到有序的子数组。不断重复第二步,直到最终得到有序的整个数组。 2.核心…...

ubuntu使用Docker笔记

一、参考资料 1、B站视频 尚硅谷Docker实战教程 2、有心人整理的笔记 Docker笔记(周阳版) 3、菜鸟教程 Docker 教程 以下是本人的折腾实践。 二、Docker的安装 2.1、使用清华源安装docker,清华源官方教程。 本人是在ubuntu20.04下安装的…...

PHP编程入门:揭开Web开发的神秘面纱

PHP编程入门:揭开Web开发的神秘面纱 在数字化时代,PHP作为一种广泛使用的服务器端脚本语言,为Web开发领域注入了强大的活力。无论你是编程新手还是有一定经验的开发者,掌握PHP编程都将为你开启一扇通往Web开发新世界的大门。接下…...

曲线拟合工具软件(免费)

曲线拟合是数据处理中经常用到的数值方法,本质是使用某一个模型(方程或者方程组)将一系列离散的数据拟合成平滑的曲线或者曲面,数值求解出对应的函数参数,大家可以利用MATLAB的曲线拟合工具箱也可以使用第三方的拟合软件,今天我们介绍Welsim免费的曲线拟合软件 1、MATLA…...

基于L1范数惩罚的稀疏正则化最小二乘心电信号降噪方法(Matlab R2021B)

L1范数正则化方法与Tikhonov正则化方法的最大差异在于采用L1范数正则化通常会得到一个稀疏向量,它的非零系数相对较少,而Tikhonov正则化方法的解通常具有所有的非零系数。即:L2范数正则化方法的解通常是非稀疏的,并且解的结果在一…...

Bitbucket的原理及应用详解(一)

本系列文章简介: 在数字化和全球化的今天,软件开发和项目管理已经成为企业成功的关键因素之一。随着团队规模的扩大和项目的复杂化,如何高效地协同开发、管理代码和确保代码质量成为了开发者和管理者面临的重要挑战。Bitbucket作为一款功能强…...

企业级win10电脑下同时存在Python3.11.7Python3.6.6,其中Python3.6.6是后装的【过程与踩坑复盘】

背景: 需要迁移原始服务器的上的Python3.6.6+Flask项目到一个新服务器上, 新服务器上本身存在一个Python3.11.7, 所以这涉及到了一个电脑需要装多个Python版本的问题 过程: 1-确定新电脑版本【比如是32还是64位】 前面开发人员存留了两个包,是python-3.6.6.exe和pytho…...

泛微开发修炼之旅--03常用数据表结构讲解

文章链接:泛微开发修炼之旅--03常用数据表结构讲解...

MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

一、找不到my.ini配置文件 MySQL 8 安装或启动过程中,如果系统找不到my.ini文件,通常意味着 MySQL服务器没有找到其配置文件。在Windows系统上,MySQL 8 预期使用my.ini作为配置文件,而不是在某些情况下用到的my.cnf文件。 通过 …...

Android 13 亮度调节代码分析

frameworks\base\packages\SystemUI\res\layout\quick_settings_brightness_dialog.xml 进度条控件 <com.android.systemui.settings.brightness.BrightnessSliderViewxmlns:android"http://schemas.android.com/apk/res/android"android:id"id/brightness…...

基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面.对光谱数据的成分进行提取&#xff0c;分析CO2&#xff0c;SO2&#xff0c;CO以及CH4四种成分比例。 2.…...

【初识Objective-C】

Objective-C学习 什么是OCOC的特性OC跑的第一个程序helloworld OC的一些基础知识标识符OC关键字数据类型字符型c字符串为什么NSString类型定义时前面要加和普通的c对象有什么区别 一些基础知识if语句switch语句三种循坏语句for循环&#xff1a;用于固定次数的循环while循环&…...

从功能性磁共振成像(fMRI)数据重建音频

听觉是人类最重要的感官之一&#xff0c;它负责接收外部的听觉刺激&#xff0c;并将这些信息传递给大脑进行处理和理解。研究人员正致力于从神经科学和计算机科学两个领域探索人脑的听觉感知机制。一个关键目标是从人脑中解码神经信息&#xff0c;并重建原始的刺激。常见的大脑…...

前端Vue小兔鲜儿电商项目实战Day04

一、二级分类 - 整体认识和路由配置 1. 配置二级路由 ①准备组件模板 - src/views/SubCategory/index.vue <script setup></script><template><div class"container"><!-- 面包屑 --><div class"bread-container">…...

TypeScript的简单总结

TypeScript 深度总结 引言 TypeScript&#xff0c;作为JavaScript的一个强类型超集&#xff0c;由Microsoft在2012年推出并维护至今&#xff0c;它不仅继承了JavaScript的所有特性&#xff0c;还引入了静态类型系统和其他现代编程特性&#xff0c;为开发者提供了一个更安全、…...

I.MX6ULL UART 串口通信实验

系列文章目录 I.MX6ULL UART 串口通信实验 I.MX6ULL UART 串口通信实验 系列文章目录一、前言二、I.MX6U 串口简介2.1 UART 简介2.2 I.MX6U UART 简介 三、硬件原理分析四、实验程序编写五、编译下载验证5.1编写 Makefile 和链接脚本5.2 编译下载 一、前言 不管是单片机开发还…...

systemctlm-cosim-demo项目分析

概述 systemctlm-cosim-demo项目是Xilinx的systemc库的demo工程。 环境安装 qemu安装 cd xilinx_proj/Downloads git clone https://github.com/Xilinx/qemu.git cd qemu git checkout 74d70f8008# Configure and build # zynq7000 # ./configure --target-list"arm-s…...

SQL学习小记(四)Navicat中连接Oracle数据库的详细步骤

五分钟解决Oracle连接问题&#xff1a;DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified module could not be SQL学习小记&#xff08;四&#xff09;Navicat中连接Oracle 1. 错误信息2. 解决过程2.1.版本查询2.2. 官网下载2.3. 设置Navicat的oci环…...

mysql聚簇索引

1.聚簇索引是物理索引&#xff0c;数据在表里是按顺序存储的&#xff0c;物理上是连续的&#xff0c;一般选主键id作为聚簇索引&#xff0c;且一张表里只能有一个聚簇索引。 2.只有InnoDB支持聚簇索引。 3.非聚簇索引是逻辑索引&#xff0c;将数据的某个字段抽取出来组成独立的…...

【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解

目录 引言 一、存储卷 &#xff08;一&#xff09;存储卷定义 &#xff08;二&#xff09;存储卷的作用 1.数据持久化 2.数据共享 3.解耦 4.灵活性 &#xff08;三&#xff09;存储卷的分类 1.emptyDir存储卷 1.1 定义 1.2 特点 1.3 示例 2.hostPath存储卷 2.1 …...

wordpress 支持 手机版/长春网站制作设计

关键词&#xff1a;搜救小车 stc89c52 避障 机械臂摘要&#xff1a;由于灾害现场搜救人员难以迅速展开救援工作,设计出本小车,小车以STC89C52单片机为核心控制器,采用WIFI模块进行人机互交,体感、声感和光感模块辨别位置,机械手执行用户操作,红外和超声波组合进行避障。小车…...

网站的推广方式/企业培训课程设计

文章目录AMQP协议的回顾RabbitMQ支持的消息模型第一种模型(直连)开发生产者开发消费者生产者、消费者开发优化API参数细节第二种模型(work quene)开发生产者开发消费者消息自动确认机制第三种模型(fanout)开发生产者开发消费者第四种模型(Routing)开发生产者开发消费者第五种模…...

外国人的做视频网站吗/关键词优化按天计费

自动翻页分为两种情况&#xff1a;此处所举例子有一定的时效性&#xff0c;请具体情况具体分析&#xff0c;方法类似 &#xff08;1&#xff09;一种是像我之前爬虫新京报网的新闻&#xff0c;下一页的url可以通过审查元素获得&#xff0c;第一页的网址是http://www.bjnews.com…...

wordpress 效率/定向推广

ubuntu下安装好LAMP后默认情况没有安装mysql_pdo扩展&#xff0c;以下是安装步聚 1 安装pdo sudo pecl install pdo 出现以下错误是说明pdo已经加入了php的默认安装&#xff0c;不需要再安装了 [Some stuff excluded for brevity]make: *** [pdo_dbh.lo] Error 1 ERROR: make f…...

海阳网站制作/如何推广网站运营

1.简介if判断语句是很多编程语言的重要组成部分。但是&#xff0c;若我们最终编写了大量嵌套的if语句&#xff0c;这将使得我们的代码更加复杂和难以维护。让我们看看能否使用别的方式来做呢。设计模式是为了更好的代码重用性&#xff0c;可读性&#xff0c;可靠性&#xff0c;…...

网站优化有哪些/公司网站搭建

数据链路层(一)3.1 使用点对点信道的数据链路层3.1.1 数据链路层和帧数据发送模型数据链路层的信道类型数据链路层使用的信道主要有以下两种类型&#xff1a;点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式&#xff0c;因此过程…...