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

Docker-compose-知识总结

Docker-Compose是 Docker 的一个工具,用于定义和运行多容器 Docker 应用。通过 docker-compose.yml 文件,你可以配置和管理多个容器的服务、网络和卷等,简化了 Docker 容器的管理和编排。下面是对 docker-compose 的详细解释:

一、基本概念

1.服务(Service)

通过 docker-compose.yml 文件定义多个服务,每个服务都会映射到一个 Docker 容器。

2.网络(Network)

通过 docker-compose.yml 创建一个或多个网络来让不同容器之间进行通信。

3.卷(Volume)

用于持久化数据的存储。docker-compose.yml 可以指定如何挂载卷到容器。

二、安装和卸载

#常规安装方式

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"

#默认安装目录:/usr/local/bin/docker-compose

# 国内下载加速

sudo curl -L "https://download.fastgit.org/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"

# 将可执行权限应用于该二进制文件

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

#测试

docker-compose --version

#卸载

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

三、docker-compose.yml

1.文件结构

docker-compose.yml 是一个 YAML 文件,用于定义项目的服务、网络和卷等内容。

常见的配置项包括:

version: 定义 Compose 文件的版本。最新的版本是 3。

services: 定义多个服务,每个服务对应一个容器。

image: 使用的 Docker 镜像,可以是官方镜像或者自定义镜像。

build: 如果需要构建镜像,可以使用 build 代替 image。

ports: 映射容器的端口到宿主机端口。

environment: 配置环境变量。

volumes: 持久化数据或者共享数据卷。

depends_on: 定义服务之间的依赖关系。

2.示例

#Compose版本信息

version: "3.8"

#服务

services:

  #服务名称

  nginx:

    #镜像名称

    image: nginx

    #容器名称

    container_name: nginx

    #宿主机和容器端口映射

    ports:

      - "80:80"

    #容器网络

    networks:

      - nginx-net

  db:

    image: mysql:5.7

    environment:

      MYSQL_ROOT_PASSWORD: root_password

    networks:

      - webnet

#网络(网络条目名/网络名称/网络模式)

networks:

  nginx-net:

    #网络名称

    name: nginx-net

    #网络驱动类型    

    driver: bridge

(1)services

image:指定镜像名称,可以是本地镜像或远程镜像。

build:指定构建镜像的上下文(通常为 Dockerfile 所在的路径)。

ports:指定端口映射,格式为:宿主机端口:容器端口。

environment:设置环境变量,例如 MYSQL_ROOT_PASSWORD。

volumes:挂载本地目录或 Docker 卷到容器。

networks:指定服务连接的网络。

(2)networks

name:网络名称。

driver:网络驱动类型,通常为 bridge(host 或 overlay) 。

external:指示是否使用外部已存在的网络。

(3)volumes

定义数据卷以便数据持久化。

四、常用命令

1.镜像命令

(1)搜索

# 所有服务的容器所对应的镜像

docker compose images

# 指定服务的容器所对应的镜像

docker compose images nginx

(2)拉取

拉取服务依赖的镜像

docker compose pull

2.容器命令

(1)搜索

docker compose ps

(2)构建

docker compose build

(3)启动

# 前台启动

docker compose up

#后台启动

docker compose up -d

#启动

docker compose start

#重启

docker compose restart

#在指定服务容器上执行一个命令

docker compose run

(4)停止

#停止并删除所有服务的容器

docker compose down

# 停止并删除工程中所有服务的容器、网络、镜像

docker compose down --rmi all

# 停止并删除工程中所有服务的容器、网络、数据卷

docker compose down -v

#只停止,不删除

docker compose stop

docker compose kill

#暂停

docker compose pause

#恢复

docker compose unpause

(5)端口和进程

docker compose port

#打印指定服务容器的某个端口所映射的宿主机端口。

docker compose port nginx 80

#显示正在运行的进程

docker compose top

3.日志命令

docker-compose logs

# 跟踪日志输出

docker compose logs -f

#条数

docker compose logs -f -n 200

# 关闭颜色

docker compose logs --no-color

4.执行命令

#进入服务容器

docker-compose exec <service_name> <command>

#docker-compose exec web /bin/bash

5.关闭和清理资源

(1)删除

# 删除所有(停止状态)服务的容器

docker compose rm

# 先停止所有服务的容器,再删除所有服务的容器

docker compose rm -s

# 不询问是否删除,直接强制删除

docker compose rm -f

# 删除服务容器挂载的数据卷

docker compose rm -v

# 删除工程中指定服务的容器

docker compose rm -sv nginx

(2)停止并删除

# 停止并删除工程中所有服务的容器、网络、镜像

docker compose down --rmi all

# 停止并删除工程中所有服务的容器、网络、数据卷

docker compose down -v

6.其他命令

(1)验证配置

验证 docker-compose.yml 文件是否正确

docker compose config -q

(2)其他

docker compose +(...)

注:

-f,--file:指定使用的 Compose 模板文件,

-p, --project-name:指定工程名称,

-v:打印版本并退出;

--log-level:定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)。

五、问题及解决

1.不适合大规模生产环境

(1)单一主机限制

Docker Compose 主要设计用于单个主机上的容器管理,它不具备跨主机的容器编排能力。

如果需要在多个主机之间分布容器,选择Kubernetes 等工具更适合。

(2)没有高可用性支持

Docker Compose 本身并不提供高可用性(HA)的功能。如果某个容器或节点崩溃,Compose 不会自动重启它,除非在 docker-compose.yml 中显式配置。

2.缺乏完整的容器编排功能

Docker Compose 的功能相对简单,它不具备像 Kubernetes 或 Docker Swarm 那样的容器调度和自动扩缩容能力

在 Compose 中,服务间的网络通信需要依赖于静态配置,而 Kubernetes 和 Docker Swarm 可以自动为容器分配和发现服务地址。

3.无法处理复杂的依赖关系

如果应用包含复杂的依赖关系或需要跨多个环境进行配置,Docker Compose 的管理和调度可能变得比较复杂。

例如:多个服务的依赖需要手动处理,且 Compose 不能自动重新调整服务间的依赖顺序。

虽然 Docker Compose 允许定义多个副本(replicas),但它并没有内建负载均衡机制。如果要进行负载均衡,通常需要手动配置反向代理。

4.扩展性问题

Docker Compose 适合中小型应用,但在大型应用中,它的扩展性可能会受到限制。随着容器数量和复杂度增加,Compose 文件变得难以维护,且性能可能不如更复杂的容器编排工具(如 Kubernetes)。

当容器数量增加时,手动维护 docker-compose.yml 文件可能变得很麻烦,特别是当应用的环境和配置变化时,管理和扩展可能非常困难。

5.服务状态不完全控制

Docker Compose 并没有完整的生命周期管理功能,无法像 Kubernetes 那样自动处理容器的健康检查、滚动更新等。在生产环境中,如果某个容器的更新失败,Compose 不会自动回滚到之前的版本,需要手动处理。

6.集成问题

虽然 Docker Compose 可以与 Docker Swarm 集成,但这两个工具之间的使用体验不完全一致。如果需要将应用从 Compose 部署迁移到 Swarm 或 Kubernetes,可能会遇到配置差异和工具不兼容的问题。

Compose 使用的是 docker-compose.yml 格式,而 Kubernetes 和 Docker Swarm 使用不同的配置方式,迁移和转换工作可能会复杂。

7.性能和资源管理

Docker Compose 的资源限制(如 CPU 和内存)配置较为简单,不如 Kubernetes 那样细粒度和灵活。Docker Compose 没有内置的监控和日志收集功能,用户需要依赖其他工具进行性能监控和日志管理。

六、总结

docker-compose 是开发和生产环境中管理多容器应用的必备工具,通过它你可以更高效地构建、管理和扩展容器化应用。

http://www.dtcms.com/a/289321.html

相关文章:

  • 基于单片机倾角测量仪/角度测量/水平仪
  • 双8无碳小车“cad【17张】三维图+设计说名书
  • 【HarmonyOS】ArkUI - 自定义组件和结构重用
  • 【pandoc实践】如何将wordpress文章批量导出为Markdown格式
  • 神经网络:卷积层
  • 使用UV管理PyTorch项目
  • PyTorch常用的简单数学运算
  • Paimon INSERT OVERWRITE
  • 一维数组练题习~
  • PyTorch的基础概念和复杂模型的基本使用
  • 【软件测试】从软件测试到Bug评审:生命周期与管理技巧
  • ESXi6.7硬件传感器红色警示信息
  • ICT模拟零件测试方法--测量参数详解
  • ThinkPHP8极简上手指南:开启高效开发之旅
  • 基于机器视觉的迈克耳孙干涉环自动计数系统设计与实现
  • STM32CubeMX的一些操作步骤的作用
  • 拼写纠错模型Noisy Channel(下)
  • 机器学习理论基础 - 核心概念篇
  • 复杂度优先:基于推理链复杂性的提示工程新范式
  • Linux操作系统之线程(四):线程控制
  • 20250720-1-Kubernetes 调度-白话理解创建一个Pod的内部工作流_笔记
  • Qt的安装和环境配置
  • Ubuntu挂载和取消挂载
  • 【vue-7】Vue3 响应式数据声明:深入理解 reactive()
  • Matlab自学笔记六十四:求解自变量带有约束条件的方程
  • 相同问题的有奇点模型和无奇点模型有什么区别
  • 服务器上的文件复制到本地 Windows 系统
  • [学习] 深入理解傅里叶变换:从时域到频域的桥梁
  • 04训练windows电脑低算力显卡如何部署pytorch实现GPU加速
  • LINUX720 SWAP扩容;新增逻辑卷;逻辑卷扩容;数据库迁移;gdisk