常用工具之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

常用命令

shell 复制代码
docker run
docker exec
docker build

配合compose的有
docker compose up/down //可选参数  -d,后台运行,--build 重新构建
相关推荐
huangyuchi.3 分钟前
【Linux系统】初见线程,概念与控制
linux·运维·服务器·页表·linux线程概念·linux线程控制·分页式存储管理
葡萄城技术团队3 分钟前
SpreadJS:让多源数据筛选排序如 Excel 般便捷高效
运维·服务器·excel
三十_6 分钟前
【Docker】学习 Docker 的过程中,我是这样把镜像越做越小的
前端·后端·docker
宇钶宇夕16 分钟前
S7-200 SMART 实战:自动包装控制系统的指令应用拆解
运维·自动化
半桔43 分钟前
【Linux手册】信号量与建造者模式:以 PV 操作保证并发安全,分步组装构建复杂对象
linux·运维·安全·建造者模式
雷工笔记1 小时前
Linux系统学习之注意事项及命令基本格式
linux·运维·服务器
m0_464608261 小时前
Nginx SSL/TLS 配置
运维·nginx·ssl
胡萝卜的兔1 小时前
ssh域名过期,消息推送到企业微信
运维·ssh·企业微信
Lin_Aries_04211 小时前
使用阿里云容器镜像服务 ACR
linux·阿里云·docker·云原生·centos·云计算
TG_yunshuguoji1 小时前
阿里云国际代理:稳定、高效、便捷的数据库服务-云数据库RDS
运维·服务器·数据库·阿里云·云计算