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 项目仍在持续开发演进中。
libcontaine r: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(不推荐)。

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

相关推荐
阳懿3 小时前
windows系统电脑远程登录ubuntu系统电脑
linux·运维·ubuntu
“愿你如星辰如月”3 小时前
Linux C缓冲区机制全解析
linux·运维·服务器·c语言·vscode
黄焖鸡能干四碗3 小时前
企业信息化建设总体规划设计方案
大数据·运维·数据库·人工智能·web安全
云边有个稻草人3 小时前
基于KingbaseES集群管理实战:从部署运维到高可用架构深度解析
运维·国产数据库·kingbasees部署工具
2401_865854884 小时前
搭建个人博客:云服务器IP如何使用
运维·服务器·tcp/ip
探云抛雾؁ۣۖ4 小时前
SSH安全 白名单配置限制实战:AllowUsers 限制指定 IP 登录
linux·运维·服务器
Yyyy4824 小时前
LVS TUN隧道模式
运维·网络·lvs
凉茶社4 小时前
前端容器化配置注入全攻略(docker/k8s) 🐳🚀
运维·docker·容器
深盾科技5 小时前
了解一下Ubuntu上搭建的ROS环境
linux·运维·ubuntu