音视频开发之旅(78)- Docker使用和交互流程

目录

1.Docker是什么

2.DockerFile的使用

3.常用命令

4.Docker和Web服务的交互流程

5.资料

一、Docker是什么

Docker通过轻量级的容器化技术,使得应用程序及其依赖可以打包在一个可移植的容器中运行,确保应用在不同环境下的一致性和效率。

1.1 核心组件

1.1.1 Docker引擎(Docker Engine)

图片

Docker引擎是一个C/S架构,包括三个主要组件:

  • 服务器:一个长时间运行的守护进程。

  • REST API:指定服务器可以使用的接口,让程序可以控制和与Docker守护进程交互。

  • 命令行接口(CLI)客户端:docker命令,用于用户通过命令行或终端与Docker守护进程通信。

1.1.2 镜像( Images)

Docker镜像是一个轻量级、可执行的独立软件包,包含运行应用所需的所有内容:代码、运行时环境、库、环境变量和配置文件。镜像在构建时被定义,且永远不会变化。

1.1.3 容器 (Containers)

容器是镜像的运行实例。当用户使用Docker运行镜像时,Docker会在镜像的顶部添加一个可写文件层创建容器。同一镜像可以运行多个容器,容器可以被开始、停止、移动和删除。

1.1.4 镜像仓库 (Docker Hub)

Docker Hub是一个云服务,用于寻找和发布Docker镜像。它提供了一个中央资源库,用户可以从中拉取镜像到本地环境,也可以将自己构建的镜像推送到Docker Hub上分享给其他人。

1.2  基本使用流程

1.2.1 安装Docker

Docker支持多种平台,包括Windows、macOS和Linux。可以从Docker官网下载对应平台的安装包进行安装。

1.2.2 获取Docker镜像

可以从Docker Hub等仓库拉取已有的镜像到本地,也可以通过Dockerfile定义一个新的镜像并构建它。

拉取镜像的命令如下:

docker pull [IMAGE_NAME]

1.2.3 构建镜像

docker build -t [IMAGE_NAME]:[TAG] .

1.2.4 运行容器

运行容器的命令如下:

docker run -d -p [HOST_PORT]:[CONTAINER_PORT] --name [CONTAINER_NAME] [IMAGE_NAME]

1.2.5 管理Docker容器

可以查看、停止、重新启动和删除容器。

查看正在运行的容器:docker ps停止容器:docker stop [CONTAINER_NAME]

整体流程如如下

图片

二、DockerFile的使用

Dockerfile是一个文本文件,包含了一系列的指令和参数,用于自动构建Docker镜像。

当我们执行docker build命令时,Docker会逐行读取执行Dockerfile中的指令,来创建一个新的镜像。

示例和详细说明如下

​​​​​​​​​​​​​​

#From指令,指定基础镜像,所有Dockerfile都必须以FROM指令开始FROM python:3.8-slim-buster
#设置工作目录WORKDIR /app
#将当前目录内容复制到位于容器/app的工作目录中COPY . /app
#ADD指令和COPY类似,但它还可以从URL下载文件和解压压缩文件#ADD . /app   
#在当前镜像层上执行命令RUN pip install --no-cache-dir -r requirements.txt# 或者使用apt install安装软件包RUN apt install ffmpeg
# 声明容器运行时监听的端口。实际运行时需要通过-p参数指定端口映射。EXPOSE 8080
#定义环境变量ENV NAME World
#在容器启动时运行app.pyCMD ["python", "app.py"]

三、Docker常用命令

3.1 基础命令

启动:systemctl start docker

关闭:systemctl stop docker

重启:systemctl restart docker

设置随服务自启动:systemctl enable docker

查看运行状态: systemctl status docker

3.2 镜像命令

docker search 镜像id或name:在Docker Hub仓库中镜像

docker pull 镜像id或name:从仓库中下载镜像

docker push dockerHub仓库地址:tagName :推送到镜像仓库

docker tag 本地镜像 dockerHub仓库地址:tagName:打标签

docker images:查看镜像

docker rmi 镜像id或name:删除本地镜像

docker build -t 镜像name .:构建镜像

docker run --name ${container_name} --rm  -v /data1:/data1 -p 8080:8080 -itd ${images_name} bash : 启动镜像

3.3 容器命令

docker ps:查看运行中的容器

docker ps -a :查看所有容器,包括未运行

docker stop 容器id或name:停止容器

docker kill 容器id:强制停止容器

docker start 容器id或name:启动已停止的容器

docker top 容器id:查看容器里的进程

docker exec -it 容器id /bin/bash:进入容器

exit:退出容器

docker rm 容器id或name:删除已停止的容器

docker rm -f 容器id:删除正在运行的容器

四、Docker和web服务之间的交互流程

基础架构流程

假设我们有一个Web服务,它负责接收客户端的请求,维护待处理的任务队列。Docker容器中运行的脚本(以下简称为Docker脚本)定期从Web服务获取任务(Task),执行相应的处理,并将结果通过HTTP请求回传给Web服务。这样的架构在处理大量并发任务、实现负载均衡等场景下非常有效

4.1 任务分发流程

  1. 客户端请求:客户端通过HTTP请求向Web服务提交一个新的任务,包括任务类型、所需数据等信息。

  2. 任务队列维护:Web服务接收到任务请求后,根据任务类型和内容将任务存入相应的队列中。这个队列可以是简单的内存队列,也可以是Redis等高效的消息队列系统。

  3. 任务获取:Docker脚本定时向Web服务发起请求,查询是否有待处理的任务。这通常通过一个特定的API接口实现,Docker脚本发送请求并携带自身的标识信息,以便Web服务根据Docker脚本的能力或任务处理优先级分配任务。

  4. 任务派发:Web服务根据Docker脚本的请求返回待处理的任务信息,Docker脚本接收到任务信息后,根据任务类型和所需操作调用相应的处理脚本或程序。

4.2 任务处理与结果回传

  1. 任务处理:Docker脚本根据任务信息执行具体的处理逻辑。这可能涉及数据处理、模型训练、文件操作等多种类型的任务。

  2. 结果生成:任务完成后,Docker脚本生成相应的结果数据。这些结果可能是处理后的数据文件、处理状态、日志信息等。

  3. 结果回传:Docker脚本通过HTTP请求将处理结果回传给Web服务。通过另一个API接口实现,请求中包含任务标识(Task ID)、处理结果等信息。

  4. 结果处理:Web服务接收到处理结果后,更新任务状态,并根据需要将结果数据存储或通知给客户端。

安全和性能

  1. 安全性:在Docker脚本与Web服务之间的交互中,确保数据传输的安全性非常重要。使用HTTPS、验证令牌(Token)等机制可以保护数据不被截获或篡改。

  2. 容错与重试机制:网络请求可能因为各种原因失败。实现适当的重试逻辑,以及在Docker脚本和Web服务中处理异常情况,可以提高系统的稳定性和鲁棒性。

  3. 性能与扩展性:随着任务数量的增加,确保系统的响应速度和处理能力成为关键。使用负载均衡、容器编排(如Kubernetes)等技术可以有效地扩展系统。

五、资料

1. docker介绍及常用命令大全(超详细)https://blog.csdn.net/qq_25919879/article/details/127054566

2. B站看过最全最详细的【Docker】https://www.bilibili.com/video/BV1cV4y1V7Sq?p=8&vd_source=03a763fa6cf49b01f658f32592f5a6f3

感谢你的阅读

接下来我们继续学习输出AIGC相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流

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

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

相关文章

中断(NVIC)的使用--EXTI--TIM

目录 中断是什么 轮询 中断 中断调用情况 中断的分类 内部中断(TIM、UART等) tim.c tim.h 外部中断EXTI exti.c exti.h 中断是什么 在处理事件的时候有两种方式:轮询和中断。 轮询 顾名思义,就是每轮都询问一次。比如…

结构体类型详细讲解(附带枚举,联合)

前言: 如果你还对结构体不是很了解,那么本篇文章将会从 为什么存在结构体,结构体的优点,结构体的定义,结构体的使用与结构体的大小依次介绍,同样会附带枚举与联合体 目录 为什么存在结构体: 结构…

毕业设计:日志记录编写(3/17起更新中)

目录 3/171.配置阿里云python加速镜像:2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标:构建基本的python环境:运行爬虫程序 1.配置阿里云pytho…

【C++】如何用一个哈希表同时封装出unordered_set与unordered_map

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.哈希桶源码 2.哈希…

(三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练

这里写目录标题 一、colmap解算数据放入高斯1. 将稀疏重建的文件放入高斯2. 将稠密重建的文件放入高斯 二、vkitti数据放入高斯 一、colmap解算数据放入高斯 运行Colmap.bat文件之后,进行稀疏重建和稠密重建之后可以得到如下文件结构。 1. 将稀疏重建的文件放入高…

windows10 WSL启动Ubuntu虚拟机,安装DolphinScheduler

文章目录 1. 启动WSL与虚拟机2. 安装Docker与DolphinScheduler容器 1. 启动WSL与虚拟机 使用管理员权限运行命令: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux重启后即可创建虚拟机 在Microsoft Store中搜索Ubuntu&…

Wear-Any-Way——可控虚拟试衣一键试穿,可自定义穿着方式

概述 Wear-Any-Way 是阿里巴巴最新推出的虚拟试衣技术,它不仅可以让用户在虚拟环境中试穿衣服,还可以根据需要自定义衣服的样式,比如卷起袖子、打开或拖动外套等。这种技术的引入旨在帮助消费者更好地了解衣服在不同穿着方式下的效果&#x…

一个python实现的kline-chart图表程序(二)

前面一中简单介绍了kline-chart的图表程序,实际上这个程序最主要的功能不是显示K线,因为显示K线的程序太多了,没必要专门重写,这个程序最主要的功能是根据需要显示包含K线在内的各种指标,自己算的指标,或是…

plSql 大批量数据导入到表中

主要2种思路,一为insert插入sql,二是借助plsql提供的工具 insert语句odbc importer/导入器 insert语句 把要插入的数据转为insert语句,直接复制到plsql的sql窗口,运行即可;或者在命令行窗口回车键,选择要执…

使用 RunwayML 对图像进行 Camera 操作

RunwayML 是一個功能強大的平台,可以讓您使用 AI 和机器学习来增强您的图像和视频。 它提供一系列预训练模型,可用于各种任务,包括图像编辑、风格化和特效。 在本文中,我们将介绍如何使用 RunwayML 对图像进行 Camera 操作。我们…

[AIGC] SQL中的数据添加和操作:数据类型介绍

SQL(结构化查询语言)作为一种强大的数据库查询和操作工具,它能够完成从简单查询到复杂数据操作的各种任务。在这篇文章中,我们主要讨论如何在SQL中添加(插入)数据,以及在数据操作过程中&#xf…

数据结构(五)——树森林

5.4 树和森林 5.4.1 树的存储结构 树的存储1:双亲表示法 用数组顺序存储各结点,每个结点中保存数据元素、指向双亲结点(父结点)的“指针” #define MAX_TREE_SIZE 100// 树的结点 typedef struct{ElemType data;int parent; }PTNode;// 树的类型 type…

学习或复习电路的game推荐:nandgame(NAND与非门游戏)、Turing_Complete(图灵完备)

https://www.nandgame.com/ 免费 https://store.steampowered.com/app/1444480/Turing_Complete/ 收费,70元。据说可以导出 Verilog !

关于安卓调用文件浏览器(一)打开并复制

背景 最近在做一个硬件产品,安卓应用开发。PM抽风,要求从app打开文件浏览器,跳转到指定目录,然后可以实现文件复制粘贴操作。 思考 从应用开发的角度看,从app打开系统文件浏览器并且选择文件,这是很常见…

馆室一体化查档平台制度有哪些

馆室一体化查档平台制度是指图书馆或档案馆在数字化和信息化的背景下,建立起的集查阅、借阅、咨询、文献传递等多项功能于一体的平台制度。下面是一些常见的馆室一体化查档平台制度: 1. 馆藏管理制度:包括图书和档案的采购、编目、分类、整理…

那些王道书里的题目-----计算机网络篇

注:仅记录个人认为有启发的题目 p155 34.下列四个地址块中,与地址块 172.16.166.192/26 不重叠,且与172.16.166.192/26聚合后的地址块不会引入多余地址的是() A.172.16.166.192/27 B.172.16.166.128/26 …

day06vue2学习

day06 路由的封装抽离 问题:所有的路由配置都堆在main.js中不太合适么?不好,会加大代码的复杂度 目标:将路由模块抽离出来。好处:差分模块,利于维护。 大致的做法就是,将路由相关的东西都提…

codeTop102:二叉树的层序遍历

前言 在已知BFS的方式后,知道每次从队列中取一个节点,就要将这个节点的所有子节点按照顺序放入队列。 难点在于怎么确定将同一层的节点放在一个数组里面的输出,也就是输出一个二维数组? 解决方法: 每次while循环将队列上轮放入的…

蓝桥集训之矩形牛棚

蓝桥集训之矩形牛棚 核心思想&#xff1a;单调队列 模板&#xff1a;Acwing.131.直方图矩形面积首先遍历所有下界 然后确定以该下界为底的直方图 求最大矩形 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 30…

Java学习day2

命名规则 在JAVA中&#xff0c;公共类的明朝必须与包含该类的源文件的文件名向匹配&#xff0c;即 这两个名称要一致 变量类型 与c/c基本一致 需要注意的是&#xff0c;long类型的数据在后面需要加上l或L&#xff08;建议加L&#xff0c;l可能会被误判&#xff09;&#xff…