Docker
一、什么是Docker
Docker使用Go语言进行开发实现,基于Linux内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
runc 是一个 Linux 命令行工具,用于根据 OCI容器运行时规范 创建和运行容器。
containerd 是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。
二、Docker与传统虚拟化方式的区别
1.区别
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。
2.特点与优势
- 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。
- Docker 容器应用直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。
- Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。
- 可以通过定制应用镜像来实现持续集成、持续交付、部署。
- 迁移、维护、扩展更轻松。
三、基本概念
一、镜像(Image)
1.概念
操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。
2.分层存储
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。
所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。分层存储的特征使得镜像的复用、定制变的更为容易。
二、容器(Container)
1.概念与实质
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
2.容器存储层
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
三、仓库(Repository)
Docker Registry
Docker Registry是用于在其它服务器上集中存储、分发镜像的服务。
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,16.04。我们可以通过 ubuntu:16.04来具体指定所需版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。
四、Windows11使用WSL2搭建Docker环境
1.什么是WSL2
WSL2(Windows Subsystem for Linux 2)是微软为Windows 10和Windows 11操作系统提供的一个功能,使用户能够在Windows上运行Linux的完整内核,而不需要虚拟机或双启动。
2.安装过程
步骤一:启用WSL2
- 启用“适用于Linux的Windows子系统”和“虚拟机平台”功能:1. 搜索启用或关闭windows功能,打开。2. 勾选“适用于Linux的Windows子系统”和“虚拟机平台”,然后点击“确定”并重启电脑。
- 设置WSL2为默认版本: 打开PowerShell(以管理员身份运行)。输入以下命令并回车:
wsl --set-default-version 2
步骤二:安装Linux发行版
# 查看可安装的linux分发版本
wsl --list --online
# 安装Ubuntu-22.04
wsl --install Ubuntu-22.04
# 然后在username输入用户名,在password输入用户密码
步骤三:安装Docker并配置在WSL2中的运行
- 安装Docker Desktop for Windows: 1. 从Docker官网下载Docker Desktop安装包并安装,下一步下一步……完成。2. 安装后,从 Windows 开始菜单启动 Docker Desktop,注册账号,登录。3. 然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“change setting”。
- 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。
- 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
步骤四:验证
- cmd运行:docker --version 来显示版本和内部版本号。
- cmd运行:docker run hello-world 运行简单的内置 Docker 映像,测试安装是否正常工作
版权归原作者 放放-yy 所有, 如有侵权,请联系我们删除。