Docker是什么

docker是什么

docker本质

Docker 本质其实是 LXC 之类的增强版,它本身不是容器,而是容器的易用工具。容

器是 linux 内核中的技术,Docker 只是把这种技术在使用上简易普及了。Docker 在早

期的版本其核心就是 LXC 的二次封装发行版。Docker 作为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。Docker 是基于 Go 语言实现的一个开源项目,它的主要目标是"Build,Ship andRun Any APP,Anywhere",即通过对组件的封装、分发、部署、运行等生命周期的管理,使得用户的应用及其运行环境能够做到"一次封装,到处运行"。早期 Docker 利用 LXC 做容器管理引擎,但是在创建容器时,不再使用模板去安装生成,而是通过镜像技术(把一个操作系统用户空间所需要使用到的组件事先编排好,并整体打包成一个文件,image 文件),镜像文件集中放在一个仓库中。当需要创建容器时,Docker 调用 LXC 的工具 lxc-create,但不再通过 lxc 的模板去安装,而是连接到镜像服务器上下载匹配的镜像文件,而后基于镜像启动容器。所以,Docker 极大的简化了容器的使用难度。以后我们创建启动容器,只需要一个命令,docker-run,docker-stop 就可以启动停止一个容器了。

docker和虚拟机的区别

  1. 从磁盘占用上来说,虚拟机所需要的磁盘空间会更大,而docker需要的磁盘空间会更少,因为对于虚拟机来说,它是从物理层开始往上进行模拟的,每个虚拟机都有自己的操作系统,而对于docker来说则不是,docker只是将程序和运行环境打包在了一起,多个docker之间共享宿主机的操作系统;

  2. 从cpu和内存占用上来说,虚拟操作系统非常占用cpu和内存,需要通过虚拟层调用,占用率高,而对于docker来说,docker引擎占用资源极低,直接作用于宿主机操作系统,占用率会比较少;

  3. 从启动速度上来说,虚拟机的启动速度比较慢,因为虚拟机需要启动自己的虚拟操作系统,而docker不用;

  4. 从应用部署上来说,虚拟机需要手动进行部署,速度慢,而docker可以体系化部署,可以自动化,速度较快;

  5. 从隔离性上来说,虚拟机的隔离性更高,docker隔离性较低;

  6. 从封装性上来说,虚拟机是打包整个操作系统,而docker是打包项目代码和依赖信息,docker会更加轻量化;
    docker为什么比虚拟机资源利用率高,启动块?

  7. 一个虚拟机在启动的时候,徐要重新加载操作系统,而容器的启动不需要,因此docker在启动上比虚拟机更快;

  8. 容器通过docker engine创建出来,之后,容器可以自己于宿主机OS进行交互;而对于虚拟机来说,虚拟机传递出来的信息需要通过Hypervisor层才能于宿主机的操作系统进行交互,因此在cpu和内存利用率上,docker会比虚拟机更加高效;

docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。

Docker 容器通过 Docker 镜像来创建。

  1. registry
    docker 仓库,用来保存镜像文件的,可以理解为版本控制中的代码仓库(gitHub、gitee等)。docker这个仓库是由docker官方自己提供的,名字叫docker Hub;
  2. Docker daemon
    Docker daemon 是服务器组件,是docker最核心的后台进程,我们也把它称为守护进程,docker容器的创建就是由这个组件来完成的,当然,如果你的服务器山想要运行docker容器,该组件也是必不可少的;
  3. docker client
    docker 客户端可以通过命令行或者其它工具使用docker API来与docker daemon进行交互(类比于mysql);
  4. docker Host
    一个物理的或虚拟的机器,就是docker daemon进程跑起来的机器;
  5. docker image
    就是用来创建docker容器的模板,容器于镜像的关系,类比于类和对象的区别;
  6. docker 容器
    基于某个docker镜像跑起来的docker 容器;
    现在我们用直白的语言来理解以上过程:

你现在想要去买一个小米15的手机,于是走向了离你最近的小米之家,然后问了问店员:"你们这里有没有小米15?",无非就得到两种回答,第一种:"有的先生,你需要什么配置和颜色?";第二种:"不好意思先生,我们当前门店没有现货,如果您确实需要的话,我可以去市里面的仓库中给你调集一台过来";对于第一种情况,我们只需要详细告诉店员我们需要的配置和颜色,即可把小米15拿回家了,而对于第二种情况的话,则需要等待店员去仓库调取,我们才能拿到,在仓库中,又分为许许多多的小仓库,每个小仓库放的都是不同型号的手机,比如有些小仓库放的是小米14、有的是小米13等等,店员只需要找到小米15的小仓库,然后根据用户要求的配置和颜色,拿取对应的手机即可,在此之后,我们终于拿到了心心念念的小米15了,然后欣喜的开机,开始了与小米15没羞没臊的生活了...
在上面这个故事中,用户就类似我docker架构中的客户端,小米之家就类似于docker中的服务端,存放手机的仓库,就类似于docker Hub,未开机的手机类似于镜像,开机运行的手机,类似于容器;

Docker Registry

镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。

镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一

个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。
这里的镜像仓库,就类似于上文故事中的,存放小米手机的仓库;Repository就类似于仓库中的一个个小仓库;而在小仓库都存放着型号相同的手机,但是配置不一致,Repository也是类似,存放的都是功能相同的镜像,但是每个镜像之间版本不同;

一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。

镜像仓库分类

按是否对外开放划分,也是研发人员常说的:

  1. 公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,
    供大家访问使用

  2. 私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。
    按供应商和面向群体划分:

  3. sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用.

  4. mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用.

  5. vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像Google 和 Redhat 提供了镜像仓库服务.

  6. private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用.

镜像仓库工作机制

镜像仓库使用流程:

  1. 创建仓库,在docker Hub、阿里云、腾讯云上创建即可;
  2. docker login 仓库地址: 使用该命令登录你的仓库,如果不指定仓库地址,那么默认登录的是docker Hub仓库;
  3. docker pull 如果你是从docker 官方仓库拉取,那么其实与前面的docker login关系不大;如果你是从自己的仓库拉取,那么前面的docker login关系就比较大,如果拉取的自己的仓库是开源的,那么docker pull可以直接拉取成功;但如果是私有的,那么你直接拉取会失败,要想成功,必须使用docker login登录;
  4. docker push :推送镜像,无论我们要推送的仓库是开源的还是私有的,都必须登录才可以推送;
    实际研发中镜像仓库如何使用:

Docker Registry 中的镜像通常由开发人员制作,而后推送至"公共"或"私有"Registry 上

保存,供其他人员使用,例如"部署"到生产环境;

docker Hub

docker Hub是什么?

Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。

具有以下功能:

  1. 个人可以注册私有仓库,能够发布自己的镜像

  2. 提供镜像检索能力

  3. 提供海量官方和认证组织的镜像

  4. 从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub

  5. 支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL。 )
    docker Hub功能浏览:

  6. 镜像搜索

  7. 镜像tag查找:

    国内镜像源:

一般来说docker pull从官方仓库拉取镜像会比较慢,毕竟docker hub的服务器在国外麻,为了解决这个问题,我们一般会为docker damemon配置,国内镜像仓库,就是让我们每次docker pull的时候,docker daemon都能先去镜像仓库中看看,实在没找到再去docker Hub仓库查找,这样会加快我们镜像拉取的速率;
如何配置国内镜像源:

  1. 打开/etc/docker/daemon.json文件,没有就创建一个;
  2. 在这个文件中写入:
    {
    "registry-mirrors":["https://zue8awxu.mirror.aliyuncs.com"]
    }
  3. 注意如果最外层以及你给有了配置,不要直接覆盖,而是将下面的内容添加,然
    后确保 json 的格式正确
  4. 重新加载配置,并重新启动docker

systemctl daemon-reload //加载配置

systemctl restart docker //重启docker服务

相关推荐
❀͜͡傀儡师1 小时前
docker一键部署HFish蜜罐
运维·docker·容器
DO_Community1 小时前
DigitalOcean容器注册表推出多注册表支持功能
服务器·数据库·docker·kubernetes
dnpao2 小时前
linux onlyoffice服务向docker容器中添加中文字体
linux·运维·docker
回忆是昨天里的海2 小时前
k8s暴露服务-Ingress环境部署
云原生·容器·kubernetes
tzhou644523 小时前
Kubernetes Pod 入门
云原生·容器·kubernetes
java_logo3 小时前
Dify 开源 LLM 应用开发平台企业级 Docker Compose 部署手册
docker·容器·开源·dify部署·dify部署文档·dify部署方案·dify部署教程
jarreyer4 小时前
【docker的gpu加速相关问题解决记录】
运维·docker·容器
韭菜钟4 小时前
制作自定义Docker镜像并部署使用
运维·docker·容器
椰汁菠萝4 小时前
docker部署gitlab
docker·容器·gitlab
知识分享小能手4 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中安装 Docker 容器 —— 知识点详解(26)
学习·ubuntu·docker