Docker 入门教程:基础、架构、容器
什么是 Docker?
Docker 是一个用于虚拟化的软件开发平台,可在同一主机上运行多个操作系统。它有助于分离基础设施和应用程序,从而快速交付软件。与用于创建 VM(虚拟机)的 Hypervisor 不同,Docker 中的虚拟化是在系统级别执行的,也称为 Docker 容器。
正如您在下图中看到的区别,Docker 容器在主机操作系统之上运行。这有助于提高效率和安全性。此外,与虚拟机相比,我们可以在相同的基础设施上运行更多容器,因为容器使用的资源更少。

与可以与主机硬件通信的 VM(例如,以太网适配器以创建更多虚拟适配器)不同,Docker 容器在主机 OS 之上的隔离环境中运行。即使您的主机运行的是 Windows OS,您也可以借助 Hyper-V 运行 Linux 镜像,后者会自动创建小型 VM 来虚拟化系统的基础镜像,在本例中是 Linux。
为什么使用 Docker?
- Docker 是一种计算机软件,用于虚拟化,以便在同一主机上运行多个 操作系统
- Docker 是一种客户端-服务器类型的应用程序,这意味着我们有客户端依赖于服务器
- Docker 镜像就是我们容器的“源代码”;我们用它们来构建
- Dockerfile 有两种类型的注册表 1.) 公共注册表和 2) 私有注册表
- 容器是 Docker 卷的组织单位。简单来说,镜像是一个模板,容器是该模板的副本。您可以拥有同一镜像的多个容器(副本)。
Docker 架构
现在,在本 Docker 容器教程中,让我们来谈谈 Docker 架构中的 Docker 主要组件
Docker 引擎
Docker 是一种客户端-服务器类型的应用程序,这意味着我们有客户端依赖于服务器。因此,称为 dockerd 的 Docker 守护进程就是 Docker 引擎,它代表服务器。Docker 守护进程和客户端可以在同一主机或远程主机上运行,它们通过命令行客户端二进制文件以及完整的 RESTful API 进行通信,以与守护进程 dockerd 进行交互。
Docker 镜像
Docker 镜像就是我们容器的“源代码”;我们用它们来构建容器。它们可以预装软件,从而加快部署速度。它们是便携的,我们可以使用现有镜像或构建自己的镜像。
Docker 注册表
Docker 将我们构建的镜像存储在注册表中。有公共注册表和私有注册表。Docker 公司有一个名为 Docker hub 的公共注册表,您也可以在那里私下存储镜像。Docker hub 有数百万个镜像,您可以立即开始使用。
Docker 容器
容器是组织单位,也是 Docker 的基本概念之一。当我们构建一个镜像并开始运行它时;我们就是在容器中运行。之所以使用容器的类比,是因为我们容器中运行的软件具有可移植性。我们可以移动它,换句话说,可以“运输”软件,修改、管理、创建或处理掉它,就像集装箱船可以处理真正的集装箱一样。
简单来说,镜像是一个模板,容器是该模板的副本。您可以拥有同一镜像的多个容器(副本)。
下面是一张图,完美地展示了不同组件之间的交互以及 Docker 容器技术的工作原理。
我们有几个 Docker 命令 docker pull, docker run... 稍后我们会详细讨论。
如何在 Linux/Ubuntu 上安装 Docker
以下是 Linux/Ubuntu 上 Docker 的分步安装过程
第 1 步) 要安装 Docker,我们需要使用 Docker 团队的 DEB 包。
为此,需要一些必备的 Ubuntu 包。
使用下面的命令安装 Ubuntu 包
$ sudo apt-get install \ apt-transport-https \ ca-certificates curl \ software-properties-common
*符号“\”不是必需的,它用于换行,如果需要,您可以将命令写在一行中,而不使用“\”。
第 2 步) 添加官方 Docker GPG 密钥,指纹如下。
使用下面的 Docker 命令输入 GPG 密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
第 3 步) 接下来,添加 Docker APT 存储库。
使用下面的 Docker 命令添加存储库
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
系统可能会提示您确认是否要添加存储库,并将 GPG 密钥自动添加到您的主机。
lsb_release 命令应该会显示您主机的 Ubuntu 发行版版本。
第 4 步) 添加 GPG 密钥后,
使用下面的 Docker 命令更新 APT 源
$ sudo apt-get update
我们现在可以安装 Docker 包本身了。
第 5 步) 更新 APT 源后,
使用下面的 Docker 命令开始在 Ubuntu 上安装 Docker 包
$ sudo apt-get install docker-ce
上述命令安装了 Docker 和其他所需的附加包。在 Docker 1.8.0 之前,包名是 lxc-docker,在 Docker 1.8 到 1.13 之间,包名是 docker-engine。
注意:Docker for Windows 需要 Windows 10 Pro 或 Enterprise 版本 14393,或 Windows Server 2016 RTM 才能运行
如何使用基本的 Docker 命令
以下是如何使用基本的 Docker 命令
安装 Docker 后,我们必须运行的最基本命令是 $ docker info,正如我们之前所说。
$ sudo docker info
您应该会得到相似或以下结果
正如我们在上面的 Docker 示例中看到的,我们有关于 docker 容器的信息,有多少正在运行、暂停或停止,以及我们下载了多少镜像。那么,让我们在本次 Docker 命令教程中获取我们的第一个镜像。
$ sudo docker pull alpine
使用此命令,我们告诉 docker 下载 alpine 镜像,从公共注册表拉取,这是默认设置的最新版本。
*alpine 是一个基于 Alpine Linux 的最小 Docker 镜像,拥有完整的软件包索引,大小仅为 5 MB。
如果我们想将镜像作为容器运行,我们将在本次 Docker 教程指南中使用以下命令。
$ sudo docker run -i -t alpine /bin/bash
如果我们运行该命令,我们将直接进入 alpine 的终端。-i 标志会使容器的 STDIN 保持打开状态,即使您没有连接到它。这种持久的标准输入是您需要交互式 shell 的一半。-t 标志是另一半,它指示 Docker 为容器分配一个伪终端。这为我们提供了新容器中的交互式 shell。我们通过一个简单的 exit 命令退出容器。
现在,在本 Docker 基础教程中,我们可以尝试运行一个 Ubuntu 镜像。
$ sudo docker run -it ubuntu /bin/bash
您可以注意到 docker 会在本地查找镜像,如果找不到,会自动从镜像库中拉取镜像,再次进入交互式 shell。我们也可以在运行时为容器命名。
$ sudo docker run –-name our_container -it ubuntu /bin/bash
然后我们再次退出。
我们也可以运行之前创建的容器,而无需交互式 shell。
$ sudo docker start container_name
通过输入 docker stop container_name 来停止容器
$ sudo docker stop container_name
如果我们想查看所有正在运行的容器,只需运行
$ docker ps
对于所有容器,我们在该命令的末尾添加“-a”,如下所示 docker ps -a。
此命令显示容器 ID,使用的镜像,创建时间,运行状态,暴露的端口以及为方便管理而随机生成的容器名称。
当我们运行容器时,我们也想知道它们使用了多少资源,为此我们可以使用命令。
$ docker stats
您还可以查看我们本地下载了哪些镜像以及有关它们的信息。
$ sudo docker images
上面 Docker 示例中的命令显示了带有标签的 docker 镜像,该标签显示了我们的镜像版本,唯一的镜像 ID,创建时间以及镜像大小。
什么是虚拟化?
早些时候,部署服务的过程缓慢而痛苦。首先,开发人员编写代码;然后,运维团队将其部署在裸金属机器上,他们必须留意库版本、补丁和语言编译器才能使代码正常工作。如果出现任何错误或问题,流程将重新开始,开发人员会修复,然后运维团队会再次进行部署。
Hypervisor 的出现带来了一些改进。Hypervisor 在同一主机上有多个 虚拟机 或 VM,它们可以运行或关闭。VM 在很大程度上减少了部署代码和修复 bug 的等待时间,但真正的游戏规则改变者是 Docker 容器。
重要的 Docker 命令
以下是重要的 Docker 命令
命令 | 描述 |
---|---|
docker info | 信息命令 |
docker pull | 下载镜像 |
docker run -i -t image_name /bin/bash | 将镜像作为容器运行 |
docker start our_container | 启动容器 |
docker stop container_name | 停止容器 |
docker ps | 所有运行中的容器列表 |
docker stats | 容器信息 |
docker images | 已下载镜像列表 |
Docker 清理 | 停止所有正在运行的容器。 |
此外,还可以阅读 Docker 工作面试题及答案,面向初学者和经验丰富的专业人士。
摘要
- Docker 是一个用于虚拟化的软件开发平台,可在同一主机上运行多个操作系统。它有助于分离基础设施和应用程序,从而快速交付软件。
- Docker 架构: Docker 引擎、Docker 镜像、Docker 注册表、Docker 容器。
- Docker 引擎: Docker 是一种客户端-服务器类型的应用程序,这意味着我们有客户端依赖于服务器。因此,称为 dockerd 的 Docker 守护进程就是 Docker 引擎,它代表服务器。
- Docker 镜像: Docker 镜像就是我们容器的“源代码”;我们用它们来构建容器。它们可以预装软件,从而加快部署速度。它们是便携的,我们可以使用现有镜像或构建自己的镜像。
- Docker 注册表: Docker 将我们构建的镜像存储在注册表中。有公共注册表和私有注册表。Docker 公司有一个名为 Docker hub 的公共注册表,您也可以在那里私下存储镜像。Docker hub 有数百万个镜像,您可以立即开始使用。
- Docker 容器: 容器是组织单位,也是 Docker 的基本概念之一。当我们构建一个镜像并开始运行它时;我们就是在容器中运行。之所以使用容器的类比,是因为我们容器中运行的软件具有可移植性。