赞
踩
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的缓存,分为两部分:一个是由上到下的,一旦未发生修改,在build时不会更新,另一个是docker提供的multi-stage选项。
这个的好处自然不言而喻,确保了文档更新,缺点也是因为这点,微笑的改动也会导致更新。
真正的缓存可控,理论上可以永久缓存,build变为可选项。
可以通过写法,实现选择性的资源更新,非常好用!(当然,没忘的话)
1、轻量级,完全可以实现容器内只存在携带需要的内容,克服了传统虚拟机体积庞大的缺点。
2、操作简单,端口映射、文件共享的配置上,都相对虚拟机更为便捷。
本质上,还是与宿主机共享内核。尽管可在容器里通过 Mount Namespace 单独挂载其他不同版本的os文件,比如 CentOS 或者 Ubuntu,但这并不能改变共享宿主机内核的事实!
所以不可能在Windows宿主机运行Linux容器或在低版本Linux宿主机运行高版本Linux容器。
而拥有硬件虚拟化技术和独立Guest OS的虚拟机,比如Microsoft的云计算平台Azure,就是运行于Windows服务器集群,但可在其上面创建各种Linux虚拟机
最典型的比如时间。
若你的容器中的程序使用settimeofday(2)系统调用修改时间,整个宿主机的时间都会被随之修改,这并不符合用户预期。
而相比于在虚拟机里可自己随便折腾,在容器里部署应用时,“什么能做,什么不能做”,用户都必须考虑(有兴趣的可见相关参考,感觉这篇写的还行)。
相关参考:https://cloud.tencent.com/developer/article/1790199
docker run
docker exec
docker build
配合compose的有
docker compose up/down //可选参数 -d,后台运行,--build 重新构建
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。