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-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可以作为一个简单的部署工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 OpenCV 测量物体尺寸

使用 OpenCV 测量物体尺寸 你是否曾经遇到过这样的问题:想要知道计算器的精确尺寸,但手头又没有专业的测量工具?别担心,今天我们就来教大家一个简单又实用的方法,通过一张A4纸就能估算出计算器的宽度和高度&#xff0c…

Python 全栈安全(三)

原文:annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者:飞龙 协议:CC BY-NC-SA 4.0 第十一章:OAuth 2 本章内容 注册 OAuth 客户端 请求对受保护资源的授权 授权而不暴露身份验证凭据 访问受保护的资源 OAuth …

指针的使用以及运算、二级指针、造成野指针的原因以及解决方法、指针和数组相互使用

第七章,指针的学习 目录 前言 一、指针的概念 二、指针的类型 三、野指针 四、指针的运算 五、指针和数组的关系以及使用 六、指针数组 七、二级指针 总结 前言 这章主要学习的是指针方面的知识,这节只是简单了解一下指针,并不会深…

判断水仙花数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 0;int b 0;int s 0;int g 0;int m 0;//提示用户&#xff1b;printf("请输入…

java-Spring-bean的生命周期

定义 程序中的每个对象都有生命周期&#xff0c;对象的创建、初始化、应用、销毁的整个过程称之为对象的生命周期&#xff1b; 在对象创建以后需要初始化&#xff0c;应用完成以后需要销毁时执行的一些方法&#xff0c;可以称之为是生命周期方法&#xff1b; 在spring中&…

Azure AD统一认证及用户数据同步开发指导

本文主要目的为&#xff1a;指导开发者进行自有服务与Azure AD统一认证的集成&#xff0c;以及阐述云端用户数据同步的实现方案。本文除了会介绍必要的概念、原理、流程外&#xff0c;还会包含Azure门户设置说明&#xff0c;以及使用Fiddler进行全流程的实操验证&#xff0c;同…

学习笔记-数据结构-线性表(2024-04-17)

设计一个算法实现在单链表中删除值相同的多余节点的算法。 设计思想&#xff1a;双指针 变量说明&#xff1a; head - 参数变量&#xff0c;代表链表的头节点。在调用DelSameNum函数时&#xff0c;需要传递链表的头节点的地址给这个参数&#xff0c;从而允许函数对链表进行操作…

21.leetcode---用栈列实现队列(Java版)

题目链接: https://leetcode.cn/problems/implement-queue-using-stacks/ 题解: 代码: 测试:

C# WPF布局

布局&#xff1a; 1、Grid: <Window x:Class"WpfApp2.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d"http://schemas.microsoft.com…

SpringBoot---------Lombook

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具&#xff0c;通过使用对应的注解&#xff0c;可以在编译源码的时候生成对应的方法&#xff0c;也就是简化咱们之前pojo&#xff0c;实体类里面臃肿的get/set有参无参。 首先查看一…

LiveNVR监控流媒体Onvif/RTSP常见问题-如何对比监控摄像头延时视频流延时支持webrtc视频流播放超低延时播放

LiveNVR如何对比监控摄像头延时视频流延时支持webrtc视频流播放超低延时播放 1、问题场景2、如何对比延时&#xff1f;3、WEBRTC延时对比4、LiveNVR支持WEBRTC输出5、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、问题场景 需要低延时的视频流监控播放&#xff0c;之前可以用rtmp…

react合成事件与原生事件区别备忘

朋友问起在做一个下拉框组件&#xff0c;下拉的点击事件是用react的onClick触发&#xff0c;外部区域点击关闭则用dom的原生点击事件绑定&#xff0c;问题是下拉的点击事件无法阻止冒泡到dom的原生事件。 我说&#xff0c;react的合成事件 和 原生事件是不一样的&#xff0c;尽…

前端表单input的简单使用

1.代码结构介绍 2.实战效果

【嵌入式linux】Ubuntu 修改用户名

第一次打开Ubuntu时不小心把初始用户名“siriusiot”写成“siriousiot”&#xff08;多了一个o&#xff09; 。作为技术人&#xff0c;我们要保持严谨&#xff0c;我们要纠正过来&#xff08;其实就是单词拼错了怕被笑话&#xff09;。 打开终端&#xff0c;输入&#xff1a; …

TypeError: Cannot read property ‘forceUpdate‘ of undefined

今天给大家展示一个 我自己在写项目的时候遇到的保存 其实很简单就是没有修改addid 把自己的小程序appid填上去就好了 学习记录笔记&#xff01;

【高校科研前沿】东北地理所孙敬轩博士为一作在《中国科学:地球科学(中英文版)》发文:气候变化下东北地区农业绿水安全风险评估

目录 01 文章简介 02 研究内容 03 文章引用 04 期刊简介 01 文章简介 论文名称&#xff1a;Risk assessment of agricultural green water security in Northeast China under climate change&#xff08;气候变化下东北地区农业绿水安全风险评估&#xff09; 第一作者及…

实验 3--表的基本操作与数据查询

文章目录 实验 3--表的基本操作与数据查询4.3.1 实验目的4.3.2 实验准备实验内容1.在 SSMS 中向数据库 YGKQ 中的表插入数据。2.使用 T-SQL 语句向 YGKQ 中的表插入数据。3.在 SSMS 中删除数据库 YGKQ 中的表数据。4.使用 T-SQL 语句删除数据库 YGKQ中的表数据。5.在 SSMS 中修…

ChatGPT基础(三) 让ChatGPT回答质量提高十倍的提示词模版

上篇文章介绍了ChatGPT使用提示词的一些方法策略和如何优化我们的提示词。这里呢&#xff0c;我介绍一下参照大佬的方法总结的一个提示词的一个用法的模板。使用这个模板之后&#xff0c;我们的提问和获得答案的效率和收集素材的完整度能提高很多。 首先我介绍一下这个模板&am…

NUMA测试

一、开启NUMA 添加链接描述 二、绑定核数 nerdctl update --cpuset-cpus0-7 3aecd121924a enable_thread_pool true thread_pool_attr 512, 2, (allbind)

day48_servlet

今日内容 周一 0 复习上周 1 本周计划 2 MVC和三层架构 3 Login案例 4 请求转发 5 重定向 0 复习昨日 1 jdbc五大步骤 注册驱动(反射)获得连接获得执行sql对象执行SQL关流 2 什么是SQL注入 通过SQL关键词,在执行SQL时出现不正常的情况 3 PreparedStatement怎么使用,有什么特点 …