Docker 入门教程:基础、架构、容器

什么是 Docker?

Docker 是一个用于虚拟化的软件开发平台,可在同一主机上运行多个操作系统。它有助于分离基础设施和应用程序,从而快速交付软件。与用于创建 VM(虚拟机)的 Hypervisor 不同,Docker 中的虚拟化是在系统级别执行的,也称为 Docker 容器。

正如您在下图中看到的区别,Docker 容器在主机操作系统之上运行。这有助于提高效率和安全性。此外,与虚拟机相比,我们可以在相同的基础设施上运行更多容器,因为容器使用的资源更少。

Virtualization in Docker vs Hypervisor
Docker vs Hypervisor 中的虚拟化

与可以与主机硬件通信的 VM(例如,以太网适配器以创建更多虚拟适配器)不同,Docker 容器在主机 OS 之上的隔离环境中运行。即使您的主机运行的是 Windows OS,您也可以借助 Hyper-V 运行 Linux 镜像,后者会自动创建小型 VM 来虚拟化系统的基础镜像,在本例中是 Linux

为什么使用 Docker?

  • Docker 是一种计算机软件,用于虚拟化,以便在同一主机上运行多个 操作系统
  • Docker 是一种客户端-服务器类型的应用程序,这意味着我们有客户端依赖于服务器
  • Docker 镜像就是我们容器的“源代码”;我们用它们来构建
  • Dockerfile 有两种类型的注册表 1.) 公共注册表和 2) 私有注册表
  • 容器是 Docker 卷的组织单位。简单来说,镜像是一个模板,容器是该模板的副本。您可以拥有同一镜像的多个容器(副本)。

Docker 架构

现在,在本 Docker 容器教程中,让我们来谈谈 Docker 架构中的 Docker 主要组件

Docker Architecture
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

您应该会得到相似或以下结果

Use Docker using Basic Docker Commands

正如我们在上面的 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 的基本概念之一。当我们构建一个镜像并开始运行它时;我们就是在容器中运行。之所以使用容器的类比,是因为我们容器中运行的软件具有可移植性。