当前位置: 首页 > news >正文

Docker(二)

Docker的本质

当我们通过本地开发镜像打包到LXC中的时候,就会发现总是缺少一些必要的内容,比如JDK或者其他的文件什么的。此时镜像打包技术就非常关键。将操作系统,运行环境,应用程序/配置文件等都打包进去。

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

LXC创建的时候是基于LXC模板进行创建的,docker发明了镜像,镜像存储在docker自己的仓库中,想要这个镜像的时候,我们只要安装就可以了。

当前docker引擎使用的是RUNC。

                      传统虚拟机Docker 容器
磁盘占用几个 GB 到几十个 GB 左右几十 MB 到几百 MB 左右
CPU 内存占用虚拟操作系统非常占用 CPU 和内存,需要通过虚拟层调用占用率高Docker 引擎占用资源极低,直接作用于硬件资源占用少
启动速度(从开机到运行项目)几分钟(从开启容器到运行项目)几秒
安装管理需要专门的运维技术安装、管理方便

docker容器共享虚拟机内核,就可以进行内部的资源利用。

容器不经过虚拟化层直接与底层进行交互,容器没有guest os。

docker相对于虚拟机的优势

docker 有比虚拟机更少的抽象层(直接操作物理机的硬件资源,虚拟机需要虚拟化层)。docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 cpu、内存利用率上 docker 将会在效率上有明显的优势。docker 利用的是宿主机的内核,而不需要 Guest OS,节省了 Guest OS 占用的资源。

docker 不需要 Guest OS,创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引导、加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS,返回新建过程是分钟级别的。而新建一个 docker 容器只需要几秒钟。

Docker版本

Docker 发展过程中衍生了以下版本,目前我们学习和使用提到的版本是 docker - ce。
lxc:上文中提到,lxc 是最早的 linux 容器技术,早期版本的 docker 直接使用 lxc 来实现容器的底层功能。虽然使用者相对较少,但 lxc 项目仍在持续开发演进中。
libcontainer:docker 从 0.9 版本开始自行开发了 libcontainer 模块来作为 lxc 的替代品实现容器底层特性,并在 1.10 版本彻底去除了 lxc。在 1.11 版本拆分出 runc 后,libcontainer 也随之成为了 的核心功能模块,runc 后续变成了容器标准。
moby:moby 是 docker 公司发起的开源项目,其中最主要的部分就是同名组件 moby,事实上这个 moby 就是 dockerd 目前使用的开源项目名称,docker 项目中的 engine(dockerd)仓库现在就是从 moby 仓库 fork 而来的,使用 containerd 作为运行时标准。https://mobyproject.org/
docker - ce:docker 的开源版本,CE 指 Community Edition。docker - ce 中的组件来自于 moby、containerd 等其他项目。https://www.docker.com/pricing/
docker - ee:docker 的收费版本,EE 指 Enterprise Edition。其基础组件来源和 docker - ce 是一样的,但附加了一些其他的组件和功能。
https://www.docker.com/pricing/

Docker架构

当我们在Client上面运行命令的时候,host接到client的命令,然后运行该命令,如果想要拉取镜像的话,发现host中没有该镜像,就从远程registry中拉取该镜像,然后安装到本地,即可使用。

Docker安装

ubuntu安装docker

首先通过命令行查看该操作系统的版本。

cat /etc/*release*

安装之前要通过docker查看该服务器上面是否已经安装了docker,如果已经安装了就要卸载。

#卸载docker命令1 apt-get remove docker docker-engine docker.io containerd runc#卸载docker命令2 sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y

并且还要删除对应的目录,实际上还需要卸载一些配置文件。但是这个配置文件可以放在后面再卸载。

Shell执行安装逻辑如下
#curl 命令安装
sudo apt install curl -y
# 创建 gpg key 目录
sudo mkdir -m 0755 -p /etc/apt/keyrings
# 下载 gpg key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
#最后执行命令
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
apt update
#安装开始
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y#最后设置开机启动
systemctl enable docker

ubuntu安装docker实战经验

docker有个全球最大的镜像仓库,但是为了国内能够更快访问docker,我们就创建出docker的国内镜像,能够更快访问。

进入daemon.json文件,并且修改镜像源为如下:

systemctl daemon-reload
systemctl restart docker

当docker安装很多镜像很容易导致磁盘爆满,所以我们要进行迁移。先创建目录。

 

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],"data-root": "/data/var/lib/docker"
}

最后我们需要进行加载目录,并且重启docker。此时就已经在ubuntu上面安装完docker。

Docker镜像仓库

这里包括了元数据和blob,元数据就描述了这个镜像的架构,占的多少磁盘空间等信息。

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

镜像仓库管理多个 Repository,Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag) 来区分。

镜像仓库的分类

按是否对外开放划分,也是研发人员常说的
(1)公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,供大家访问使用
(2)私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。
按供应商和面向群体划分

  • (1) sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用
  • (2) mirror (镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用
  • (3) vendor (供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像 Google 和 Redhat 提供了镜像仓库服务
  • (4) private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用

常用镜像仓库

docker hub的地址为Docker Hub Container Image Library | App Containerizationhttps://hub.docker.com/

我们也可以搭建自己的私服仓库,比如Nexus,或者Harbor,docker registry(不推荐)。

可以通过该命令进行查看当前本地镜像的详细信息。  

http://www.dtcms.com/a/414820.html

相关文章:

  • 基于 PyTorch 完全从零手搓 GPT 混合专家 (MOE) 对话模型
  • 【企业架构】TOGAF架构标准规范-数据架构
  • 大疆无人机图传原理:从镜头到屏幕的实时传输解码之旅
  • Linux安全机制--应用层安全机制
  • 中国通信工业协会区块链专委会三届四次主任委员会议召开
  • 【记录】Ubuntu24.04安装Nvidia驱动
  • 做调查的网站知乎自学软件网站开发
  • 承包工地的网站微信插件图片转换wordpress
  • 基于PyTorch的CIFAR-10图像分类项目总结(2)
  • 网站建设绩效考评php笑话网站源码
  • 梁头网站建设wordpress手机模板插件
  • 浏览器发起http,到得到网页的整个过程
  • IntelliJ IDEA 制表符输出对不齐问题解决
  • 基于RAG的法律条文智能助手(方案篇)-实现与部署-微调与部署
  • Android-MVX技术总结
  • 辽宁学校网站建设请解释网站开发的主要流程
  • 【系统架构设计(39)】数据库控制技术
  • 深入浅出DBC:偏移量、精度、CRC与VCU数据流全解析
  • docker-私有仓库harbor
  • 网站如何做淘客肇庆市seo网络推广
  • Pycharm2025.2终端出现PS,无法切换到当前虚拟环境
  • 机器人动力学模型的建立方法有哪些 ?
  • 微信网站用什么软件做做网站的动态图片
  • PySide与Ollama连接交互
  • 如何问豆包数学题?
  • GitHub 热榜项目 - 日榜(2025-09-27)
  • 利用万网做网站wordpress tag固定
  • html做网站经验技巧微信推广软件
  • C++篇 String实现避坑指南:搞定构造,拷贝与析构,增删查改,流提取流插入与比对大小 一文全解
  • 介绍 一下 OpenMMLab