常用工具之docker

官方文档

什么是docker

Docker提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许您在给定的主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此您不需要依赖于主机上安装的内容。您可以在工作时共享容器,并确保与您共享的每个人都获得以相同方式工作的相同容器。
Docker提供工具和平台来管理容器的生命周期:
1、使用容器开发应用程序及其支持组件。
2、容器成为分发和测试应用程序的单元。
3、准备好后,将应用程序部署到生产环境中,作为容器或编排好的服务。无论您的生产环境是本地数据中心、云提供商还是两者的混合,这都是一样的。

隔离和安全的实现

Docker的隔离机制是借助Linux 内核技术Namespace实现的,凭借着Linux Namespaces机制提供的一种资源隔离方案。PID,IPC,Network等系统资源不再仅仅作为全局性的,而是可以属于某个特定的Namespace(可以对应用户权限理解)。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的Linux系统。

基于此,docker实现了一系列的分离:
The pid namespace:管理 PID namespace (PID: Process ID)
The net namespace: 管理网络namespace(NET: Networking)
The ipc namespace: 管理进程间通信命名空间(IPC: InterProcess Communication)
The mnt namespace:管理文件系统挂载点命名空间(MNT: Mount).
The uts namespace: Unix 时间系统隔离(UTS: Unix Timesharing
System).。

docker缓存

缓存是我们使用docker的一大便利,适当的使用缓存,可以提升构建效率。docker的缓存,分为两部分:一个是由上到下的,一旦未发生修改,在build时不会更新,另一个是docker提供的multi-stage选项。

由上到下的缓存

这个的好处自然不言而喻,确保了文档更新,缺点也是因为这点,微笑的改动也会导致更新。

multi-stage的缓存设置

真正的缓存可控,理论上可以永久缓存,build变为可选项。
可以通过写法,实现选择性的资源更新,非常好用!(当然,没忘的话)

docker的优缺点

优点(谁在夸我!)

1、轻量级,完全可以实现容器内只存在携带需要的内容,克服了传统虚拟机体积庞大的缺点。
2、操作简单,端口映射、文件共享的配置上,都相对虚拟机更为便捷。

缺点

隔离不彻底,

本质上,还是与宿主机共享内核。尽管可在容器里通过 Mount Namespace 单独挂载其他不同版本的os文件,比如 CentOS 或者 Ubuntu,但这并不能改变共享宿主机内核的事实!
所以不可能在Windows宿主机运行Linux容器或在低版本Linux宿主机运行高版本Linux容器。
而拥有硬件虚拟化技术和独立Guest OS的虚拟机,比如Microsoft的云计算平台Azure,就是运行于Windows服务器集群,但可在其上面创建各种Linux虚拟机

Linux内核很多资源无法被Namespace

最典型的比如时间。
若你的容器中的程序使用settimeofday(2)系统调用修改时间,整个宿主机的时间都会被随之修改,这并不符合用户预期。
而相比于在虚拟机里可自己随便折腾,在容器里部署应用时,“什么能做,什么不能做”,用户都必须考虑(有兴趣的可见相关参考,感觉这篇写的还行)。

相关参考:https://cloud.tencent.com/developer/article/1790199

常用命令

docker ps
docker image
docker run
docker exec
docker build

配合compose的有
docker compose up/down //可选参数  -d,后台运行,--build 重新构建

dockerfile实例

FROM python:3.11.7-alpine AS build

# RUN apt update && apt install -y librdkafka-dev

# RUN pip install confluent_kafka
COPY ./requirements.txt ./requirements.txt
RUN pip install httpx
RUN pip install redis
RUN pip install psycopg2-binary==2.9.9
RUN pip install -r requirements.txt


FROM build AS deploy

WORKDIR /app

COPY . .



需要帮助欢迎留言🤔

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

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

相关文章

【Android】Activity task和Instrumentation杂谈

文章目录 activity taskInstrumentation机制参考 Android不仅可以装载众多的系统组件,还可以将它们跨进程组成ActivityTask,这个特性使得每个应用都不是孤立的。 activity task 从数据结构角度看,Task有先后之分,源码实现上采取了…

类的加载,反射和注解详解

文章目录 类的加载概述类加载器作用分类获取类加载器的方式 双亲委派机制3种加载器的关系工作机制 类加载器的应用 反射概述关键获取类对象获取构造器对象获取方法对象获取成员变量对象作用 注解概述作用自定义注解格式属性类型 元注解常见的元注解 注解解析概述方法技巧 类的加…

Qt学习记录(C++)——Day 3

目录 一、封装自定义控件 1.添加界面类 2.添加控件 3.提升封装的控件 4.实现功能 5.提供接口 6.测试接口 二、鼠标事件 前言: 1.鼠标进入事件 enterEvent 2.鼠标离开事件 leaveEvent 3.鼠标按下事件 mousePressEvent 4.鼠标释放事件 mouseReleaseEv…

知识跟踪模型GraphKT

1 知识跟踪Knowledge Tracing的概念 知识跟踪可以用来解决自适应学习问题。如何通过与教学材料的在线互动来有效地跟踪学生的学习进展?知识跟踪可用于量化学生的知识状态,即对教材所涉及的技能掌握水平。用于评估和模拟学生随着时间推移对技能的认知掌握…

不借助第三方工具打包QT程序

准备工作: 项目/可执行文件名:QTAppName 打包项目存放的文件名:pack(这个文件名无所谓) 脚本名: copylib.sh(类似ldd命令):用于将.so库文件的依赖项复制并放入自动生…

docker拉取镜像速度慢

解决办法是配置阿里云镜像加速 在docker desktop的docker engine里添加 "registry-mirrors": ["https://owzy8hoh.mirror.aliyuncs.com"] 修改以后重启docker 参考: 【docker】Windows10系统下安装并配置阿里云镜像加速_docker desktop 配置…

Steam平台FPS游戏节来袭,速来免费领取头像、边框和贴纸

首先,活动时间从4月16日持续到4月23日,想领取免费物品的小伙伴们要抓紧时间啦!领取链接就在传送门等你哦。《战地》和《使命召唤》系列没有打折哦,有点遗憾。不过,别灰心,这次活动还是很给力的哦&#xff0…

Hyperledger Fabric

一.Hyperledger Fabric介绍 Hyperledger区块链全家桶 Hyperledger Fabric技术特性 资产 — 资产定义使得几乎任何具有货币价值的东西都可以在网络上交 换,包括从食品到古董汽车再到货币期货。链码 — 链码执行与交易排序的分离,限制了跨节点类型所需的…

Hibernate框架

什么是Hibernate 我们可以从度娘上摘抄这样有关Hibernate的介绍: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO(简单java对象)与数据库表建立映射关系,是一个全自动的orm框架&…

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点: 自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。 自动化流程&a…

LeetCode 80—— 删除有序数组中的重复项 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 让 index指向删除重复元素后数组的新长度;让 st_idx 指向重复元素的起始位置,而 i 指向重复元素的结束位置,duplicate_num代表重复元素的个数;一段重复元素结束后&am…

入侵检测数据预处理 特征工程 面临的问题

数据预处理 对于分类任务来说,由于原始数据可能存在异常、缺失值以及不同特征的取值范围差 异大等问题,对机器学习会产生影响,因此,在进行机器学习模型训练之前,需要先对数据 进行预处理。数据预处理的主要过程包括数据清洗、去量纲、离散化等。 1.数据清洗 对采集到的数据进行…

如何制作文字gif图?一键快速生成gif闪图

大家在聊天的过程中少不了使用gif表情包,但是大家知道这些gif动图怎么制作的吗?下面就来跟大家分享一下gif动图是如何制作的吧!其实,非常的简单无需下载软件只需要使用gif图片制作(https://www.gif5.net/)工…

QT creator 代码中有中文,提示常量中有换行符解决方案

QT creator 代码中有中文,提示常量中有换行符解决方案 参考视频问题问题解决 参考 感谢感谢,非常感谢,有你,让Qt不再困难,困扰我四年的问题解决了!!! https://blog.csdn.net/m0_45866718/article/details/112389513 视频 https://www.bilibili.com/video/BV1Fp4…

GitHub提交PR

本教程只做开源代码库Github工程提交pr的教程,不做其他的深入的讲解 Github和Gitlab的操作类似,只不过Github叫PR,GitLab叫MR,基本上做法是一致的 以开源项目QuickChat为例 https://github.com/Binx98/QuickChat https://github…

CAN网络管理(网络节点)

什么是CAN的网络节点 网络节点是指连接到CAN总线上的设备或模块,每个网络节点都具有唯一的标识符,称为节点ID,用于在CAN总线上进行通信和识别。 如何判断CAN的网络节点是多少 可以根据DBC来定义查看, 以ADCU为例,域控作为主节点,一般外部的像雷达,camera的数据都是向…

Yolo-world使用

1、安装 python pip install ultralytics 前往官网下载模型:https://docs.ultralytics.com/models/yolo-world/#key-features 我这里使用yolov8s-world.pt举例 最简单的使用示例 if __name__ __main__:model YOLO(model/yolov8s-world.pt)results model.pre…

JCVI-筛选blast最佳结果(生物信息学工具-015)

通常,大家会问我们经过了NR注释,SwissProt注释,那么如何进行,如何挑选最佳比对结果? 同理,存在一个问题,如何挑选最佳的blast比对结果?什么事最优的同源序列? 唐海宝老…

DBUtils工具类的使用

1、DBUtils是什么 为了更加简单地使用JDBC,Apache组织提供了一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响数据库访问性能的情况下简化JDBC的编码工作量。DBUtils工具要有2个作用。 写数据&am…

力扣周赛392复盘

3105. 最长的严格递增或递减子数组 题目 给你一个整数数组 nums 。 返回数组 nums 中 严格递增 或 严格递减 的最长非空子数组的长度。 思考: 返回什么:返回最长非空子数组的长度。return max(decs_len,incs_len); 但实际上我们只需要用一个变量ans就…