Docker Compose 使用

一、简介

Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用程序。它允许用户使用 YAML 文件来配置应用程序需要的所有服务,然后使用一个命令来从 YAML 文件配置中创建并启动所有服务。其主要目的是为了简化了多容器 Docker 应用程序的部署和管理过程。

二、安装

Docker Compose可以在大多数Linux发行版上安装,包括Ubuntu、CentOS等。安装方法可能包括通过包管理器安装或直接下载二进制文件。在Windows系统上,Docker Compose通常随Docker Desktop一起安装,不需要单独安装。Linux系统上安装步骤如下:

  1. 下载当前稳定的Compose版本:
    curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. 给予Docker Compose可执行权限:
    chmod +x /usr/local/bin/docker-compose
  3. 验证安装是否成功:
    docker-compose --version

三、Docker Compose使用

3.1 编写 docker-compose.yml 配置文件

创建一个名为docker-compose.yml的YAML文件,在其中定义要启动的服务、网络、卷等配置。下面是一个简单的 docker-compose.yml 配置文件示例:

version: '3'
services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/logdepends_on:- redisredis:image: redisvolumes:logvolume01: {}

这个配置文件定义了两个服务:web 和 redis,web服务是依赖redis服务的,先启动 redis服务,再启动 web。web 服务使用从当前目录中构建的镜像,并将容器的 5000 端口映射到主机的 5000 端口。redis 服务使用 Docker Hub 上的官方 Redis 镜像。

3.2 启动 docker-compose

执行 docker-compose up -d 命令来启动并运行整个应用程序。

四、Docker Compose常用命令

Docker Compose命令基本上和Docker相差不多,主要就是对Docker Compose生命周期控制、日志格式等相关命令。常用的命令如下:

  1. docker-compose up:启动所有服务。
  2. docker-compose up -d:在后台启动所有服务。
  3. docker-compose down:停止并删除所有容器、网络、卷和镜像。
  4. docker-compose ps:列出所有运行的容器。
  5. docker-compose logs:查看容器输出日志。
  6. docker-compose exec:在容器内部执行命令。
  7. docker-compose build:构建服务的镜像。
  8. docker-compose restart:重启服务。
  9. docker-compose start:启动服务。
  10. docker-compose stop:停止服务。
  11. docker-compose config:检查Docker Compose配置文件的语法。
  12. docker-compose push:推送服务镜像到仓库。
  13. docker-compose pull:从仓库拉取服务镜像。
  14. docker-compose top:显示由 Docker Compose 管理的所有容器的进程信息。

五、docker-compose.yml 配置文件解析

docker-compose.yml 文件是用于定义和运行多个 Docker 容器的 YAML 文件。它的通常组成部分有:服务定义、网络定义和数据卷定义等。以下是一个基本的 docker-compose.yml 文件示例:

# 指定Docker Compose 文件的版本
version: '3'# 必填部分,定义服务
services:web:image: nginxports:- "80:80"networks:- mynetworkdb:image: postgresenvironment:POSTGRES_PASSWORD: examplenetworks:- mynetwork# 可选部分,定义网络
networks: network_name:driver: bridge # 网络类型,默认为桥接网络# 可选部分,定义数据卷 
volumes: volume_name:driver: local # 数据卷驱动,默认为本地存储
5.1 version

指定Docker Compose文件的版本信息,定义关乎于docker的兼容性。随着 Docker Compose 的发展,出现了多个版本,每个版本都带来了新的特性和改进。以下是一些常见的 Docker Compose 文件版本号:

  • Version 1: 这是最早的版本,不支持数据卷、网络和构建参数配置。它不会利用 Docker 网络的优势,每个容器都位于默认的桥接网络上,并且需要使用 links 来启用容器之间的发现。
  • Version 2.x: 引入了对 Swarm 模式的支持,可以通过 docker stack 命令将 Compose 文件部署到 Swarm 集群中。它支持数据卷和网络的配置,默认情况下,每个容器都加入了应用范围的默认网络,并且可以在与服务名称相同的主机名下发现。
  • Version 3.x: 这是最新的版本,也是推荐使用的版本。它与 Docker Engine 的 Swarm 模式形成交叉兼容,并引入了一些新特性,例如配置命名空间、健康检查、秘密管理等。
5.2 services

services 是一个顶级元素,docker-compose.yml 文件中的核心部分,它定义了应用程序中的各个服务及其配置。每个服务都是一个独立的容器,可以运行在不同的主机上。以下是 services 元素中常见的配置选项:

  • image: 指定服务使用的 Docker 镜像名称,可以是公共 Docker Hub 中的镜像,也可以是本地的自定义镜像。
  • build: 指定 Dockerfile 的路径,Docker Compose 将自动构建该服务的 Docker 镜像。
  • container_name: 指定容器的名称,如果不指定,Docker 会自动分配一个唯一的名称。
  • ports: 指定容器和宿主机之间的端口映射关系,格式为 宿主机端口:容器端口。
  • expose:声明容器暴露的端口。不会在主机和容器之间创建端口映射,而是仅仅在容器内部定义了一个端口,以便其他容器可以通过容器网络进行访问。
  • environment: 定义容器的环境变量,可以是数组或字典形式。
  • volumes: 指定容器和宿主机之间的数据卷映射关系,格式为 宿主机路径:容器路径。
  • networks: 指定容器所属的网络,可以是已存在的网络或者新建的网络。
  • depends_on: 指定服务之间的依赖关系,使得一个服务启动前必须先启动其依赖的服务。
  • links:链接到其它服务的中的容器,可以指定服务名称也可以指定链接别名。
  • restart: 指定容器退出后的重启策略,如 no, always, on-failure, unless-stopped。
  • command: 覆盖容器启动后要执行的命令。
  • healthcheck:定义容器的健康检查逻辑。通过这种方式,你可以确保容器在启动后能够正常运行,并且在出现问题时能够被及时发现和处理。
  • env_file:从文件添加环境变量。可以是单个值(env_file: .env)或列表的多个值。
  • secrets:用于定义敏感数据的部分。这些敏感数据通常是需要保密的信息,如数据库密码、API密钥等。
version: "3.9"# 定义服务
services:# 定义服务1service1: # 自定义服务名称image: postgresql # 使用的是postgresql镜像build:context: ./dir # Dockerfile 所在的上下文路径dockerfile: Dockerfile # Dockerfile 的名称,默认为 Dockerfilecontainer_name: my-postgresql-container # 指定自定义容器名ports:- "5005:5432" # 将主机的5005端口映射到容器的5432端口上expose:- "8080" # 暴露容器内部8080端口environment: # 环境变量- DB_HOST=${DB_HOST}- DB_USER=${DB_USER}- DB_PASSWORD=${DB_PASSWORD}volumes: # 数据卷挂载- /db-data:/var/lib/postgresql/data # 将主机根目录下的db-data目录挂载到容器的/var/lib/postgresql/data目录中networks: # 网络配置- my_network: aliased_web  # 服务在my_network网络中被赋予别名aliased_webdepends_on: # 依赖服务- service2 # 指定要依赖的服务名称links: # 链接服务- service3 # 指定要链接的服务名称restart: always # 重启策略command: ["echo", "Goodbye World"] # 会覆盖容器启动命令healthcheck:test: ["CMD", "curl", "-f", "http://localhost:5000/health"]interval: 30stimeout: 10sretries: 3start_period: 40senv_file:- ./config/envsecrets:- my_secret- my_other_secret# 定义服务2service2: image: nginx # 使用的是nginx镜像    volumes:- my_data:/data  # my_data卷被挂载到service2容器的/data路径# 定义数据卷,与services元素同级
volumes:my_data:# 定义网络,与services元素同级
networks:my_network:driver: bridgeipam:driver: defaultconfig:- subnet: 192.168.100.0/24# 定义密钥, 与services元素同级
secrets:my_secret:file: ./my_secret.txtmy_other_secret:external: true

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

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

相关文章

gl_FragCoord 坐标系

在OpenGL及WebGL的上下文中,gl_FragCoord坐标系并没有传统意义上的“远点”概念,因为它主要描述的是片段在屏幕空间中的位置,而非三维空间中的一个远端参考点。gl_FragCoord是一个四维向量(vec4),它的前三个…

可燃气体报警器校准检测:新能源企业安全生产的必要步骤

随着新能源产业的快速发展,各类清洁能源项目如雨后春笋般涌现。 然而,新能源产业在带来环保效益的同时,也面临着诸多安全风险。可燃气体泄露是其中一项不容忽视的隐患。 为了保障新能源企业的安全生产,可燃气体报警器的重要性日…

C#-Json文件的读写

文章速览 命名空间读取Json核心代码示例 写入Json核心代码示例 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 命名空间 using Newtonsoft.Json;读取Json 核心代码 //核心代码using (StreamReader…

基于python的三维装箱可视化

背景介绍 本文主要介绍两种基于python的三维装箱可视化能力,第一种是基于mpl_toolkits的静态三维可视化代码,另外一种是基于matplotlib的动态可视化代码。 mpl_toolkits实现 Axes3D简介 mpl_toolkits 是 matplotlib 库的一个模块集合,它包…

多项目如何管理?盘点十大主流项目管理软件,轻松管理多个项目

多项目同时进行已经成为很多企业的现状,项目经理手握几个项目成为常态。 多项目管理之所以难,不仅在于项目数量的增加,而且在于项目资源分配不均、多项目进度比较难监控、沟通协作纷繁复杂。 应该如何做好进度管理,力求每个项目…

Java8 新特性 记录【持续更新】

目录 一、Stream 相关 1、findFirst 方法 二、Optional 1、如何构造Optional 2、ifPresent 方法 一、Stream 相关 1、findFirst 方法 Stream的findFirst方法在此流中查找第一个元素作为Optional。 如果流中没有元素,findFirst返回空的Optional。 如果流没…

传统办公电脑效率低怎么办?如何解决?

当传统办公电脑效率太低时,可以考虑转向云电脑作为解决方案。云电脑作为一种基于云计算的新型计算模式,具有许多显著的优势,这些优势可以有效提升办公效率和体验。以下是对云电脑优势的详细分析和总结,跟着小编一起来了解一下吧。…

游泳耳机品牌排行榜,10大实力超群的游泳耳机分享!

在当今快节奏的生活中,运动已成为许多人不可或缺的一部分,不仅为了健康,也是释放压力、提升生活品质的有效方式。而随着科技与健身的深度融合,智能穿戴设备尤其是专为运动设计的耳机,正逐渐成为运动爱好者的新宠。对于…

Windows或Nginx上安装/更新SSL证书,步骤详解

一、Windows系统上导入SSL证书 (1)在安装IIS服务器的Windows系统中,单击开始 > 运行 > MMC打开控制台 (2)单击文件 > 添加/删除管理单元,打开添加/删除管理单元对话框 (3&#xff09…

探索IPython的强大功能:全面指南与高效使用技巧

目录 一 IPython简介 什么是IPython? 安装IPython 二 基础功能 交互式计算 自动补全 历史记录 内置调试器 三 魔术命令 常用魔术命令 %time和%timeit %who和%whos %reset %run %load %matplotlib %%writefile 其他有用的魔术命令 四 扩展功能 IPython中的…

后台管理台字典localStorage缓存删除

localStorage里存放了如以下dictItems_开头的字典数据,localStorage缓存是没有过期时间的,需要手动删除。同时localStorage里还存有其他不需要删除的数据。 这里的方案是遍历localStorage,利用正则和所有key进行匹配,匹配到dict…

富格林:可信守则有效防范暗箱

富格林悉知,黄金具有不错的投资价值,一直以来备受投资者的喜爱,近年来大家也纷纷加入现货黄金市场为其增值财富。但是要有效防范暗箱的前提,是需要投资者使用可信合适的守则以及掌握相对应的投资技巧。下面富格林将总结以下技巧&a…

编程软件是由什么编程的

编程软件是由什么编程的 在数字化的世界里,编程软件作为构建数字生态的基石,其背后所蕴含的奥秘往往令人感到困惑。那么,这些编程软件究竟是由什么编程的呢?这背后隐藏着怎样的逻辑与技术?接下来,我们将从…

商业决策支持:Kompas AI为企业决策赋能

一、引言 在商业世界中,决策是企业成功的关键。正确的决策可以引领企业走向繁荣,而错误的决策则可能导致严重的后果。随着大数据和人工智能技术的发展,Kompas AI在商业领域的应用为商业决策提供了强大的支持,帮助企业在复杂多变的…

【需求管理】软件需求开发和管理文档(原件Word)

1. 目的 2. 适用范围 3. 参考文件 4. 术语和缩写 5. 需求获取的方式 5.1. 与用户交谈向用户提问题 5.1.1. 访谈重点注意事项 5.1.2. 访谈指南 5.2. 参观用户的工作流程 5.3. 向用户群体发调查问卷 5.4. 已有软件系统调研 5.5. 资料收集 5.6. 原型系统调研 5.6.1. …

MMDetection3D学习笔记一:环境搭建

文章目录 1 简介2 最佳环境安装实践2.1 配置conda环境2.2 安装相关依赖2.3 安装mmdet3d2.4 验证 3 通过 Docker 使用 MMDetection3D 1 简介 更推荐直接参考学习官方文档以及官方GitHub仓库,其所包含的内容最全面权威。 MMDetection3D是一个基于PyTorch的开源对象检测…

前端可观测性系统建设

一. 背景 随着前端业务的日趋庞大,及时发现和解决业务中的问题、优化用户体验、实时监控业务健康度变得愈发重要。在业务层面,我们希望能够监控每次发布版本后,核心功能是否有显著提升或至少没有负面影响,核心接口是否正常运作&a…

鸿蒙原生App开发之:套用混合app开发思路

2024年,似乎华为迎来了新的企业机遇--鸿蒙独立操作系统。 受到全球国际形势的影响,加之第四次科技革命(AI革命)冷不丁的出现,在他国AI技术领先的前提下,中国自主研发的独立操作系统再次提上新的战略高度。…

网站的用户留言信息有什么意义

用户在网站上面留言一般都是因为反馈问题或者有什么需求,网站可以通过收集这些用户的留言更够够好的不断优化网站服务用户需求,也可以通过这种方式加强平台与用户的友好关系,有些好心的用户突然发现网站有什么问题,发现哪里不对了…

机器阅读理解技术在电网检修问答系统中的应用与创新

在当今快速发展的人工智能领域,机器阅读理解技术正逐渐成为提升行业工作效率的关键因素。本文将探讨思通数科大模型中的检修问答系统,这一系统通过先进的机器阅读理解技术,优化了电网维修工作的流程和效率。 一、机器阅读理解技术概述 机器…