当前位置: 首页 > 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%。 鲸参谋综合了京东…...

秒懂百科,C++如此简单丨第十二天:ASCLL码

目录 必看信息 Everyday English 📝ASCLL码是什么? 📝ASCLL码表 📝利用ASCLL码实现大写转小写 📝小试牛刀 总结 必看信息 ▶本篇文章由爱编程的小芒果原创,未经许可,严禁转载。 ▶本篇文…...

Qt6入门教程 4:Qt Creator常用技巧

在上一篇Qt6入门教程 3:创建Hello World项目中,通过创建一个Qt项目,对Qt Creator已经有了比较直观的认识,本文将介绍它的一些常用技巧。 Qt Creator启动后默认显示欢迎页面 创建项目已经用过了,打开项目也很简单&#…...

阴盘奇门八字排盘马星位置计算方法php代码

如下位置,马星的四个位置。 计算方法: 1。先根据出生年月日,计算得八字四柱。比如 2024年01月09日,四柱为 其中时柱地支为“申” 2。然后根据以下对应的数组,来找到id号,即马星位置。 根据下表来找到&am…...

vue3 使用 jsoneditor

vue3 使用 jsoneditor 在main.js中引入 样式文件 import jsoneditor/dist/jsoneditor.css复制代码放到文件中就能用了 jsoneditor.vue <template><div ref"jsonDom" style"width: 100%; height: 460px"></div> </template> <…...

若依前后端分离版使用mybatis-plus实践教程

1、根目录得pom加入依赖 <properties><mybatis-plus.version>3.5.1</mybatis-plus.version> </properties> <dependencies><!-- mp配置--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus…...

SpringBoot-Dubbo-Zookeeper

Apache Dubbo&#xff1a;https://cn.dubbo.apache.org/zh-cn/overview/home/ 依赖 <!--dubbo--> <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</versio…...

华为HCIE课堂笔记第十二章 ICMPv6和NDP协议

第十二章 ICMPv6和NDP 12.1 背景 ICMPv6协议用于IPV6协议的消息传递&#xff1a;地址解析、重复地址检测、无状态地址配置、NDP协议、路径MTU发现。 12.2 ICMPv6介绍 ICMPv6的头部字段包含Type字段、Code字段、校验和字段。 消息分为两种&#xff1a; 查错消息&#xff…...

GNSS科研常用相关网站及资源

代码类&#xff1a; Github GitHub: Let’s build from here GitHub 导航相关开源项目 GNSS&#xff1a;RTKLIB、GAMP II-GOOD、GPSTest、GNSSLogger 组合导航&#xff1a;ignav、VINS、Multi_Sensor_Fusion Gitee&#xff08;从Github导入后快速下载库&#xff09; Gi…...

进程的创建与回收学习笔记

目录 一、进程内容&#xff1a; 二、进程常用命令 三、创建子进程 四、子进程进阶 五、进程的退出 六、进程的回收 一、进程内容&#xff1a; 程序&#xff1a; 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 静态的 进程&#xff1a; 执行一个程序所…...

【CCNet】《CCNet:Criss-Cross Attention for Semantic Segmentation》

ICCV-2019 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Experiments on Cityscapess5.3 Experiments on ADE20K5.4 Experiments on COCO 6 Conclusion&#xff08;own&#xff09; 1 Ba…...