1 引言
本章内容:为什么要使用容器、容器有什么作用、在哪里可以使用容器。
1.1 糟糕的过去
应用程序是企业的核心。大多数应用程序都在服务器上运行。过去我们只能在每台服务器上运行应用程序。Windows和Linux不具备在同一台服务器上安全可靠地运行多个应用程序的技术。
每当企业需要新的应用程序时,IT部门就会购买新的服务器。大多数情况下没有人知道新应用程序的性能要求,迫使IT部门在选择购买服务器的型号和大小时进行猜测。
结果IT部门只能做它唯一能做的事情–购买价格不菲的大型快速服务器。毕竟,包括企业在内的任何人都不希望服务器无法执行交易,从而可能失去客户和收入。因此IT部门大肆采购,服务器利用率只有5-10%。这是对公司资本和环境资源的严重浪费!
1.2 VMware
VMware公司给了世界一份礼物–虚拟机(VM virtual machine)。我们终于有了一种技术,可以在一台服务器上安全地运行多个业务应用程序。
IT部门不再需要在每次业务需要新应用程序时采购全新的超大型服务器。通常情况下,他们可以在现有的服务器上运行新的应用程序,而这些服务器还有剩余的容量。
虚拟机虽好,却远非完美!
每个虚拟机都需要自己专用的操作系统(OS),每个操作系统都会消耗CPU、内存和其他资源,而这些资源本可以用来支持更多的应用程序。每个操作系统都需要打补丁和监控。在某些情况下,每个操作系统都需要许可证。所有这些都造成了时间和资源的浪费。
虚拟机启动速度慢,可移植性差–在管理程序和云平台之间迁移和移动虚拟机工作负载比想象中要难得多。
1.3 容器
长期以来,大型网络公司(如谷歌)一直在使用容器技术来解决虚拟机模式的缺点。
容器类似于虚拟机,单容器不需要自己的完整操作系统。一台主机上的所有容器都共享主机的操作系统。这就释放了大量的系统资源,如CPU、内存和存储。它还降低了潜在的许可成本,减少了操作系统修补和其他维护的开销。最终结果:节省时间、资源和资金。
容器还具有快速启动和超便携的特点。将容器工作负载从笔记本电脑转移到云,然后再转移到数据中心的虚拟机或裸机上,都是轻而易举的事。
1.4 Linux容器
现代容器起源于Linux世界,是许多人长期大量工作的产物。仅举一例,Google LLC就为Linux内核贡献了许多与容器相关的技术。没有这些技术和其他贡献,就不会有今天的现代容器。
容器大规模发展的一些主要技术包括:内核命名空间(kernel namespace)、控制组(control group)、能力(capability),当然还有Docker。
尽管如此,容器仍然很复杂,超出了大多数组织的能力范围。直到Docker的出现,容器才被有效地民主化,并为大众所接受。
在Docker和现代容器出现之前,有许多与容器类似的操作系统虚拟化技术。有些甚至可以追溯到大型机上的System/360。BSD Jails和 Solaris Zones是其他一些著名的Unix类型容器技术。
1.4 Docker运行平台
为了将Docker和容器技术引入Windows平台,微软付出了巨大的努力。
Windows桌面和服务器平台同时支持以下两种技术:
Windows容器
Linux容器
Windows容器可运行Windows应用程序,这些应用程序需要带 Windows内核的主机系统。Windows 10和 Windows 11以及所有现代版本的 Windows Server都原生支持 Windows容器。
任何运行WSL 2(Windows Subsystem for Linux)的Windows主机也可以运行Linux容器。这使得 Windows 10和11成为开发和测试Windows和Linux容器的绝佳平台。
但绝大多数容器是Linux容器。这是因为Linux容器更小、更快,而且大多数工具都适用于Linux。
本书本版中的所有示例都是Linux容器。
目前还没有Mac容器。不过,你可以使用Docker Desktop在Mac上运行Linux容器。它的工作原理是在Mac上的轻量级Linux虚拟机中无缝运行容器。这在开发者中非常流行,他们可以在 Mac上轻松开发和测试Linux容器。
1.4 Kubernetes
Kubernetes是谷歌推出的一个开源项目,它已迅速成为容器化应用程序的实际协调器。这只是Kubernetes是部署和管理容器化应用程序最常用工具的一种说法。
Kubernetes曾经使用Docker作为默认的容器运行时–这是一种底层技术,用于拉取映像并启动和停止容器。不过,现代的Kubernetes集群有可插拔的容器运行时接口(CRI ontainer runtime interface),可以轻松更换不同的容器运行时。在撰写本文时,大多数新的 Kubernetes集群都使用containerd。我们将在后面介绍更多关于containerd的内容,但现在只需知道containerd是Docker的一部分,它负责执行启动和停止容器的底层任务。
1.5 小结
我们曾经生活在这样一个世界里:每当企业需要一个新的应用程序时,我们就必须购买一台全新的服务器。VMware的出现让我们能够从新的和现有的IT资产中获取更多价值。尽管VMware和虚拟机模式很好,但它并不完美。继VMware和虚拟机管理程序取得成功之后,又出现了一种更新、更高效、更便携的虚拟化技术–容器。但容器最初很难实现,只有在拥有Linux内核工程师的网络巨头的数据中心才能看到。Docker的出现,让容器变得简单,并为大众所接受。
2 Docker
2.1 Docker简介
Docker是在Linux和Windows上运行的软件。它可以创建、管理甚至协调容器。该软件目前由Moby开源项目的各种工具构建而成。Docker, Inc.是创建该技术的公司,并将继续创建技术和解决方案,使您笔记本电脑上的代码更容易在云中运行。
2.2 Docker公司
Docker,Inc.是一家位于旧金山的技术公司,由法国出生的美国开发者和企业家所罗门-海克斯(SolomonHykes)创立。所罗门目前已离职。
该公司最初是一家名为dotCloud的平台即服务(PaaS platform as a service)提供商。dotCloud平台基于Linux容器构建。为了帮助创建和管理这些容器,他们开发了一个内部工具,并最终将其命名为 “Docker”。
“Docker”一词来自英国,意思是码头工人–从船上装卸货物的人。
2013年,他们摆脱了苦苦挣扎的PaaS业务,将公司重新命名为”Docker公司”,并专注于将Docker和容器推向世界。他们在这方面取得了巨大成功。
在本书中,当提及 Docker 公司时,我们将使用 “Docker, Inc. 所有其他使用 “Docker “一词的地方都是指技术。
2.2 Docker技术
在把Docker称作一种技术时有三部分:
运行时
守护进程(又称引擎)
协调器
运行时在最底层运行,负责启动和停止容器(包括构建命名空间和cgroups等所有操作系统构造)。Docker采用分层运行时架构,高层和低层运行时协同工作。
底层运行时称为runc,是开放容器倡议(OCI Open Containers Initiative)运行时规范的参考实现。它的工作是与底层操作系统对接,并启动和停止容器。Docker节点上的每个容器都是由runc 实例创建和启动的。
更高级别的运行时称为containerd。containerd读作”container-dee”,是一个已毕业的CNCF项目,被Docker和Kubernetes使用。
典型的Docker安装有一个长期运行的containerd进程,指示runc启动和停止容器。
Docker守护进程(dockerd)位于containerd 之上,执行更高级别的任务,如公开Docker API、管理映像、管理卷、管理网络等…
Docker守护进程的一项主要工作是提供易于使用的标准接口,对较低级别的任务进行抽象。
Docker本身还支持管理运行Docker的节点集群。这些集群被称为 “群”(swarms),原生技术被称为”Docker Swarm”。Docker Swarm易于使用,许多公司都在实际生产中使用它。它的安装和管理比Kubernetes简单得多,但缺乏Kubernetes的许多高级功能和生态系统。
2.2 开放容器计划(OCI Open Containers Initiative )
OCI是一个管理委员会,负责对容器基础设施的底层基本组件进行标准化。它尤其关注镜像格式和容器运行时。
从第一天起Docker的使用就疯狂增长。越来越多的人以越来越多的方式使用它来处理越来越多的事情。因此,有些人难免会感到沮丧。这很正常,也很健康。
根据奈杰尔的说法,这段历史的简述是,一家名为CoreOS的公司(被红帽收购,后被IBM收购)不喜欢Docker做某些事情的方式。因此,他们创建了名为appc的开放标准,定义了映像格式和容器运行时等内容。他们还创建了名为 rkt(读作 “rocket”)的标准实现。
后面共同组建了OCI – 管理容器标准的轻量级敏捷委员会。
OCI已经发布了如下规范(标准):
image规范
运行时规范
分发规范
OCI规范对Docker核心产品的架构和设计产生了重大影响。所有现代版本的Docker和Docker Hub都实施了OCI规范。
OCI由Linux基金会主持组织。
2.3 小结
在本章中我们了解了Docker公司和Docker技术。
Docker公司是一家位于旧金山的技术公司,其目标是改变我们做软件的方式。可以说,他们是现代容器革命的先行者和推动者。
Docker技术专注于运行和管理应用程序容器。它可以在Linux和Windows上运行,几乎可以安装到任何地方,是目前Kubernetes使用的最流行的容器运行时。
开放容器倡议(OCI)在规范运行时、映像格式和注册表等底层容器技术方面发挥了重要作用。
3 安装Docker
安装Docker的方法和地点有很多。有Windows、Mac和Linux。你可以在云端、办公场所和笔记本电脑上安装。还有手动安装、脚本安装、向导安装……
本章主要内容:
Docker桌面(Windows & MacOS)
Multipass
服务器安装(Linux)
玩转Docker
3.1 Docker桌面
Docker Desktop是Docker公司推出的一款桌面应用程序,可让用户轻松使用容器。它包括Docker引擎、流畅的用户界面和带有市场的扩展系统。这些扩展为Docker Desktop添加了一些非常有用的功能,例如扫描镜像以查找漏洞,以及轻松管理镜像和磁盘空间。
Docker Desktop用于教育目的是免费的,但如果你开始在工作中使用它,而且你的公司有250多名员工或年收入超过1千万美元,你就必须付费。
它可在64位版本的Windows 10、Windows 11、MacOS 和Linux上运行。
安装完成后,您就拥有了完全可用的Docker环境,非常适合开发、测试和学习。它包括Docker Compose,如果你需要学习Kubernetes,甚至可以启用单节点Kubernetes集群。
Windows上的 Docker Desktop可以运行本地Windows容器和Linux容器。Mac和Linux上的 Docker Desktop只能运行 Linux 容器。
3.1.1 Windows安装Docker Desktop
Windows上 Docker Desktop需要以下所有条件:
64位版本的 Windows 10/11
必须在系统 BIOS 中启用硬件虚拟化支持
WSL 2
请谨慎更改系统BIOS中的任何内容。
在互联网上搜索或询问人工智能助手如何”在Windows上安装Docker Desktop”。这将带你进入相关的下载页面,在那里你可以下载安装程序并按照说明操作。您可能需要安装并启用 WSL 2 后端(Windows Subsystem for Linux)。
安装完成后,你可能需要从Windows开始菜单手动启动 Docker Desktop。启动可能需要一分钟,但你可以通过屏幕底部Windows任务栏上的鲸鱼动画图标来观察启动进度。
一旦启动并运行,你就可以打开终端,输入一些简单的 docker 命令。
$ docker version
Client:
Cloud integration: v1.0.31
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 01:20:44 2023
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.23
<Snip>
OS/Arch: linux/amd64
Experimental: true
3.1.2Mac安装Docker Desktop
Mac 的 ocker Desktop 将所有Docker引擎组件安装到轻量级Linux虚拟机中,该虚拟机会将API无缝地暴露给本地Mac环境。这意味着你可以在Mac上打开终端,使用常规的Docker命令,而不会知道这一切都在一个隐藏的虚拟机中运行。这就是Mac上的Docker Desktop只能与 Linux容器一起使用的原因,因为它是在Linux虚拟机中运行的。这并没有问题,因为 Linux 是大多数容器运行的地方。
在Mac上安装Docker Desktop的最简单方法是在网上搜索或询问人工智能”如何在MacOS上安装Docker Desktop”。按照链接下载,然后完成简单的安装。
安装完成后,你可能需要从MacOS Launchpad手动启动Docker Desktop。启动可能需要一分钟,但你可以在屏幕顶部的状态栏中看到Docker鲸鱼的动画图标。启动后,你可以点击鲸鱼图标来管理Docker Desktop。
参考资料
软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
3.2 使用Multipass安装Docker
Multipass是一款免费工具,用于在Linux、Mac或Windows机器上创建云计算风格的Linux虚拟机。它是我在笔记本电脑上进行Docker测试的首选,因为它可以非常轻松地启动和关闭Docker虚拟机。
只需登录https://multipass.run/install,安装适合你的硬件和操作系统的版本即可。
安装完成后,你只需执行以下三条命令:
$ multipass launch
$ multipass ls
$ multipass shell
让我们看看如何启动并连接到预装了Docker的新虚拟机。
运行以下命令,根据docker镜像创建名为node1的新虚拟机。docker镜像已经预装了Docker,随时可以使用。
multipass launch docker --name node1
下载镜像和启动虚拟机需要一两分钟。
列出虚拟机列表,确保启动正常。
$ multipass ls
使用以下命令连接虚拟机。
$ multipass shell node1
现在你已登录虚拟机,可以运行常规的 Docker 命令。
只需键入exit 即可注销虚拟机。使用”multipass delete node1″,然后使用”multipass purge”删除它。
3.3 在Linux上安装 Docker
在Linux上安装Docker有很多方法,其中大部分都很简单。推荐的方法是在网上搜索或询问人工智能如何操作。
在本节中,我们将介绍在Ubuntu Linux 22.04 LTS上安装Docker的其中一种方法。该步骤假定你已经安装了 Linux 并已登录。
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
$ echo
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ sudo docker --version
Docker version 24.0.0, build 98fdcd7
$ sudo docker info
Server:
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 1
Server Version: 24.0.0
Storage Driver: overlay2
...
3.4 小结
你几乎可以在任何地方运行Docker,而且大多数安装方法都很简单。
Docker Desktop可在你的Linux、Mac或 Windows机器上为你提供一个全功能的Docker环境。它易于安装,包含Docker引擎,拥有流畅的用户界面,并有一个提供大量扩展功能的市场。它是本地Docker开发环境的最佳选择,甚至还能让你启动单节点Kubernetes集群。
大多数Linux发行版上都有安装Docker引擎的软件包。