Docker - Compose

news2024/10/2 12:17:13

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

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-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 127.0.0.1:3000:3000
    working_dir: /app
    volumes:
      - ./:/app
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      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: nginx
    ports:
      - "80:80"
    networks:
      - webnet
  db:
    image: postgres
    environment:
      POSTGRES_DB: example
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

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

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

Compose高级应用

  1. 网络配置

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

version: '3'
services:
  web:
    image: nginx
    networks:
      - front-end
  api:
    image: my-api
    networks:
      - front-end
      - back-end
  db:
    image: postgres
    networks:
      - back-end

networks:
  front-end:
  back-end:

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

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

version: '3'
services:
  db:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

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

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

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

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

  1. 扩展和复用配置

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

  1. 使用Docker-Compose进行部署

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​「Python大数据」VOC数据清洗

前言 本文主要介绍通过python实现数据清洗、脚本开发、办公自动化。读取voc数据,存储新清洗后的voc数据数据。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词,清洗后的评论存储到新的列中保存清洗后的数据到新的Excel文件中二、具体产出 三、执…

实验 2--创建数据库和表

文章目录 实验 2--创建数据库和表实验目的3.3.2 实验准备3.3.3 实验内容2.在 SSMS 图形界面中创建和删除数据库和数据表。(1)在 SSMS 图形界面中创建 YGKQ 数据库;(2)在 SSMS 图形界面中删除 YGKQ 数据库;(3)在 SSMS 图形界面中创建、删除 BMXX表;(4)在 SSMS 图形界面中分别创建…

【探讨】RocketMQ消息灰度方案-消息逻辑隔离

vivo 鲁班平台 RocketMQ 消息灰度方案 - 稀土掘金分布式- vivo鲁班RocketMQ平台的消息灰度方案MQ消息在生产环境和灰度环境隔离一般怎么实现?消息隔离的原则 中心正常消费者,可以同时消费正常的消息和特定标签的消息(自动识别);特定标签的消费者,只能消费特定标签的消息。灰…

连连看游戏页面网站源码

首页,可以上传自己喜欢的图片 游戏页面 通关页面

Python程序设计 字典

教学案例十 字典 1. 判断出生地 sfz.txt文件中存储了地区编码和地区名称 身份证的前6位为地区编码,可以在sfz.txt文件中查询到地区编号对应的地区名称 编写程序,输入身份证号,查询并显示对应的地区名称 若该地区编码不在文件中,…

MapReduce——ReudceTask并行度决定机制

MapReduce——ReudceTask并行度决定机制 1. Reduce任务的数量(reduce task count): 这是最基本的决定因素之一。在作业启动时,用户可以指定Reduce任务的数量。更多的Reduce任务意味着更多的并行度,因为每个Reduce任务…

【大模型应用极简开发入门(2)】GPT模型简史:从GPT-1到GPT-4:从小数据量的微调到大数据量的强化学习不断优化模型

文章目录 一. GPT-1:无监督与微调1. 在GPT-1之前的监督学习的问题2. GPT-1中新的学习过程-无监督的预训练3. 复杂任务下的微调4. GPT-1为更强大的模型铺平了道路 二. GPT-2:context learning1. 核心思想:context learning2. GPT-2的数据集 三…

【面试经典 150 | 数组】罗马数字转整数

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

IoT、IIoT、AIoT的区别是什么?

一、IoT、IIoT、AIoT的区别是什么? IoT、IIoT和AIoT都是物联网(Internet of Things)的不同应用和发展方向,但它们之间存在一些区别。 IoT(物联网):物联网是指通过互联网连接各种物理设备&#x…

RIP最短路实验(思科)

华为设备参考:RIP最短路实验(华为) 一,技术简介 RIP(Routing Information Protocol,路由信息协议)是一种基于距离矢量的内部网关协议,工作原理是每个路由器周期性地向邻居路由器发…

GPT-3.5 Turbo 的 temperature 设置为 0 就是贪婪解码?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 将 GPT-3.5 Turbo 的 temperature 设置为 0 通常意味着采用贪婪解码(greedy decoding)策略。在贪婪解码中,模型在每一步生成文本时选择概率最高的词元,从…

LeetCode题练习与总结:矩阵置零--73

一、题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xf…

每日一题---链表的中间结点

文章目录 前言1.题目2.题目分析2.1.思路一2.2.思路二(快慢指针) 3.参考代码3.1.代码1--思路13.2.代码2---思路2 前言 我们上一篇数据结构与算法的章节当中,我们学习到了单链表,下面我们做几篇中,我们做几道题&#xf…

PTA L2-052 吉利矩阵

题目 解析 这题考的是搜索剪枝 可行性剪枝: 即判断当前行(列)是否已经超过L和剩下的格子都填最大值是否小于L,若是则剪枝。 当前行数大于1时,判断上一个填完的行是否等于L,若否,则剪枝。 当前行…

nginx开启basic认证

basic认证也叫做http基本认证,防止恶意访问 首先用在线网站生成一个叫做htpasswd的账号密码文件。 将生成结果复制到/etc/nginx/htpasswd文件中 在server的location中配置 server { listen 80; server_name a.com;location / { root html;index index.…

用全连接对手写数字识别案例(附解决TensorFlow2.x没有examples问题)

数据集介绍 数据集直接调用可能出现问题,建议从官网直接下载下来,下载存在这四个文件 手写数字识别数据集下载: 链接:https://pan.baidu.com/s/1nqhP4yPNcqefKYs91jp9ng?pwdxe1h 提取码:xe1h 55000行训练数据集&a…

揭开ChatGPT面纱(3):使用OpenAI进行文本情感分析(embeddings接口)

文章目录 一、embeddings接口解析二、代码实现1.数据集dataset.csv2.代码3.运行结果 openai版本1.6.1 本系列博客源码仓库:gitlab,本博客对应文件夹03 在这一篇博客中我将使用OpenAI的embeddings接口判断21条服装评价是否是好评。 首先来看实现思路&am…

TPG原理以及verilog实现

文章目录 一、前言二、verilog代码实现三、仿真以及结果分析 一、前言 TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据,对视频数据通路测试。根据视频输出时序产生相应的图像数据 二、verilog代码实现 timescale 1ns / 1nsmodule tpg ( i…

超星图书转成PDF格式

转为pdf 为避免浪费您的时间,本篇转载文章不值得花费您的宝贵时间阅读 方法一 感谢医学插画动画杜鹏 Roison An两位提供的方法,经试验后简化了一下,得出以下方法:1、使用超星打开你想要转换的图书2、依次打开本书的所有页面,不要…

Vue3+TS版本Uniapp:项目前置操作

作者:前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 环境:使用vscode进行开发 如果一开始是使用的HbuilderX,请看hbuilderX创建的uniapp项目转移到vscode 为什么选择vscode?有更好…