Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

news2025/1/21 12:58:00

Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

  • 一、Docker Compose简介
  • 二、Docker Compose安装
  • 三、Docker Compose卸载
  • 四、Docker Compose核心概念
    • 4.1、一文件原则(docker-compose.yml)
    • 4.2、服务(service)
    • 4.3、工程(project)
  • 五、Docker Compose使用步骤
  • 六、Docker Compose编排微服务
    • 6.1、实战-改造升级微服务project(常规部署微服务项目)
    • 6.2、实战-改造升级微服务project(使用Docker Compose编排微服务)
    • 6.3、总结-Docker Compose的优点
  • 七、Docker Compose常用命令


💖The Begin💖点点关注,收藏不迷路💖

在这里插入图片描述

在开始之前,我们需要确保已经安装了 Docker

一、Docker Compose简介

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。它通过一个简单易懂的 YAML 文件来定义应用程序的各个服务(只需一个命令、即可启动、关闭这些容器),并提供了简洁的命令行界面来管理这些容器。

在这里插入图片描述

下面是一个简单的示例来说明Docker Compose的工作原理:

假设我们有一个Web应用程序,它由两个容器组成:一个是运行Web服务器的容器,另一个是运行数据库的容器。使用Docker Compose,我们可以将这两个容器的配置定义在一个YAML文件中,例如docker-compose.yml:

version: '3'
services:
  web:
    image: nginx
    ports:
      - 80:80
    depends_on:
      - db
  db:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret

在上面的示例中,我们定义了两个服务:web和db。每个服务都指定了所使用的镜像和一些配置。例如,web服务使用了nginx镜像,并将主机的端口80映射到容器的端口80。db服务使用了mysql镜像,并设置了一个环境变量。

要启动这个应用程序,我们只需在命令行中运行docker-compose up命令。Docker Compose将根据docker-compose.yml文件的定义,下载所需的镜像并创建和启动相应的容器。这两个容器将会自动建立网络连接,并按照定义的依赖关系来启动。

通过使用Docker Compose,我们可以轻松地定义、启动和管理多个容器组成的应用程序。这使得开发、测试和部署复杂的多容器应用程序变得更加简单和可靠。

二、Docker Compose安装

官网:https://docs.docker.com/compose/install/standalone/

1、查看系统架构:
[root@zyl-server ~]# uname -s
Linux
[root@zyl-server ~]# uname -m
x86_64
[root@zyl-server ~]#


2、将Docker Compose的二进制文件下载到/usr/local/bin/docker-compose

# 官网安装
sudo curl -L "https://github.com/docker/compose/releases/download/<VERSION>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

--<VERSION>替换为实际的版本号,$(uname -s)-$(uname -m) 为实际系统架构。


下载命令:

curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

在这里插入图片描述

3、授予docker-compose二进制文件可执行权限:

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


4、验证Docker Compose是否安装成功,运行以下命令:

docker-compose --version

如果一切顺利,将看到Docker Compose的版本信息。

如:
Docker Compose version v2.20.2

现在,已经成功地安装了Docker Compose。即可使用docker-compose命令管理和部署Docker容器。

在这里插入图片描述

三、Docker Compose卸载

卸载Docker Compose,如果是⼆进制包⽅式安装的,删除⼆进制⽂件即可。

sudo rm /usr/local/bin/docker-compose

如果使用了非二进制方式安装Docker Compose,例如使用包管理器或其他安装方法,可以根据具体使用的方法来卸载Docker Compose。

以下是一些常见的卸载方法:

1、如果使用pip安装了Docker Compose,请使用以下命令卸载:

pip uninstall docker-compose

2、如果使用包管理器(如apt、yum或dnf)安装了Docker Compose,使用包管理器的相应命令来卸载。例如,在Ubuntu上,可以运行以下命令:

sudo apt remove docker-compose

在CentOS上,可以运行以下命令:

sudo yum remove docker-compose

确认已成功卸载后,可以通过运行docker-compose --version命令来验证Docker Compose是否已完全卸载。

四、Docker Compose核心概念

4.1、一文件原则(docker-compose.yml)

Docker Compose的核心理念是使用一个YAML格式的Compose文件来定义容器化应用的结构和配置信息。这个Compose文件可以包含多个服务以及它们相关的配置项,例如镜像、环境变量、网络设置等。通过这个一文件原则,我们可以将应用的整体结构和配置信息集中地进行管理和维护。

4.2、服务(service)

服务的定义

服务(service)是Compose文件中的一个关键概念,它代表了一个个容器化的应用。每个服务可以包括一个或多个容器,共同完成特定的功能。比如,一个Web应用可能包含一个Web服务器容器和一个数据库容器。

服务的配置

在Compose文件中,我们可以为每个服务指定以下配置项:

镜像(image):用于指定服务所使用的Docker镜像。
环境变量(environment):用于设置服务容器的环境变量。
端口映射(ports):用于将容器内的端口映射到主机上。
依赖关系(depends_on):用于指定服务之间的依赖关系,确保它们按照正确的顺序启动。

服务的启动和管理 通过执行docker-compose up命令,我们可以启动Compose文件中定义的所有服务。

Docker Compose会自动创建和管理相关的容器。同时,我们还可以使用其他命令来管理服务,如docker-compose stop停止服务、docker-compose restart重启服务等。

4.3、工程(project)

工程的定义

工程(project)是Docker Compose中的另一个核心概念,它代表了一个Compose文件所定义的完整应用。一个工程可以包含多个服务,通过Compose文件统一管理和部署。

多工程支持

Docker Compose不仅支持单一工程,还可以同时管理多个工程。通过指定不同的Compose文件,我们可以轻松地定义和管理多个应用。

多环境支持

在实际开发和部署中,我们通常会有不同的环境(如开发、测试、生产环境)需要支持。Docker Compose通过使用不同的Compose文件,可以方便地适配不同的环境配置。

五、Docker Compose使用步骤

使用Docker Compose编排微服务的步骤

1、编写Compose文件:使用YAML语法编写一个Compose文件,定义每个微服务及其相关配置,如镜像、端口映射和环境变量等。

2、定义服务之间的依赖关系:使用depends_on关键字定义每个服务之间的依赖关系,以确保它们按正确的顺序启动。

3、运行Compose文件:使用docker-compose命令运行Compose文件,Docker Compose将会自动创建和管理所需的容器,并启动微服务。

4、监控和扩展:使用Docker Compose可以轻松监控和扩展微服务。通过添加新的服务实例或增加容器数量,可以根据应用程序的需求进行快速扩展。

六、Docker Compose编排微服务

6.1、实战-改造升级微服务project(常规部署微服务项目)

第一版(无mysql、redis数据库,无swagger-ui、无业务类):
在这里插入图片描述
在这里插入图片描述

改造升级:

1、建库建表

##建库
CREATE DATABASE demo1;


##建表
CREATE TABLE `t_user` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',

  `password` varchar(50) NOT NULL DEFAULT '' COMMENT '密码',

  `sex` tinyint(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ',

  `deleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',

  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表'

2、启动mysql,redis,这里使用docker部署

docker run -d -p 3306:3306 --name mysql-5.7 -e MYSQL_ROOT_PASSWORD=123456 -v /mysql/data:/var/lib/mysql mysql:5.7

docker run -d -p 6379:6379 --privileged=true --name my-redis -v /apps/redis/redis.conf:/etc/redis/redis.conf -v /apps/redis/data:/data -d redis:7.0.9 redis-server /etc/redis/redis.conf

在这里插入图片描述

3、微服务project修改

在这里插入图片描述

swagger测试:http://http://localhost:你的微服务端口/swagger-ui.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、打包

在这里插入图片描述

源码及jar下载地址:https://download.csdn.net/download/qq_41840843/88332778

5、上传jar至/root/my-projects,并编写Dockerfile

vi Dockerfile,文件内容:

# 基础镜像使用java

FROM java:8

# 作者

MAINTAINER zyl

# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp

VOLUME /tmp

# 将jar包添加到容器中并更名为zzyy_docker.jar

ADD demo2-0.0.1-SNAPSHOT.jar zyl_docker.jar

# 运行jar包

RUN bash -c 'touch /zyl_docker.jar'

ENTRYPOINT ["java","-jar","/zyl_docker.jar"]

#暴露6001端口作为微服务

EXPOSE 6001

在这里插入图片描述
6、构建镜像

docker build -t zyl_docker:1.0 .

[root@zyl-server my-projects]# docker build -t zyl_docker:1.0 .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            BuildKit is currently disabled; enable it by removing the DOCKER_BUILDKIT=0
            environment-variable.

Sending build context to Docker daemon  54.53MB
Step 1/7 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/7 : MAINTAINER zyl
 ---> Running in 0b94bf865db4
Removing intermediate container 0b94bf865db4
 ---> 7047fae445bc
Step 3/7 : VOLUME /tmp
 ---> Running in 0c1f38b522a5
Removing intermediate container 0c1f38b522a5
 ---> 4a2014520455
Step 4/7 : ADD demo2-0.0.1-SNAPSHOT.jar zyl_docker.jar
 ---> 32de0000fc4c
Step 5/7 : RUN bash -c 'touch /zyl_docker.jar'
 ---> Running in ec844531707c
Removing intermediate container ec844531707c
 ---> 15c50c6da487
Step 6/7 : ENTRYPOINT ["java","-jar","/zyl_docker.jar"]
 ---> Running in 1c76fb58c562
Removing intermediate container 1c76fb58c562
 ---> d3f63fdf430e
Step 7/7 : EXPOSE 6001
 ---> Running in e9ef4587e5ba
Removing intermediate container e9ef4587e5ba
 ---> 6a1e2c0365fd
Successfully built 6a1e2c0365fd
Successfully tagged zyl_docker:1.0
[root@zyl-server my-projects]#

7、列出本地主机上的Docker镜像

[root@zyl-server my-projects]# docker images
REPOSITORY                                              TAG                IMAGE ID       CREATED          SIZE
zyl_docker                                              1.0                6a1e2c0365fd   18 seconds ago   752MB
my-spring-boot-app                                      latest             0e110c7ac812   12 days ago      490MB
mytomcat                                                latest             7b01ac741538   13 days ago      838MB

8、运行 zyl_docker 镜像

报错:
[root@zyl-server my-projects]# docker run -d -p 6001:6001 6a1e2c0365fd 24f5aff8de0a4ebd2446e4f325dfff908e506e6280eb7b5ecd0ca1578cdc3833 docker: Error response from daemon: driver failed programming external connectivity on endpoint musing_ardinghelli (9d7e940750a0890604a234d2c1b3c7cc2dca2004a66184aee3120e2f9b7ce5ab): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6001 -j DNAT --to-destination 172.17.0.4:6001 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)).
[root@zyl-server my-projects]#

解决:

在我们启动了Docker后,我们再对防火墙firewalld进行操作,就会发生上述报错。

systemctl restart docker 重启docker服务即可。

再次运行:

[root@zyl-server my-projects]# docker run -d -p 6379:6379 --privileged=true --name my-redis -v /apps/redis/redis.conf:/etc/redis/redis.conf -v /apps/redis/data:/data -d redis:7.0.9 redis-server /etc/redis/redis.conf
79a615e1c6f7fdc06a03a75969e00c49dc932c3f384ca4a7441b006107ae09da
[root@zyl-server my-projects]# docker run -d -p 3306:3306 --name mysql-5.7 -e MYSQL_ROOT_PASSWORD=123456 -v /mysql/data:/var/lib/mysql mysql:5.7  00412323842df42e7cab5da36c419d872b94f5a7b145c73886693fb1a2fe2f5e
[root@zyl-server my-projects]# docker run -d -p 6001:6001 6a1e2c0365fd
6c6c33d4cf0800c9977750d00bb3a5614269136803a93c74d8710d74488495ee
[root@zyl-server my-projects]#

在这里插入图片描述

swagger测试:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


不用Docker Compose,需要按顺序启动:

1、单独的mysql容器

2、实例单独的redis容器实例

3、微服务project

上面不用Docker Compose情况,有哪些问题?

1、先后顺序要求固定,先mysql+redis才能微服务访问成功,需要确保mysql容器和redis容器在启动微服务之前已经处于运行状态。

2、多个run命令…,需要手动运行适当的docker run命令来启动每个容器。

3、容器间的启停或宕机,有可能导致IP地址对应的容器实例变化,映射出错要么生产IP写死(可以但是不推荐),要么通过服务调用,增加了管理和可伸缩性方面的复杂性。


6.2、实战-改造升级微服务project(使用Docker Compose编排微服务)

1、第二次修改微服务工程project

修改数据库IP地址为服务名:

## spring.datasource.url=jdbc:mysql://192.168.234.10:3306/demo1?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.url=jdbc:mysql://mysql:3306/demo1?useUnicode=true&characterEncoding=utf-8&useSSL=false

## spring.redis.host=192.168.234.10
spring.redis.host=redis

在这里插入图片描述

2、重新打包项目,替换旧版demo2-0.0.1-SNAPSHOT.jar

1、删除旧版demo2-0.0.1-SNAPSHOT.jar

[root@zyl-server my-projects]# rm -rf demo2-0.0.1-SNAPSHOT.jar
[root@zyl-server my-projects]#

2、重新打包上传demo2-0.0.1-SNAPSHOT.jar

在这里插入图片描述

3、在/root/my-projects下,编写docker-compose.yml文件

文件内容:

version: "3"

services:

  microService:

    image: zyl_docker:1.0

    container_name: demo2

    ports:

      - "6001:6001"

    volumes:

      - /app/microService:/data

    networks: 

      - zyl_network

    depends_on: 

      - redis

      - mysql

  redis:

    image: redis:7.0.9

    ports:

      - "6379:6379"

    volumes:

      - /app/redis/redis.conf:/etc/redis/redis.conf

      - /app/redis/data:/data

    networks: 

      - zyl_network

    command: redis-server /etc/redis/redis.conf

  mysql:

    image: mysql:5.7

    environment:

      MYSQL_ROOT_PASSWORD: '123456'

      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'

      MYSQL_DATABASE: 'demo1'

      MYSQL_USER: 'zyl'

      MYSQL_PASSWORD: '123456'

    ports:

       - "3306:3306"

    volumes:

       - /app/mysql/db:/var/lib/mysql

       - /app/mysql/conf/my.cnf:/etc/my.cnf

       - /app/mysql/init:/docker-entrypoint-initdb.d

    networks:

      - zyl_network

    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

networks: 

   zyl_network: 

文件解读:

这个配置文件。定义了三个服务:

microService、redis和mysql,并在zyl_network网络上进行通信。

1、microService服务使用自定义的zyl_docker:1.0镜像,容器名称为demo2,将主机的6001端口映射到容器的6001端口。将/app/demo2目录挂载到容器的/data目录。

2、redis服务使用redis:7.0.9镜像,将主机的6379端口映射到容器的6379端口。
还将/app/redis/redis.conf挂载到容器的/etc/redis/redis.conf,并将/app/redis/data挂载到容器的/data目录。
通过redis-server /etc/redis/redis.conf命令启动。

3、mysql服务使用mysql:5.7镜像,并设置了一些环境变量来配置MySQL实例。
将主机的3306端口映射到容器的3306端口。
将/app/mysql/db挂载到容器的/var/lib/mysql,并将/app/mysql/conf/my.cnf挂载到容器的/etc/my.cnf。
还有/app/mysql/init目录挂载到容器的/docker-entrypoint-initdb.d目录,以便在初始化数据库时运行脚本。

4、使用--default-authentication-plugin=mysql_native_password命令解决外部无法访问的问题。

5、最后,该配置文件定义了一个名为zyl_network的网络,用于连接这三个服务。

4、构建镜像

先删除之前运行的mysql容器、redis容器、微服务镜像和容器实例。

---这里是测试环境,非测试环境慎用该批量操作!!!!


[root@zyl-server my-projects]# docker stop $(docker ps -aq)
863016411ded
b5293f455952
0068f033e4e8
[root@zyl-server my-projects]# docker rm $(docker ps -aq)

[root@zyl-server my-projects]# docker rmi zyl_docker:1.0

重新构建镜像:

docker build -t zyl_docker:1.0 .

在这里插入图片描述

5、验证和显示Docker Compose配置文件的有效性

docker-compose config -q命令用于验证和显示Docker Compose配置文件的有效性,并以安静模式输出配置文件。它会检查配置文件的语法错误和格式问题,并验证所使用的镜像是否可用。

如果配置文件有效且正确,该命令不会产生任何输出。如果存在错误或问题,它将显示相关的错误消息。

[root@zyl-server my-projects]# docker-compose config -q
[root@zyl-server my-projects]#

6、执行 docker-compose up 或者 执行 docker-compose up -d

使用docker-compose up命令启动这三个服务,这将在终端窗口中显示服务的日志输出。如果不希望在终端中查看日志输出,并且希望以后台模式启动服务,则可以使用docker-compose up -d命令。

这将以守护进程模式启动服务,并在后台运行。如果使用后台模式,则可以使用docker-compose logs命令来查看服务的日志输出。

1、当前没有正在运行的容器
[root@zyl-server my-projects]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zyl-server my-projects]#

2、执行docker-compose up -d
[root@zyl-server my-projects]# docker-compose up -d
[+] Running 4/4
 ✔ Network my-projects_zyl_network  Created                                                                                                  0.0s
 ✔ Container my-projects-mysql-1    Started                                                                                                  0.4s
 ✔ Container my-projects-redis-1    Started                                                                                                  0.4s
 ✔ Container demo2                  Started                                                                                                  0.6s
[root@zyl-server my-projects]#

在这里插入图片描述

7、验证服务

1、列出Docker中的网络列表
[root@zyl-server my-projects]# docker network ls
NETWORK ID     NAME                      DRIVER    SCOPE
5a594d4c92e7   bridge                    bridge    local
fe8aa9233f89   host                      host      local
80480229149d   my-projects_zyl_network   bridge    local
da1bb471897e   mynetwork                 bridge    local
7ae86ca33507   none                      null      local
e1aea82ce159   redis-network             bridge    local
[root@zyl-server my-projects]#

在这里插入图片描述

2、再次列出正在运行的容器(mysql、redis、zyl_docker已启动运行)

[root@zyl-server my-projects]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
d10f1034b7a7   zyl_docker:1.0   "java -jar /zyl_dock…"   4 seconds ago   Up 3 seconds   0.0.0.0:6001->6001/tcp, :::6001->6001/tcp              demo2
5a174e725026   redis:7.0.9      "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              my-projects-redis-1
009428bcad42   mysql:5.7        "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my-projects-mysql-1
[root@zyl-server my-projects]#

3、进入mysql容器,新建库、建表
docker exec -it 009428bcad42 /bin/bash

[root@zyl-server my-projects]# docker exec -it 009428bcad42 /bin/bash
root@009428bcad42:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| demo1              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use demo1
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql>


##建表:

CREATE TABLE `t_user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户名',
  `password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密码',
  `sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ',
  `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';


##当前t_user为空表

mysql> select * from t_user;
Empty set (0.00 sec)

mysql>

在这里插入图片描述

8、swagger测试:http://http://ip:你的微服务端口/swagger-ui.html

在这里插入图片描述

mysql数据库验证:

mysql> select * from t_user;
+----+----------+----------+-----+---------+---------------------+---------------------+
| id | username | password | sex | deleted | update_time         | create_time         |
+----+----------+----------+-----+---------+---------------------+---------------------+
|  1 | zyl1     | 18746a   |   0 |       0 | 2023-09-12 16:26:14 | 2023-09-12 16:26:14 |
|  2 | zyl2     | 434f8c   |   0 |       0 | 2023-09-12 16:26:14 | 2023-09-12 16:26:14 |
|  3 | zyl3     | c8ce19   |   0 |       0 | 2023-09-12 16:26:14 | 2023-09-12 16:26:14 |
+----+----------+----------+-----+---------+---------------------+---------------------+
3 rows in set (0.00 sec)

mysql>

在这里插入图片描述

测试成功!!!


6.3、总结-Docker Compose的优点

在现代应用程序开发中,微服务架构已经成为一种非常流行的架构模式。然而,微服务的管理和部署通常会面临一些挑战,例如网络通信和协调。为了解决这些问题,Docker Compose作为一个强大的工具应运而生,它能够帮助开发者轻松地编排和管理微服务。

1、简化部署:Docker Compose允许您使用简单的YAML文件定义应用程序的组成部分,并将它们统一地部署为容器。不再需要手动操作每个容器,大大简化了部署过程。

2、管理复杂网络:微服务通常由多个容器组成,它们需要相互通信。Docker Compose可以自动创建和管理容器之间的网络,使得服务之间的通信变得更加便捷。

3、扩展性:Docker Compose允许您根据需要轻松地扩展微服务。通过添加新的服务实例或增加容器数量,可以快速响应应用程序的需求变化。

4、避免依赖冲突:不同的微服务可能依赖于不同版本的软件或库。Docker Compose可以确保每个服务都在自己的容器中运行,避免了依赖冲突的问题。

5、简化本地开发环境:使用Docker Compose可以轻松创建本地开发环境,不再需要为每个服务手动安装和配置依赖项。

Docker Compose为我们提供了一个简单且强大的工具,用于编排和管理微服务。它简化了部署过程,提高了扩展性,并避免了依赖冲突的问题。通过使用Docker Compose,我们可以更加轻松地构建、部署和管理基于微服务架构的应用程序。

七、Docker Compose常用命令

docker-compose -h       # 查看帮助

docker-compose up      # 启动所有docker-compose服务

docker-compose up -d     # 启动所有docker-compose服务并后台运行

docker-compose down     # 停止并删除容器、网络、卷、镜像。

docker-compose exec  yml里面的服务id     # 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash

docker-compose ps        # 展示当前docker-compose编排过的运行的所有容器

docker-compose top        # 展示当前docker-compose编排过的容器进程

docker-compose logs  yml里面的服务id     # 查看容器输出日志

dokcer-compose config     # 检查配置

dokcer-compose config -q  # 检查配置,有问题才有输出

docker-compose restart   # 重启服务

docker-compose start     # 启动服务

docker-compose stop      # 停止服务

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

时间序列场景下多种数据填充算法实践与对比分析

在时间序列建模任务中&#xff0c;模型往往对于缺失数据是比较敏感的&#xff0c;大量的缺失数据甚至会导致训练出来的模型完全不可用&#xff0c;在我前面的博文中也有写到过数据填充相关的内容&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《python 基于滑动平均…

硬件学习 PAD9.5 day01 原理图布局开始设置, 元器件的调用和绘制, 新建库, 库添加元器件,

1. 原理图的布局设置 1.1 打开布局设置界面 1.2. 布局设置界面 1.3. 界面大小设置 自己 点击框里的 向下的箭头 获取更多的选择。 1.4 包括白框的的大小 2. 元器件的调用 和绘制 2.1. 打开一个库 和 新建一个库 1. 进入新建库的界面 和选择系统自带的库 2.2 绘制新的器件的…

【计算机视觉 | 目标检测】干货:目标检测常见算法介绍合集(四)

文章目录 四十六、Parallel Feature Pyramid Network四十七、ScanSSD四十七、RetinaMask四十八、CornerNet-Saccade四十九、CentripetalNet五十、Fast Focal Detection Network五十一、CornerNet-Squeeze五十二、Paddle Anchor Free Network五十三、Human Robot Interaction Pi…

[Rust GUI]eframe(egui框架)代码示例

-2、eframe代替品 你可以使用egui的其他绑定&#xff0c;例如&#xff1a;egui-miniquad&#xff0c;bevy_egui&#xff0c;egui_sdl2_gl 等。 -1、注意 egui库相当于核心库&#xff0c;需要借助eframe框架就可以写界面了。 eframe使用egui_glow渲染&#xff0c;而egui_glow…

华为云云耀云服务器L实例评测 | 强大性能与高可靠性的完美结合

华为云云耀云服务器L实例评测 | 瑞吉外卖下载与部署_软工菜鸡的博客-CSDN博客 上次发布了一篇手把手带领读者在华为云服务器搭建后端程序员无人不知的 瑞吉外卖 项目&#xff0c;效果良好&#xff0c;很多粉丝给我反馈还想学习别的项目以及其它软件的服务器部署&#xff0c;这不…

Mobpush与A/B测试:覆盖多应用场景下的精细化运营神器

在信息爆炸的移动应用领域&#xff0c;实现长效稳定的用户增长的关键在于能够和用户建立互信、持久的联系。而优质的推送内容不仅可以提高用户参与度和留存率&#xff0c;还有助于增加收入、改善用户体验&#xff0c;以及建立强大的用户社区。但千人一面的推送很难同时满足不同…

网络安全宣传周|探索AI数字人的魅力和价值所在

9月11日至9月17日是国家网络安全宣传周&#xff0c;在福州举办的安全博览会上有着多种人工智能模型产品亮相现场&#xff0c;吸引着众多参观者的目光&#xff0c;尤其是AI数字人面对不同的问题、不同的场景都可以进行实时响应&#xff0c;不同于冷冰冰的传统智能客服的对话场景…

c++day6---9.13

思维导图&#xff1a; 改变类型只需将选择功能函数中的Zhan<double> z;中的double改为相对的类型: 栈&#xff1a; 头文件&#xff1a; #ifndef ZHAN_H #define ZHAN_H #include <iostream>using namespace std;template<typename T> class Zhan { privat…

RK3399 android7.1 实现双wifi功能 STA+AP

wifi模组&#xff1a; 主板使用的wifi模块为海华AW-NM43438W模组以及客户提供了一款USB接口的5G双频无线网卡RTL8821CU。 双wifi功能实现效果&#xff1a; 主板自带的wifi模组作为station正常连接外部wifi,USB接口的外接网卡作为AP&#xff08;热点&#xff09;供其他设备连接…

JavaScript逻辑题:牙膏2元 牙刷5元 牙膏盒15元 请问正好花完100元 有多少情况?

// 定义牙膏 牙刷 牙膏盒分别的价格 let toothpaste 0;let toothbrush 0;let toothpastebox 0;// 定义sum用来存储几种情况let sum 0;//第一层循环 循环牙膏买多少for (let i 0; i < 20; i){toothpaste 5 * i;// 二层循环 循环牙刷的数量for (let j 0; j < 50; j…

【Java Web】HTML 标签 总结

目录 1.HTML 2.标签 1. head 标签 1.图标 2.样式居中 2. body 标签 1.注释 &#xff1a; 2.加载图片 3.加载视频 效果 4.区域 效果 5.上下跳转&#xff0c;页面跳转 效果 6.表格 效果 7.有序列表&#xff0c;无序列表 效果 8.登录 效果 9.按钮 10.多选框…

目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)

目标分类 一、目标分类介绍1.1 二分类和多分类的区别1.2 单标签和多标签输出的区别 二、代码获取三、数据集准备四、环境搭建4.1 环境测试 五、模型训练六、模型测试6.1 多标签训练-单标签输出结果6.2 多标签训练-多标签输出结果 一、目标分类介绍 目标分类是一种监督学习任务…

使用flask实现一个简单的代理服务

背景: 有一些客户的服务是我本地windows电脑开vpn之后才能访问的。为了让公司内网的别的电脑不开vpn也能正常请求客户的接口&#xff0c;方便调试&#xff0c;所以使用我的windows电脑实现一个代理的功能。 原理简单画个图: 功能简单直接上代码: from flask import Flask, re…

如何用HighTec进行库文件封装

1、新建一个Workspace&#xff0c;下面均以L9945为例。 2、新建一个工程&#xff0c;可用要封装的模块名来命名。 3、选择主芯片及工程类型。 4、修改编译配置为iROM。 5、删除生成的h文件夹&#xff0c;将原工程中src目录下的.c文件全部删除&#xff0c;将.h文件全部复制到该工…

解决“org.apache.catalina.startup.Catalina.stopServer 未配置关闭端口。通过OS信号关闭服务器。服务器未关闭“

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 问题描述 项目部署至Tomcat服务器报错&#xff1a;org.apache.catalina.startup.Catalina.stopServer 未配置关闭端口。通过OS信号关闭服务 器。服务器未关闭&#xff1b;图…

【计算机视觉 | 目标检测】干货:目标检测常见算法介绍合集(一)

对象检测模型是用于执行对象检测任务的体系结构。 您可以在下面找到不断更新的对象检测模型列表。 文章目录 一、 ScanSSD二、Faster R-CNN三、Mask R-CNN四、YOLOv3五、RetinaNet六、Detection Transformer七、YOLOv4八、FCOS九、YOLOv2十、Fast R-CNN十一、CenterNet十二、R-…

uni-app--》基于小程序开发的电商平台项目实战(二)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

Acwing 800. 数组元素的目标和

Acwing 800. 数组元素的目标和 题目描述代码展示 题目描述 代码展示 #include<iostream>using namespace std;const int N 1e5 10;int a[N], b[N];int main() {int n , m , x, i 0, j m - 1;cin >> n >> m >> x;for (int i 0; i < n; i ) sc…

java JUC并发编程 第七章 原子操作类增强

系列文章目录 第一章 java JUC并发编程 Future: link 第二章 java JUC并发编程 多线程锁: link 第三章 java JUC并发编程 中断机制: link 第四章 java JUC并发编程 java内存模型JMM: link 第五章 java JUC并发编程 volatile与JMM: link 第六章 java JUC并发编程 CAS: link 第七…

ABB IW93 HESG440356R1处理器模块

处理能力&#xff1a; IW93处理器模块具有强大的处理能力&#xff0c;能够高效执行控制逻辑和算法&#xff0c;确保工业过程的顺利运行。 通信接口&#xff1a; 该模块通常具有多种通信接口&#xff0c;用于与其他设备和系统进行数据交换和集成。这些接口可能包括以太网、串行…