Docker - Compose

原文地址,使用效果更佳!

Docker - Compose | CoderMast编程桅杆Docker - Compose 在部署应用时,常常使用到不止一个容器,那么在部署容器的时候就需要一个一个进行部署,这样的部署过程也相对来说比较繁琐复杂,也容易出问题,那么有没有一种更为简单的方法呢? Compose简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。Docker Compose 通过一个单独的 docker-c...icon-default.png?t=N7T8https://www.codermast.com/dev-tools/docker/docker-compose.html

在部署应用时,常常使用到不止一个容器,那么在部署容器的时候就需要一个一个进行部署,这样的部署过程也相对来说比较繁琐复杂,也容易出问题,那么有没有一种更为简单的方法呢?

Compose简介

 

Compose 是用于定义和运行多容器 Docker 应用程序的工具。Docker Compose 通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相关联的 Docker 容器的快速部署。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

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

Compose安装

  • Linux:执行以下指令即可安装(最新版替换V后面的版本号即可)

$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • MacOS:Mac 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose。

  • Windows:Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Windows 用户不需要单独安装 Compose。

Compose样例

version : "3.7"
services:app:image: node:18-alpinecommand: sh -c "yarn install && yarn run dev"ports:- 127.0.0.1:3000:3000working_dir: /appvolumes:- ./:/appweb:image: nginxports:- "80:80"db:image: postgresenvironment:POSTGRES_DB: example

在该样例中我们定义了 3 个服务,app、web 和 db。

  • app 服务使用到了 node:18-alpine 会执行一条 Shell 指令,并且进行了端口映射,配置了工作目录,配置了卷。
  • web 服务使用到了 nginx 镜像,并将容器的 80 端口,映射到宿主机的 80 端口。
  • db 服务使用了 postgres 镜像,并设置了一个环境变量。

Docker Compose 的配置本质上就是把部署 Docker 容器的过程集中管理起来,方便用户部署和后续维护。核心就是将 Docker 命令转换为 Yaml 文件。

Compose基本命令

使用Docker-Compose的常见命令包括:

  • docker-compose up:启动并运行整个应用。
  • docker-compose down:停止并移除容器、网络、卷和镜像。
  • docker-compose build:构建或重建服务。
  • docker-compose logs:查看服务的日志输出。
    这些命令为 Docker-Compose 的日常使用提供了基础。

Compose文件结构

  1. 理解docker-compose.yml

docker-compose.yml文件是Docker-Compose项目的核心,它使用YAML格式来描述和配置您的应用服务。这个文件不仅定义了所使用的服务,还包括了这些服务的配置,例如使用的Docker镜像、端口映射、依赖关系、环境变量等。

  1. 基本组件
  • 服务(Services):服务代表一个容器。在docker-compose.yml中,您可以定义一个或多个服务,每个服务可以使用不同的镜像。
  • 网络(Networks):Docker-Compose允许您定义和使用自己的网络。
  • 卷(Volumes):卷用于数据持久化和共享数据。您可以定义一个卷,并将其挂载到一个或多个容器中。
  1. 文件示例

下面是一个更复杂的docker-compose.yml文件示例,其中包含了网络和卷的定义:

version: '3'services:web:image: nginxports:- "80:80"networks:- webnetdb:image: postgresenvironment:POSTGRES_DB: examplevolumes:- db-data:/var/lib/postgresql/datanetworks:- webnetvolumes:db-data:networks:webnet:

在这个示例中,我们创建了一个名为webnet的网络,并且让web和db服务都连接到这个网络。我们还定义了一个卷db-data用于持久化数据库的数据。

  1. 配置项解析
  • 环境变量(Environment):可以设置环境变量,为服务配置必要的参数。
  • 端口映射(Ports):将容器内的端口映射到宿主机的端口,以便外部访问。
  • 依赖关系(Depends On):可以指定服务启动的顺序。

Compose高级应用

  1. 网络配置

在Docker-Compose中,您可以自定义网络来实现服务间的隔离或通信。例如,您可以创建一个只供数据库和后端服务使用的内部网络。以下是一个网络配置的例子:

version: '3'
services:web:image: nginxnetworks:- front-endapi:image: my-apinetworks:- front-end- back-enddb:image: postgresnetworks:- back-endnetworks:front-end:back-end:

在这个配置中,web和api服务都连接到front-end网络,而db和api服务则连接到back-end网络。

  1. 卷挂载和数据持久化
    卷用于数据持久化和服务间共享数据。在Docker-Compose中,您可以定义卷并将其挂载到服务所需的位置。例如:

version: '3'
services:db:image: postgresvolumes:- db-data:/var/lib/postgresql/datavolumes:db-data:

在这个例子中,我们定义了一个名为db-data的卷,并将其挂载到数据库服务的数据目录。

  1. 环境变量和配置文件
    Docker-Compose允许您通过环境变量或.env文件来配置服务。这使得您的配置更加灵活,也更适合不同的环境。例如:

version: '3'
services:web:image: nginxports:- "${WEB_PORT}:80"

您可以在.env文件中定义WEB_PORT变量,Docker-Compose会在运行时使用该值。

  1. 扩展和复用配置

通过使用extends关键字,您可以在多个项目中重用配置。这样,您可以为不同的环境(如开发、测试和生产)保持共同的基础配置,同时覆盖特定环境的设置。

  1. 使用Docker-Compose进行部署

虽然Docker-Compose主要用于开发环境,但它也可以用于生产环境的部署。通过适当的配置和环境准备,Docker-Compose可以作为一个简单的部署工具。

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

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

相关文章

医学图像分割入门-FCN理论与实践

FCN(全卷积神经网络) 引言 全卷积网络(Fully Convolutional Network,简称FCN)是一种深度学习模型,专门设计用于图像分割任务。相比于传统的基于全连接层的神经网络,FCN可以接受任意尺寸的输入…

「健身党」真无线蓝牙耳机怎么选?攻略来啦

在减脂健身的道路上,我虽然还是个新手,但在耳机选择上却已经踩了不少雷。根据自己的经验分享一些挑选真无线蓝牙耳机的小技巧,希望能为大家提供一些帮助,避免像我一样花冤枉钱。 一、耳机类型 传统入耳式耳机和头戴式耳机真的达咩,健身的时候戴这两种耳机不仅容易掉,而且舒适…

Stanford天空图像和光伏发电数据集

需要的同学私信联系,推荐关注上面图片右下角的订阅号平台 自取下载。 太阳能的间歇性对光伏(PV)与电网的大规模集成提出了挑战。基于天空图像的太阳能预报已被认为是预测短期波动的一种很有前途的方法。在这里,介绍一个数据集名叫…

详解QListView、QListWidget、QTableView、QTableWidget的使用以及区别

在Qt框架中,QListView、QListWidget、QTableView和QTableWidget都是用于显示列表或表格数据的控件。它们在用途、数据模型、灵活性以及直接操作数据的便捷性等方面存在一定的差异。下面将详细阐述这些控件的使用方法以及它们之间的区别,并提供相应的C代码…

算法课程笔记——蓝桥云课第二次直播

注意是‘’ 都正确 可以理解为a的首地址也是数字&#xff0c;向右1 %p逻辑地址 Cin cout字符串“”单个字符本身‘’&#xff0c;其他时候不用加 这样就可以 逆运算 bool比较真假<从小到大排 11/25 都输出最省事 变成长度为n1的数组 考虑到整个都可能为一个颜色&#xff0c;…

Docker Desktop打开一直转圈的解决办法

安装Docker Desktop之前确保你的Hyper-V已经打开 开启后需要重新安装重新安装重新安装这是最关键的一步&#xff0c;博主自己看了很多教程&#xff0c;最后试着重装了一下解决了 安装DockerDesktop的时候我的电脑根本就没有Hyper-V这个功能选项&#xff0c;可能是这个问题 如…

C51配置115200串口波特率

一、首先用软件模拟 经过验证&#xff0c;用软件配置115200波特率&#xff0c;在C51里面是行不通的&#xff0c;因为寄存器有限 此时应该翻阅手册看看&#xff0c;是否有其他的解决办法 二、查阅手册 发现定时器2&#xff0c;其实是C52的&#xff0c;也正是C52比C51增强的地…

Junit 整合-ApiHug准备-测试篇-013

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 这里简单…

第G8周:ACGAN任务

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 参考论文 这周主要任务就是根据之前GAN&#xff0c;CGAN&#xff0c;SGAN网络架构搭建…

在PostgreSQL中如何实现递归查询,例如使用WITH RECURSIVE构建层次结构数据?

文章目录 解决方案使用WITH RECURSIVE进行递归查询示例代码 总结 在PostgreSQL中&#xff0c;递归查询是一种非常强大的工具&#xff0c;它可以用来查询具有层次结构或树形结构的数据。例如&#xff0c;你可能会在员工-经理关系、目录结构或组织结构图中遇到这样的数据。为了处…

12.Hexo helpers类似函数和data folder数据文件夹

helper Hexo里的helper&#xff0c;或者说是函数 基本上就是小函数&#xff0c;可以在layout布局中使用&#xff0c;可以允许做一些事情 如字符串操作、检查true或false、检查是否在一个页面上、打印出某个页面中的日期或时间特定格式 打开index.ejs trim 可以通过 <%…

模拟电子技术实验(八)

多选题 1.本次实验的目的包括验证的工作原理&#xff1f; A. 反向加法器 B. 过零比较器 C. 滞回比较器 D. 反向比例放大器 答案&#xff1a;BC 评语&#xff1a;10分 单选题 2.该实验稳压管均为左右&#xff1f; A. 4V B. 5V C. 6V …