音视频开发之旅(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相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流

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

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

相关文章

Affiliate Stores: 建立营销联盟商店的详细教程- US Domain Center主机

第一步:了解营销联盟商店 营销联盟商店是一种电子商务模式,您可以在其中通过推广其他企业的产品或服务来赚取佣金。您在自己的网站上展示其他企业的产品,并在买家购买时获得佣金。通过 WooCommerce 平台,您可以轻松创建一个营销联…

PHP姓名快速匿名化工具(重组脱敏)

PHP姓名重组工具(脱敏/匿名化工具) 将excel数据姓名列粘贴提交&#xff0c;得到随机姓随机中间字随机尾字的重组姓名 那些年自用瞎搞的代码&#xff0c;今日整理成网页交提交得到结果的交互功能分享。 <?php //PHP姓名重组工具(脱敏/匿名化工具) //将excel数据姓名列粘贴…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

Vue3 中应该使用 Ref 还是 Reactive?

一、引言 在Vue 3中&#xff0c;构建响应式数据结构是构建用户界面和交互体验的核心部分。而在创建这些响应式数据时&#xff0c;我们有两个主要工具&#xff1a;reactive和ref。选择使用哪一个&#xff0c;实际上取决于你的数据结构和访问需求。 reactive主要用于处理复杂的数…

Matlab|【免费】智能配电网的双时间尺度随机优化调度

目录 1 主要内容 基础模型 2 部分代码 3 部分程序结果 4 下载链接 1 主要内容 该程序为文章《Two-Timescale Stochastic Dispatch of Smart Distribution Grids》的源代码&#xff0c;主要做的是主动配电网的双时间尺度随机优化调度&#xff0c;该模型考虑配电网的高效和安…

【小白入门篇1】GPT到底是怎样练成?

由于具有代表性的OpenAI公司GPT模型并没有开源&#xff0c;所以本章节是参考一些开源和现有课程&#xff08;李宏毅&#xff09;讲解ChatGPT原理。本章没有涉及到很多数学运算&#xff0c;比较适合小白了解GPT到底是怎么练成。GPT的三个英文字母分别代表Generative(生成式)&…

了解交互设计:定义、解析及案例演示!

交互设计作为现代设计领域的一个重要分支&#xff0c;对用户体验和产品的成功至关重要。然而&#xff0c;许多人并不了解交互设计的定义和实践方法。本文将深入分析交互设计的概念和重要性&#xff0c;分享精彩的案例&#xff0c;推荐有用的交互设计工具&#xff0c;帮助您创造…

业务服务:redisson

文章目录 前言一、配置1. 添加依赖2. 配置文件/类3. 注入redission3. 封装工具类 二、应用1. RedisUtils工具类的基本使用 三、队列1. 工具类2. 普通队列3. 有界队列&#xff08;限制数据量&#xff09;4. 延迟队列&#xff08;延迟获取数据&#xff09;5. 优先队列&#xff08…

【Java多线程(1)】创建线程的几种方式和Thread类及其常见方法

目录 一、Java创建线程的方式 1. 通过继承 Thread 类实现多线程 2. 通过实现 Runnable 接口实现多线程 3. 其他变形 二、Thread类及常见方法 1. Thread类的常见构造方法 2. Thread类的几个常见属性 2.1 getName() 2.2 setDaemon() & isDaemon() 2.3 isAlive() …

HTML5+CSS3+移动web——CSS进阶

系列文章目录 HTML5CSS3移动web——HTML 基础-CSDN博客https://blog.csdn.net/ymxk2876721452/article/details/136070953?spm1001.2014.3001.5502HTML5CSS3移动web——列表、表格、表单-CSDN博客https://blog.csdn.net/ymxk2876721452/article/details/136221443?spm1001.20…

复习Day3

1231. 航班时间 - AcWing题库 #include<bits/stdc.h> using namespace std; int getTime(){//得到时间 int h1,m1,s1,h2,m2,s2,d0;scanf("%d:%d:%d %d:%d:%d (%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);//补匹配直接跳过 int timed*24*3…

【Django开发】0到1美多商城项目md教程第3篇:用户注册业务实现,1. 用户注册页面绑定Vue数据【附代码文档】

美多商城完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;欢迎来到美多商城&#xff01;&#xff0c;项目准备。展示用户注册页面&#xff0c;创建用户模块子应用。用户注册业务实现&#xff0c;用户注册前端逻辑。图形验证码&#xff0c;图形验证码接口设…

《自动机理论、语言和计算导论》阅读笔记:p1-p4

《自动机理论、语言和计算导论》学习第1天&#xff0c;p1-p4&#xff0c;总计4页。这只是个人的学习记录&#xff0c;因为很多东西不懂&#xff0c;难免存在理解错误的地方。 一、技术总结 1.有限自动机(finite automata)示例 1.software for checking digital circuits。 …

IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS (T-ITS) 投稿记录,欢迎大家评论~

投稿整个流程时间点&#xff1a;Submitted: 17 October 2023 Awaiting Reviewer Assignment: From 18 October 2023 to 6 November 2023 Under review: From 6 November 2023 to 30 November 2023 Awaiting reviewer scores: From 1 December 2023 to 13 January 2024 Aw…

概率论与数理统计-条件概率题目2-3次事件依次发生问题

题目&#xff1a;设某光学仪器厂制造的透镜,第一次落下时打破的概率为1/2,若第一次落下未打破,第二次落下打破的概率为7/10,若前两次落下未打破,第三次落下打破的概率为9/10.试求透镜落下三次而未打破的概率&#xff1f; 解答&#xff1a; 设Ai表示透镜第i次下落打破&#xff…

【微服务】以模块化单体架构开发微服务应用

目录 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战我们知道,起初,单体应用有显著的优势:它们更容易开发和部署。从开发人员的角度来看,这种简单性是有益的。一切都是集中的,可以快速更新任何部分的业务逻辑并立即看到结果。这种开…

Redis八股

持久化 RDB AOF 数据过期策略 惰性删除 定期删除 数据淘汰策略 分布式锁 集群模型 主从同步原理 哨兵模式 分片集群 网络模型

哪本书最了解孩子?跟《米小圈上学记》一起做孩子的“引路人”!

孩子是发展中的人&#xff0c;需要家长的陪伴&#xff0c;孩子的身心发展是有规侓的&#xff0c;是处于发展过程中的人。我们要学会尊重孩子的发展&#xff0c;从兴趣出发&#xff0c;关注孩子的成长。但是&#xff0c;家长不可能无时无刻都能陪在孩子身边&#xff0c;他需要一…

day06vue2学习

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

使用docker-compose搭建wordpress博客

1、从远程仓库拉取worldpress镜像到本地 2、新建一个项目&#xff0c;然后在新建的项目目录里面新建一个docker-compose.yml模版文件。 3、编写docker-compose.yml文件 4、docker-compose up 运行项目。 5、在浏览器测试 使用docker-compose搭建wordpress博客实验成功。