Docker
文章平均质量分 95
如同 Docker 的 Logo 一样,Docker 的思想来源于集装箱。集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来,并且各种各样的货物被集装箱标准化,集装箱与集装箱之间互不影响。
G皮T
计算机科学与技术本科,计算机技术硕士,现任职于某互联网公司,担任测试开发工程师。CSDN云原生领域优质创作者、博客专家。书籍《大数据测试开发工程师的第一本书》正在积极撰写中,敬请期待。微信公众号:大数据与AI实验室。《Java 百“练”成钢》连载中,欢迎关注!
展开
-
【Docker】Docker 详解(一):从虚拟机到容器
容器化就是应用程序级别的虚拟化技术。容器提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法。容器共享一个内核(操作系统),它安装在硬件上。原创 2023-08-09 23:41:07 · 1783 阅读 · 3 评论 -
【Docker】Docker 详解(二):Docker 架构及工作原理
Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。原创 2023-08-10 23:28:01 · 1437 阅读 · 4 评论 -
【Docker】Docker 详解(三):Docker 镜像管理基础
当需要修改一个文件时,AUFS 创建该文件的一个副本,使用 CoW 将文件从只读层复制到可写层进行修改,结果也保存在可写层。Device Mapper 驱动会先在块设备上创建一个资源池,然后在资源池上创建一个带有文件系统的基本设备,所有镜像都是这个基本设备的快照,而容器则是镜像的快照。后支持的,提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。在创建镜像时,我们不能关闭容器,必须使其处于运行状态,所以我们必须要另起一个终端,然后执行。原创 2023-08-11 23:56:17 · 1833 阅读 · 6 评论 -
【云原生】Docker 容器及其常用命令
容器技术的生态系统自下而上分别覆盖了 IaaS 层和 PaaS 层所涉及的各类问题,包括资源调度、编排、部署、监控、配置管理、存储网络管理、安全、容器化应用支撑平台等。除了基于容器技术解决构建分布式平台无法回避的经典问题,容器技术主要带来了以下几点好处。原创 2023-09-25 23:07:31 · 811 阅读 · 0 评论 -
【云原生】Docker 实践(一):在 Docker 中部署第一个应用
在成功安装 Docker 后,就可以通过镜像来创建容器,从而运用。本文将演示如何在 Docker 中,通过使用 Nginx 镜像来部署第一个应用,并在浏览器访问它。原创 2024-04-26 23:58:41 · 2363 阅读 · 3 评论 -
【云原生】Docker 实践(二):什么是 Docker 的镜像
Docker 的镜像是一个模板,或者说其是一个只读文件。在该模板中包含应用和应用运行时所需要的依赖环境。Docker 的镜像采用的是分层的文件系统,每一次对镜像的修改将以读写层的形式增加到原来的只读文件的模板上。原创 2024-04-27 17:40:57 · 1370 阅读 · 0 评论 -
【云原生】Docker 实践(三):使用 Dockerfile 文件构建镜像
Dockerfile 文件可以使用 docker build 命令进行编译。在编译过程中,每一条指令的内容描述了该层应如何进行构建。当我们需要指定自己额外的需求时,只需在 Dockerfile 文件的基础上添加或者修改指令,重新生成新的镜像即可。原创 2024-04-27 19:12:41 · 1999 阅读 · 3 评论 -
【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例
下面将从一个 CentOS 的基础镜像开始,安装 JDK 和 Tomcat 环境,并完成一个 Web 应用的部署。整个过程通过一个 Dockerfile 文件来描述。通过 Dockerfile 文件来构建一个镜像,并创建一个容器来运行 Web 应用。原创 2024-05-01 00:21:06 · 1069 阅读 · 2 评论 -
【云原生】Docker 实践(五):搭建私有镜像 Harbor
Harbor是由 VMware 公司开发并开源的企业级的 Docker 镜像仓库的管理项目,它包括镜像的权限管理(RBAC)、目录访问(LDAP)、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。原创 2024-05-03 10:22:48 · 1832 阅读 · 6 评论 -
【云原生】Docker 的网络通信
Docker 的容器运行在宿主机的虚拟机上。这些虚拟机彼此独立,彼此之间没有任何接口,即容器彼此之间是逻辑隔离的。那么,如何实现容器的相互通信呢?容器又如何访问外部的网络呢?外部的网络如何才能访问部署在容器内的应用呢?本篇博客将带领大家了解这些问题。原创 2024-05-04 18:47:55 · 2655 阅读 · 1 评论 -
【云原生】搭建你的第一个 Docker 应用栈
从 Docker 集群的搭建过程不难看出,通过 Docker 提供的虚拟化方式,可以快速建立起一套可复用的开发环境,以镜像的形式将开发环境分发给所有开发成员,达到了简化开发环境搭建过程的目的。Docker 的优点在于可以简化 CI(持续集成)和 CD(持续交付)的构建流程,让开发者集中精力在应用开发上,同时运维和测试也可以并行进行,并保持整个开发、测试、发布和运维的一体化。原创 2023-10-06 11:19:55 · 1547 阅读 · 4 评论 -
【Docker】资源隔离(一):进行 namespace API 操作的 4 种方式
当谈论 Docker 时,常常会聊到 Docker 的实现方式。很多开发者都知道,Docker 容器本质上是宿主机上的进程(容器所在的运行环境统一称为宿主机)。Docker 通过 namespace 实现了资源隔离,通过 cgroups 实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。但当更进一步深入 namespace 和 cgroups 等技术细节时,大部分开发者都会感到茫然无措。原创 2023-10-11 23:33:22 · 1414 阅读 · 2 评论 -
【Docker】资源隔离(二):UTS namespace & IPC namespace
UTS(UNIX Time-sharing System),UTS namespace 提供了主机名和域名的隔离,这样每个 Docker 容器就可以拥有独立的主机名和域名了,在网络上可以被视作一个独立的节点,而非宿主机上的一个进程。Docker 中,每个镜像基本都以自身所提供的服务名称来命名镜像的 hostname,且不会对宿主机产生任何影响,其原理就是利用了 UTS namespace。原创 2023-10-12 20:47:10 · 796 阅读 · 0 评论 -
【Docker】资源隔离(三):PID namespace
为什么创建其他 namespace 时 unshare() 和 setns() 会直接进入新的 namespace,而唯独 PID namespace 例外呢?因为调用 getpid() 函数得到的 PID 是根据调用者所在的 PID namespace 而决定返回哪个 PID,进入新的 PID namespace 会导致 PID 产生变化。而对用户态的程序和库函数来说,它们都认为进程的 PID 是一个常量,PID 的变化会引起这些进程崩溃。原创 2023-10-13 23:56:19 · 795 阅读 · 1 评论 -
【Docker】资源隔离(四):Mount namespace & Network namespace
mount namespace 通过隔离文件系统挂载点对隔离文件系统提供支持,它是历史上第一个 Linux namespace,所以标识位比较特殊,就是 CLONE_NEWNS。隔离后,不同 mount namespace 中的文件结构发生变化也互不影响。可以通过 /proc/[pid]/mounts 查看到所有挂载在当前 namespace 中的文件系统,还可以通过 /proc/[pid]/mountstats 看到 mount namespace 中文件设备的统计信息,包括挂载文件的名字、文件系统类型、原创 2023-10-14 23:20:55 · 1041 阅读 · 1 评论 -
【Docker】资源隔离(五):User namespaces
user namespace 主要隔离了安全相关的标识符(identifier)和属性(attribute),包括用户 ID、用户组 ID、root 目录、key(指密钥)以及特殊权限。通俗地讲,一个普通用户的进程通过 clone() 创建的新进程在新 user namespace 中可以拥有不同的用户和用户组。这意味着一个进程在容器外属于一个没有特权的普通用户,但是它创建的容器进程却属于拥有所有权限的超级用户,这个技术为容器提供了极大的自由。原创 2023-10-15 21:15:30 · 635 阅读 · 0 评论 -
【Docker】资源限制(一):概念、作用、术语
cgroups 是 Linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。原创 2023-10-28 22:20:44 · 546 阅读 · 1 评论 -
【Docker】资源限制(二):组织结构与基本规则、子系统简介
系统中的多个 cgroup 构成的层级并非单根结构,可以允许存在多个。如果任务模型是由 init 作为根节点构成的一棵树,那么系统中的多个 cgroup 则是由多个层级构成的森林。这样做的目的很好理解,如果只有一个层级,那么所有的任务都将被迫绑定其上的所有子系统,这会给某些任务造成不必要的限制。在 Docker 中,每个子系统独自构成一个层级,这样做非常易于管理。原创 2023-10-29 13:39:02 · 339 阅读 · 0 评论 -
【Docker】资源限制(三):实现方式及工作原理简介
在对 cgroups 规则和子系统有了一定了解以后,下面简单介绍操作系统内核级别上 cgroups 的工作原理,希望能有助于大家理解 cgroups 如何对 Docker 容器中的进程产生作用。cgroups 的实现本质上是给任务挂上钩子,当任务运行的过程中涉及某种资源时,就会触发钩子上所附带的子系统进行检测,根据资源类别的不同,使用对应的技术进行资源限制和优先级分配。原创 2023-10-29 14:48:31 · 702 阅读 · 2 评论