【docker】Docker Compose 使用介绍
一、什么是Docker Compose
Docker Compose是一个用于定义和运行多个Docker容器的工具。它允许您使用YAML文件来配置应用程序的服务、网络和卷等方面,并通过单个命令即可快速启动和停止整个应用程序的多个容器。
Docker Compose的主要作用如下:
-
管理多个容器:Docker Compose允许您在一个项目中定义和管理多个Docker容器。它通过使用一个配置文件来定义每个容器的服务、网络和卷等方面,从而使得启动和停止多个容器变得简单且可重复。
-
定义容器之间的依赖关系:使用Docker Compose,您可以指定容器之间的依赖关系。这意味着您可以确保在启动应用程序时,所有的依赖容器都会被正确地启动,并且在停止应用程序时,所有的依赖容器都会被正确地停止。
-
简化开发环境的搭建:在开发环境中,通常需要同时运行多个容器,如数据库、Web服务器等。使用Docker Compose,您可以通过一个命令即可一键启动整个开发环境,从而简化了环境搭建的过程。
-
提高应用程序的可移植性:使用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的优点主要包括:
-
快速原型设计:对于初创公司或项目,使用Docker Compose可以快速搭建原型,并且随着项目的增长和改变,可以轻松地扩展环境。
-
环境管理:通过Docker Compose,可以在同一宿主机上创建多个环境(开发、测试、生产等),每个环境相互隔离,保证环境的一致性。
-
一键式部署:通过一个简单的命令(例如
docker-compose up
),就可以启动和运行一组相关的容器。这对于开发和测试环境来说非常方便。 -
简化配置:Docker Compose使用YAML文件进行配置,结构简单,易于理解,使得配置工作变得简单。
-
版本控制:由于Docker Compose的配置是放在代码库中的,因此可以通过版本控制工具进行版本控制,这对于团队协作和项目管理非常有帮助。
-
资源隔离:Docker Compose可以设置不同的资源限制,保证容器之间的资源隔离,避免资源争用和冲突。
-
跨平台运行:由于Docker和Docker Compose是跨平台的,可以在不同的操作系统和硬件平台上运行,使得应用的部署更加灵活。
-
易于集成:Docker Compose可以和许多其他工具和服务集成,例如日志管理、监控、CI/CD等,使得DevOps流程更加顺畅。
-
支持多种网络模式:Docker Compose支持多种网络配置,包括bridge、host和none模式,可以满足不同的网络需求。
-
灵活的端口映射:Docker Compose允许用户自定义容器内部的端口映射,使得外部访问更加灵活。
总的来说,Docker Compose提供了许多实用的功能和优点,使得容器化的应用程序部署和管理变得更加简单和高效。
四、Docker Compose 常用指令
Docker Compose提供了一组常用的指令,用于管理和操作容器化应用程序。以下是一些常用的Docker Compose指令:
-
docker-compose up
:启动应用程序的所有服务。如果容器不存在,则会自动创建并启动。如果容器已经存在,则会重新启动。 -
docker-compose down
:停止并移除应用程序的所有服务。这将停止并删除所有相关的容器、网络和卷。 -
docker-compose start
:启动应用程序的所有服务。与docker-compose up
不同的是,docker-compose start
只会启动已经存在的容器,而不会重新创建。 -
docker-compose stop
:停止应用程序的所有服务。与docker-compose down
不同的是,docker-compose stop
只会停止容器,而不会删除它们。 -
docker-compose restart
:重启应用程序的所有服务。这将停止并重新启动所有容器。 -
docker-compose ps
:列出应用程序的所有服务及其状态。这将显示每个服务的容器ID、状态、端口映射等信息。 -
docker-compose logs
:查看应用程序的服务日志。这将显示所有服务的日志输出。 -
docker-compose build
:构建应用程序的服务镜像。这将根据定义的Dockerfile构建镜像。 -
docker-compose exec
:在运行的容器中执行命令。例如,docker-compose exec web ls
将在名为web
的容器中执行ls
命令。 -
docker-compose down --volumes
:停止并移除应用程序的所有服务,并删除所有相关的容器、网络和卷。使用--volumes
选项可以删除与服务关联的卷。
五、使用示例
1、基本使用
下面是一个简单的Docker Compose使用示例:
假设我们有一个应用程序,由两个服务组成:一个是Web服务,一个是数据库服务。
- 创建一个名为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:
-
在同一目录下创建一个名为web的文件夹,并在文件夹中添加一个index.html文件,作为Web服务的内容。
-
打开终端,进入包含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项目时,可以按照以下步骤进行操作:
- 编写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文件复制到容器中,并设置容器启动时执行的命令。
- 构建镜像
在Spring Boot项目的根目录下,打开终端或命令提示符,并运行以下命令来构建镜像:
docker build -t my-springboot:latest .
这个命令将构建一个名为my-springboot
的镜像,标签为latest
。
- 编写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
目录。
- 启动容器
在终端或命令提示符中,运行以下命令来启动容器:
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 种攻击工具,…...

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%。 鲸参谋综合了京东…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...