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

【docker】Docker Compose 使用介绍

一、什么是Docker Compose

Docker Compose是一个用于定义和运行多个Docker容器的工具。它允许您使用YAML文件来配置应用程序的服务、网络和卷等方面,并通过单个命令即可快速启动和停止整个应用程序的多个容器。

Docker Compose的主要作用如下:

  1. 管理多个容器:Docker Compose允许您在一个项目中定义和管理多个Docker容器。它通过使用一个配置文件来定义每个容器的服务、网络和卷等方面,从而使得启动和停止多个容器变得简单且可重复。

  2. 定义容器之间的依赖关系:使用Docker Compose,您可以指定容器之间的依赖关系。这意味着您可以确保在启动应用程序时,所有的依赖容器都会被正确地启动,并且在停止应用程序时,所有的依赖容器都会被正确地停止。

  3. 简化开发环境的搭建:在开发环境中,通常需要同时运行多个容器,如数据库、Web服务器等。使用Docker Compose,您可以通过一个命令即可一键启动整个开发环境,从而简化了环境搭建的过程。

  4. 提高应用程序的可移植性:使用Docker Compose,您可以将整个应用程序以及其所需的容器和配置打包成一个可移植的镜像,从而使得应用程序可以在不同的环境中运行,而不需要重新配置和安装依赖。

总之,Docker Compose简化了多个Docker容器的管理和部署,提供了一种简单而可靠的方式来定义和运行多个容器,并帮助开发人员更高效地构建和部署应用程序。

二、Docker Compose 安装

Docker Compose的安装非常简单,安装如下操作即可。

## 安装最新版本docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
## 加上许可权限
sudo chmod +x /usr/local/bin/docker-compose
## 查看是否已成功安装
docker-compose --version## docker-compose是一个文件,如果要卸载只需要把文件删除即可
rm /usr/local/bin/docker-compose

上面地址github.com有时候可能连不上(需要梯子),也可以从我的网盘下载,然后放在服务器上面。

网盘地址:

版本:v2.23.3
链接:https://pan.baidu.com/s/19i48r4qloOYSTh35J1XZJA 
提取码:s8ta
## 把文件传到目录 /usr/local/bin/docker-compose
## 加上许可权限
sudo chmod +x /usr/local/bin/docker-compose
## 查看是否已成功安装
docker-compose --version

三、Docker Compose 的优点

Docker Compose的优点主要包括:

  1. 快速原型设计:对于初创公司或项目,使用Docker Compose可以快速搭建原型,并且随着项目的增长和改变,可以轻松地扩展环境。

  2. 环境管理:通过Docker Compose,可以在同一宿主机上创建多个环境(开发、测试、生产等),每个环境相互隔离,保证环境的一致性。

  3. 一键式部署:通过一个简单的命令(例如docker-compose up),就可以启动和运行一组相关的容器。这对于开发和测试环境来说非常方便。

  4. 简化配置:Docker Compose使用YAML文件进行配置,结构简单,易于理解,使得配置工作变得简单。

  5. 版本控制:由于Docker Compose的配置是放在代码库中的,因此可以通过版本控制工具进行版本控制,这对于团队协作和项目管理非常有帮助。

  6. 资源隔离:Docker Compose可以设置不同的资源限制,保证容器之间的资源隔离,避免资源争用和冲突。

  7. 跨平台运行:由于Docker和Docker Compose是跨平台的,可以在不同的操作系统和硬件平台上运行,使得应用的部署更加灵活。

  8. 易于集成:Docker Compose可以和许多其他工具和服务集成,例如日志管理、监控、CI/CD等,使得DevOps流程更加顺畅。

  9. 支持多种网络模式:Docker Compose支持多种网络配置,包括bridge、host和none模式,可以满足不同的网络需求。

  10. 灵活的端口映射:Docker Compose允许用户自定义容器内部的端口映射,使得外部访问更加灵活。

总的来说,Docker Compose提供了许多实用的功能和优点,使得容器化的应用程序部署和管理变得更加简单和高效。

四、Docker Compose 常用指令

Docker Compose提供了一组常用的指令,用于管理和操作容器化应用程序。以下是一些常用的Docker Compose指令:

  1. docker-compose up:启动应用程序的所有服务。如果容器不存在,则会自动创建并启动。如果容器已经存在,则会重新启动。

  2. docker-compose down:停止并移除应用程序的所有服务。这将停止并删除所有相关的容器、网络和卷。

  3. docker-compose start:启动应用程序的所有服务。与docker-compose up不同的是,docker-compose start只会启动已经存在的容器,而不会重新创建。

  4. docker-compose stop:停止应用程序的所有服务。与docker-compose down不同的是,docker-compose stop只会停止容器,而不会删除它们。

  5. docker-compose restart:重启应用程序的所有服务。这将停止并重新启动所有容器。

  6. docker-compose ps:列出应用程序的所有服务及其状态。这将显示每个服务的容器ID、状态、端口映射等信息。

  7. docker-compose logs:查看应用程序的服务日志。这将显示所有服务的日志输出。

  8. docker-compose build:构建应用程序的服务镜像。这将根据定义的Dockerfile构建镜像。

  9. docker-compose exec:在运行的容器中执行命令。例如,docker-compose exec web ls将在名为web的容器中执行ls命令。

  10. docker-compose down --volumes:停止并移除应用程序的所有服务,并删除所有相关的容器、网络和卷。使用--volumes选项可以删除与服务关联的卷。

五、使用示例

1、基本使用

下面是一个简单的Docker Compose使用示例:

假设我们有一个应用程序,由两个服务组成:一个是Web服务,一个是数据库服务。

  1. 创建一个名为docker-compose.yml的文件,并在文件中添加以下内容:
version: '3'
services:web:image: nginx:latestports:- 80:80volumes:- ./web:/usr/share/nginx/htmldepends_on:- dbdb:image: mysql:latestenvironment:- MYSQL_ROOT_PASSWORD=secret- MYSQL_DATABASE=mydb- MYSQL_USER=myuser- MYSQL_PASSWORD=mypasswordvolumes:- dbdata:/var/lib/mysql
volumes:dbdata:
  1. 在同一目录下创建一个名为web的文件夹,并在文件夹中添加一个index.html文件,作为Web服务的内容。

  2. 打开终端,进入包含docker-compose.yml文件的目录,并运行以下命令启动应用程序:

docker-compose up -d

这将启动两个服务:Web服务和数据库服务。Web服务将使用Nginx镜像,并将主机的80端口映射到容器的80端口。Web服务的内容将从主机的web文件夹挂载到容器的/usr/share/nginx/html目录。

数据库服务将使用MySQL镜像,并设置了一些环境变量来配置数据库。数据库的数据将从主机的dbdata卷挂载到容器的/var/lib/mysql目录。

通过运行docker-compose up -d命令,应用程序将在后台运行。

2、结合Springboot项目使用

当使用Docker Compose结合Spring Boot项目时,可以按照以下步骤进行操作:

  1. 编写Dockerfile

在Spring Boot项目的根目录下,创建一个名为Dockerfile的文件。在Dockerfile中,你可以指定用于构建镜像的镜像名和标签,以及在容器中运行的命令。以下是一个示例Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY my-springboot.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

在这个例子中,我们使用openjdk:8-jdk-alpine作为基础镜像,将应用程序的JAR文件复制到容器中,并设置容器启动时执行的命令。

  1. 构建镜像

在Spring Boot项目的根目录下,打开终端或命令提示符,并运行以下命令来构建镜像:

docker build -t my-springboot:latest .

这个命令将构建一个名为my-springboot的镜像,标签为latest

  1. 编写docker-compose.yml文件

创建一个名为docker-compose.yml的文件,用于定义容器的配置。在docker-compose.yml文件中,你可以指定镜像名、容器端口、卷挂载等信息。以下是一个示例docker-compose.yml文件:

version: '3'
services:my-springboot:image: my-springboot:latestports:- "8080:8080"volumes:- ./logs:/usr/src/myapp/logs

在这个例子中,我们指定了服务名为my-springboot,使用的镜像为my-springboot:latest,将容器的8080端口映射到主机的8080端口,并将本地的./logs目录挂载到容器的/usr/src/myapp/logs目录。

  1. 启动容器

在终端或命令提示符中,运行以下命令来启动容器:

docker-compose up -d

这个命令将启动名为my-springboot的服务,并在后台运行。你可以使用其他命令来管理容器,例如停止容器、重启容器等。

参考

  • https://docs.docker.com/engine/reference/commandline/compose/
  • https://docs.docker.com/compose/compose-file/

相关文章:

【docker】Docker Compose 使用介绍

一、什么是Docker Compose Docker Compose是一个用于定义和运行多个Docker容器的工具。它允许您使用YAML文件来配置应用程序的服务、网络和卷等方面,并通过单个命令即可快速启动和停止整个应用程序的多个容器。 Docker Compose的主要作用如下: 管理多个…...

uniapp怎么开发插件并发布

今天耳机坏了,暂时内卷不了,所以想开发几个插件玩玩,也好久没写博客了,就拿这个来写了 首先,发布插件时需要你有项目 这里先拿uniapp创建一个项目, 如下,创建好的项目长这样 然后根据uniapp官网上说的,我们发布插件时,需要在uni_modules里面编写和发布 ps:还需要使用uniapp…...

为什么不直接public,多此一举用get、set,一文给你说明白

文章目录 1. 封装性(Encapsulation)2. 验证与逻辑处理3. 计算属性(Computed Properties)4. **跟踪变化(Change Tracking)5. 懒加载与延迟初始化(Lazy Initialization)6. 兼容性与未来…...

golang 记录一次协程和协程池的使用,利用ants协程池来处理定时器导致服务全部阻塞

前言 在实习的项目中有一个地方遇到了需要协程池的地方,在mt推荐下使用了ants库。因此在此篇记录一下自己学习使用此库的情况。 场景描述 此服务大致是一个kafka消息接收、发送相关。接收消息,根据参数设置定时器进行重发。 通过这里新建kafka服务&a…...

【Postman-windows-9.12.2版本安装与汉化】

Postman-windows-9.12.2版本安装与汉化 想用英文版本的可以直接点击如下链接下载最新版本 官网最新版本(无法汉化):https://www.postman.com/downloads/ 如果想要汉化的就不能使用最新版本,因为最新版本没有汉化包可以用 汉化包和postman的版本必须是…...

11Spring IoC注解式开发(下)(负责注入的注解/全注解开发)

1负责注入的注解 负责注入的注解,常见的包括四个: ValueAutowiredQualifierResource 1.1 Value 当属性的类型是简单类型时,可以使用Value注解进行注入。Value注解可以出现在属性上、setter方法上、以及构造方法的形参上, 方便起见,一般直…...

Grafana Promtail 配置解析

由于目前项目一般都是部署在k8s上,因此这篇文章中的配置只摘录k8s相关的配置,仅供参考,其他的配置建议上官网查询。 运行时打印配置 -print-config-stderr 通过 ./promtail 直接运行Promtail时能够快速输出配置 -log-config-reverse-order 配…...

电脑DIY-主板参数

电脑主板参数 主板系列芯片组主板支持的CPU系列主板支持CPU的第几代主板的尺寸主板支持的内存主板是否支持专用WIFI模块插槽主板规格主板供电规格M.2插槽(固态硬盘插槽)规格USB接口规格质保方式 华硕TUF GAMING B650M-PLUS WIFI DDR5重炮手主板 华硕&…...

JVM知识总结(持续更新)

这里写目录标题 java内存区域程序计数器虚拟机栈本地方法栈堆方法区 java内存区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域: 程序计数器虚拟机栈本地方法栈堆方法区 程序计数器 记录下一条需要执行的虚拟机字节码指令…...

信息系统安全——基于 KALI 和 Metasploit 的渗透测试

实验 2 基于 KALI 和 Metasploit 的渗透测试 2.1 实验名称 《基于 KALI 和 Metasploit 的渗透测试》 2.2 实验目的 1 、熟悉渗透测试方法 2 、熟悉渗透测试工具 Kali 及 Metasploit 的使用 2.3 实验步骤及内容 1 、安装 Kali 系统 2 、选择 Kali 中 1-2 种攻击工具&#xff0c…...

05. 深入理解 GPT 架构

在本章的前面,我们提到了类 GPT 模型、GPT-3 和 ChatGPT 等术语。现在让我们仔细看看一般的 GPT 架构。首先,GPT 代表生成式预训练转换器,最初是在以下论文中引入的: 通过生成式预训练提高语言理解 (2018) 作者:Radford 等人,来自 OpenAI,http://cdn.openai.com/rese…...

PHP开发日志 ━━ php8.3安装与使用组件Xdebug

今天开头写点历史: 二十年前流行asp,当时用vb整合常用函数库写了一个dll给asp调用,并在此基础上开发一套仿windows界面的后台管理系统;后来asp逐渐没落,于是在十多年前转投php,不久后用php写了一套mvc框架&…...

Python - 深夜数据结构与算法之 Two-Ended BFS

目录 一.引言 二.双向 BFS 简介 1.双向遍历示例 2.搜索模版回顾 三.经典算法实战 1.Word-Ladder [127] 2.Min-Gen-Mutation [433] 四.总结 一.引言 DFS、BFS 是常见的初级搜索方式,为了提高搜索效率,衍生了剪枝、双向 BFS 以及 A* 即启发式搜索…...

langchain-Agent-工具检索

有时会定义很多工具,而定义Agent的时候只想使用与问题相关的工具,这是可以通过向量数据库来检索相关的工具,传递给Agent # Define which tools the agent can use to answer user queries search SerpAPIWrapper() search_tool Tool(name …...

猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…...

Unity-生命周期函数

目录 生命周期函数是什么? 生命周期函数有哪些? Awake() OnEnable() Start() FixedUpdate() Update() Late Update() OnDisable() OnDestroy() Unity中生命周期函数支持继承多态吗? 生命周期函数是什么? 在Unity中&…...

SQL概述及SQL分类

SQL由IBM上世纪70年代开发出来,是使用关系模型的数据库应用型语言,与数据直接打交道。 SQL标准 SQL92,SQL99,他们分别代表了92年和99年颁布的SQL标准,我们今天使用的SQL语言依旧遵循这些标准。 SQL的分类 DDL:数据定…...

[VSCode] VSCode 常用快捷键

文章目录 VSCode 源代码编辑器VSCode 常用快捷键分类汇总01 编辑02 导航03 调试04 其他05 重构06 测试07 扩展08 选择09 搜索10 书签11 多光标12 代码片段13 其他 VSCode 源代码编辑器 官网:https://code.visualstudio.com/ 下载地址:https://code.visua…...

函数指针和回调函数 以及指针函数

函数指针(Function Pointer): 定义: 函数指针是指向函数的指针,它存储了函数的地址。函数的二制制代码存放在内存四区中的代码段,函数的地址它在内存中的开始地址。如果把函数的地址作为参数,就…...

京东年度数据报告-2023全年度游戏本十大热门品牌销量(销额)榜单

同笔记本市场类似,2023年度游戏本市场的整体销售也呈下滑态势。根据鲸参谋电商数据分析平台的相关数据显示,京东平台上游戏本的年度销量累计超过350万,同比下滑约6%;销售额将近270亿,同比下滑约11%。 鲸参谋综合了京东…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块&#xff0…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...