Docker 从入门到实践系列一 - 什么是Docker,一个星期4轮面试终拿下offer

本文介绍了Docker中的核心概念,包括容器(运行实例)、仓库(镜像存储)和镜像(只读模板),以及Docker的三个关键动作:构建、运输和运行。此外,还涉及了底层原理,如Linux内核特性namespace、cgroups和unionFS在Docker中的应用。
摘要由CSDN通过智能技术生成
  • 容器(Container)

  • 仓库(Repository)

理解了这三个概念,就理解了 Docker 的整个生命周期。

Docker 三个关键动作:Build、Ship、 Run。

  • Build(构建镜像):镜像就像是集装箱包括文件以及运行环境等资源

  • Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样

  • Run (运行镜像):正在运行的镜像就是一个容器,容器就是运行程序的地方

以上内容部分引自:《Docker 技术入门与实战》

docker 镜像(image)

  • 一个只读模板,可以用来创建容器,一个镜像可以创建多个容器

  • Docker 提供了一个很简单的机制来创建和更新现有的镜像,甚至可以直接从其他人那里获取做好的镜像直接使用

docker 容器(container)

  • 容器是从镜像创建的运行实例,也就是镜像启动后的一个实例称为容器,是独立运行的一个或一组应用。

  • docker 利用容器来运行应用,他可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。

  • 可以把容器看做是一个简易版的 Linux(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

docker 仓库(resoisitory)

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。

当然,用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

底层原理


底层原理

docker 底层使用了一些 linux 内核的特性,大概有 namespacecgroupsufs

namespace

docker 使用 linux namespace 构建隔离的环境,它由以下 namespace 组成

  • pid:隔离进程

  • net:隔离网络

  • ipc:隔离 IPC

  • mnt:隔离文件系统挂载

  • uts:隔离hostname

  • user: 隔离uid/gid

control groups

也叫 cgroups,限制资源配额,比如某个容器只能使用 100M 内存

union file systems

UnionFS 是一种分层、轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加。docker 的镜像与容器就是分层存储,可用的存储引擎有 aufsoverlay 等。

docker 的镜像和容器都使用了 unionFS 做分层存储,镜像作为只读层是共享的,而容器在镜像之上附加了一层可写层,最大程度地减少了空间的浪费。

关于分层存储的详细内容可以查看官方文档 docker: About storage drivers

Docker 引擎

Docker 引擎是一个 Client-Server 应用程序,有以下主要组件:

  1. Server 是一个长期运行的程序,成为守护进程(Docker 命令)

  2. REST API,可以用来与守护进程进行通信并指示其操作的接口

  3. 命令行界面(CLI)客户端(Docker 命令)

在这里插入图片描述

命令行界面使用 API 通过脚本或直接在命令行界面通过命令与 Docker 守护进程交互。

Docker 架构

docker 的架构图如下

在这里插入图片描述

从图中可以看出几个组成部分

  • docker client:即 docker 命令行工具

  • docker host:宿主机,docker daemon 的运行环境服务器

  • docker daemondocker 的守护进程,docker client 通过命令行与 docker daemon 交互

  • container:最小型的一个操作系统环境,可以对各种服务以及应用容器化

  • image:镜像,可以理解为一个容器的模板配置,通过一个镜像可以启动多个容器

  • registry:镜像仓库,存储大量镜像,可以从镜像仓库拉取和推送镜像

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

[外链图片转存中…(img-t6ZcjNmm-1710961395033)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值