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

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

相关文章:

Docker Compose 使用

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

KEIL5.39 5.40 fromelf 不能生成HEX bug

使用AC6 编译,只要勾选了生成HEX。 结果报如下错误 暂时没有好的解决办法 1.替换法 2.在编译完后用命令生成HEX...

mongosh 和mongo 命令行连接MongoDB

Mongoshell MongoDB的Shell工具mongosh是一个全功能的JavaScript和Node.js的14.x REPL与MongoDB的部署交互环境。我们通过它可以直接对数据库进行查询和操作。这个工具是需要在安装玩MongoDB后单独安装的。 与传统的mongo方式连接MongoDB更加丰富。 官网 https://www.mongodb.…...

DOM 改变节点

DOM 改变节点 文档对象模型(DOM)是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化表示,并定义了一种方式,允许程序和脚本动态地访问和更新文档的内容、结构和样式。在网页开发中,DOM 操作是核心技能之一&#…...

【面试题分享】重现 string.h 库常用的函数

文章目录 【面试题分享】重现 string.h 库常用的函数一、字符串复制1. strcpy(复制字符串直到遇到 null 终止符)2. strncpy(复制固定长度的字符串) 二、字符串连接1. strcat(将一个字符串连接到另一个字符串的末尾&…...

6.21 移动语义与智能指针

//先构造,再拷贝构造//利用"hello"这个字符串创建了一个临时对象//并复制给了s3//这一步实际上new了两次String s3 "hello"; 背景需求: 这个隐式创建的字符串出了该行就直接销毁掉,效率比较低 可以让_pstr指向这个空间…...

Kimi还能对学术论文进行润色?我来教你!

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 一、引言 在学术界,论文的质量往往决定了研究的可信度和影响力。Kimi作为一款人工智能助手,可以为学术论文的润色提供有效的帮助。本文将详细介绍如何利用Kimi进…...

智汇云舟成为中煤集团中煤智能创新联盟成员单位

6月21日,第八届世界智能产业博览会平行会议暨中煤智能创新联盟交流会在天津水游城丽筠酒店顺利举行。智汇云舟受邀参与,并由中国中煤能源集团授予荣誉证书,正式成为中煤智能创新联盟成员单位。会议上,清华大学、中国矿业大学&…...

【文心智能体大赛】迎接属于你的休闲娱乐导师!

迎接属于你的休闲娱乐导师! 前言创建智能体发布智能体最后结语 前言 文心智能体平台AgentBuilder 是百度推出的基于文心大模型的智能体(Agent)平台,支持广大开发者根据自身行业领域、应用场景,选取不同类型的开发方式&…...

AI:音乐创作的未来还是毁灭的序曲?

AI:音乐创作的未来还是毁灭的序曲? 随着人工智能(AI)技术的飞速发展,它已经渗透到了我们生活的方方面面,包括音乐领域。然而,AI在音乐创作中的角色引发了广泛的讨论和争议。一些人认为AI为音乐…...

如何通过AI进行智能日志异常检测

智能日志异常检测是一种利用人工智能(AI)技术来自动识别日志数据中异常模式或行为的方法。传统日志监控依赖于预定义规则,而智能日志异常检测可以适应不同的日志模式和异常类型,提高检测准确性和效率。下面是一个完整的步骤指南&a…...

C++ GPU编程(英伟达CUDA)

安装编译环境 https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.85_windows.exe CMakeLists.txt cmake_minimum_required(VERSION 3.10)set(CMAKE_CXX_STANDARD 17) set(CMAKE_BUILD_TYPE Release) #set(CMAKE_CUDA_ARCHITECTUR…...

肾虚学习实验第T1周:实现mnist手写数字识别

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 作为一名研究牲&#xff0…...

Python | Leetcode Python题解之第162题寻找峰值

题目: 题解: class Solution:def findPeakElement(self, nums: List[int]) -> int:n len(nums)# 辅助函数,输入下标 i,返回 nums[i] 的值# 方便处理 nums[-1] 以及 nums[n] 的边界情况def get(i: int) -> int:if i -1 or…...

定个小目标之刷LeetCode热题(26)

这道题属于一道简单题&#xff0c;可以使用辅助栈法&#xff0c;代码如下所示 class Solution {public boolean isValid(String s) {if (s.isEmpty())return false;// 创建字符栈Stack<Character> stack new Stack<Character>();// 遍历字符串数组for (char c : …...

网络爬虫设置代理服务器

目录 1&#xff0e;获取代理 IP 2&#xff0e;设置代理 IP 3. 检测代理 IP 的有效性 4. 处理异常 如果希望在网络爬虫程序中使用代理服务器&#xff0c;就需要为网络爬虫程序设置代理服务器。 设置代理服务器一般分为获取代理 IP 、设置代理 IP 两步。接下来&#xff0c;分…...

3、matlab单目相机标定原理、流程及实验

1、单目相机标定流程及步骤 单目相机标定是通过确定相机的内部和外部参数&#xff0c;以便准确地在图像空间和物体空间之间建立映射关系。下面是单目相机标定的流程及步骤&#xff1a; 搜集标定图像&#xff1a;使用不同角度、距离和姿态拍摄一组标定图像&#xff0c;并确保标…...

【gdb 如何生成并查看core dump】

生成core dump 使用ulimit命令来设置core dump文件的大小。 ulimit -c unlimitedcore dump位置 如果程序崩溃&#xff0c;系统会生成一个名为core的文件。可以通过以下命令查看core文件位置&#xff0c; cat /proc/sys/kernel/core_pattern查看core dump gdb /path/to/you…...

极简短视频查看、删除应用

本地短视频服务器 背景&#xff1a;我的NAS中存放了很多短视频&#xff0c;多到很多没看过&#xff0c;于是写了这个程序来随机查看并删除短视频 运行&#xff1a; 安装依赖后运行main.py 直接使用docker&#xff1a; docker pull realwang/short_video docker run -d -p 3000:…...

【秋招刷题打卡】Day01-自定义排序

Day01-自定排序 前言 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;acwin…...

API低代码平台介绍6-数据库记录删除功能

数据库记录删除功能 在前续文章中我们介绍了如何插入和修改数据库记录&#xff0c;本篇文章会沿用之前的测试数据&#xff0c;介绍如何使用ADI平台定义一个删除目标数据库记录的接口&#xff0c;包括 单主键单表删除、复合主键单表删除、多表删除&#xff08;整合前两者&#x…...

计算机基础之:硬件系统的性能评估标准

服务器时钟的性能通常涉及多个方面&#xff0c;主要包括准确性、稳定性、以及对系统性能的影响。以下是一些关键指标和衡量方法&#xff1a; 准确性&#xff1a; 时间偏移&#xff1a;测量服务器时钟与一个可靠时间源&#xff08;如GPS时间、原子钟或NTP服务器&#xff09;之间…...

高互动UI设计揭秘:动画效果如何提升用户体验

动画&#xff0c;由于其酷的视觉冲击&#xff0c;往往会产生极好的用户体验。UI设计中的动态效果可以使用户界面看起来更酷&#xff0c;特别是界面的功能动画&#xff0c;是UX设计的重要组成部分&#xff0c;不容忽视。为什么UI设计的动态效果如此重要&#xff1f;接下来&#…...

探索Java异常处理的奥秘:源码解析与高级实践

1. 引言 在Java编程的广阔天地中,异常处理是确保程序健壮性、稳定性和可维护性的重要基石。对于Java工程师而言,深入理解Java异常处理的机制,并能够在实践中灵活运用,是迈向卓越的重要一步。 2. 基本概念 在Java中,异常(Exception)是程序执行期间出现的不正常或错误情况…...

深入了解python函数与函数内存使用

函数的定义 函数作为代码复用的基本单元&#xff0c;可以帮助我们组织代码、减少重复、提高可读性和可维护性。 在 Python 中&#xff0c;函数本质上是对象&#xff0c;可以赋值给变量、存储在数据结构中、作为参数传递和返回。 函数与内存 函数的加载和调用过程中&#xff…...

Java面试----MySQL面试题

1.索引有哪些优缺点&#xff1f; MySQL索引作为一种提升数据库查询效率的重要机制&#xff0c;具有以下主要优点和缺点&#xff1a; 优点&#xff1a; 提高查询速度&#xff1a; 索引能够显著加速数据的检索过程&#xff0c;类似于书籍的目录&#xff0c;让数据库引擎能够快速…...

python从入门到精通2:缩进

在Python中&#xff0c;缩进&#xff08;Indentation&#xff09;是一个非常重要的语法元素&#xff0c;它用于表示代码块的结构。与其他许多编程语言使用大括号 {} 来定义代码块不同&#xff0c;Python使用缩进来确定代码块的开始和结束。这种简洁的语法使得Python代码更加清晰…...

了解CDN:提升网络性能和安全性的利器

在当今的数字时代&#xff0c;网站性能和安全性是每一个网站管理员必须关注的核心问题。内容分发网络&#xff08;CDN&#xff0c;Content Delivery Network&#xff09;作为解决这一问题的重要工具&#xff0c;逐渐成为主流。本文将详细介绍CDN的定义、作用及其工作原理&#…...

ChatGPT的工作原理

ChatGPT的工作原理可以详细分为以下几个步骤&#xff0c;下面将结合相关信息进行清晰、详细的介绍&#xff1a; 数据收集&#xff1a; ChatGPT首先会从大量的文本数据中收集信息&#xff0c;这些数据可能包括网页、新闻、书籍等多样化的来源。它还会特别关注和分析网络上的热点…...

基于DPU的云原生裸金属服务快速部署及存储解决方案

1. 背景介绍 1.1. 业务背景 在云原生技术迅速发展的当下&#xff0c;容器技术因其轻量级、可移植性和快速部署的特性而成为应用部署的主流选择&#xff0c;但裸金属服务器依然有其独特的价值和应用场景&#xff0c;是云原生架构中不可或缺的一部分。 裸金属服务器是一种高级…...

专业企业网站建设哪家服务好/网站开发流程是什么

接入层为华三设备 汇聚层为华为设备 在一次项目中遇到&#xff0c;MSTP配置完成后&#xff0c;查看交换机生成树的架构时发现了问题&#xff0c;发现华三设备的堵塞接口发生了错误&#xff0c;就开始寻找原因&#xff0c;查看了STP的接口状态命令如下&#xff1a; display stp…...

更改wordpress密码/网站打开

基本CSS选择器有标记选择器、类别选择器、ID选择器3种1。标记选择器 每一种HTML标记的名称都可以作为相应的标记选择器的名称&#xff0c;如h1,p,等等2。类别选择器 类别选择器的名称可以由用户自定义 格式如下&#xff1a;.class{color:green;font-size:20px;}3。ID选…...

响应式网站的设计尺寸/深圳seo培训

单一替换原则&#xff08;一个类只完成自己的事&#xff0c; 别多管闲事&#xff09;接口隔离原则&#xff08;客户端不应该依赖它不需要的接口&#xff0c;即一个类对另一个类的依赖应该建立在最小的接口上&#xff09;依赖转置原则&#xff08;面向接口编程&#xff0c; 尽量…...

成都网站建设龙兵科技/杭州seo排名公司

原作者&#xff1a;Raffaeu 上一篇文章我们看到&#xff0c;在WPF中创建定制的并重写默认样式的 TabControl 是相当复杂的&#xff0c;但对于扩展其行为还是很简单的。 作为资深开发者&#xff0c;我通常不喜欢: 1) 能够运行即可, 2) 推倒重来但仅仅写了两次相同的代码。那么这…...

wordpress 获取模板路径/网络销售好做吗

健康检查功能不会更新后端服务器域名解析 我的后端服务器使用动态域名&#xff0c;当动态域名的地址变了之后就会不断出现以下错误&#xff1a; 2013/03/23 16:27:37 [error] 21253#0: check time out with peer: 113.96.37.249:60080 2013/03/23 16:27:37 [error] 21257#0: c…...

福州公司网站设计/热门搜索关键词

文章目录Class 文件格式字节码Class类的本质Class文件格式类加载机制加载验证准备解析初始化类加载器双亲委派机制栈桢JVM方法调用详解方法解析静态分派动态分派参考Class 文件格式 一般情况下Java代码执行流程如下图&#xff1a; 字节码 字节码文件 .class文件的产生是最关…...