Docker curriculum (1):Docker介绍

介绍

什么是 Docker?

维基百科将Docker定义为

一个开源项目,通过在 Linux 上提供操作系统级虚拟化的额外抽象层和自动化,在容器内自动部署软件应用程序。

简单来说,Docker 是一种工具,它允许开发人员、系统管理员等轻松地将他们的应用程序部署在沙箱(称为容器)中,以在主机操作系统(即 Linux)上运行。Docker 的主要优势在于,它允许用户将应用程序及其所有依赖项打包到一个标准化单元中以进行软件开发。与虚拟机不同,容器没有高开销,因此可以更有效地使用底层系统和资源。

什么是容器(containers)?

当今的行业标准是使用虚拟机 (VM) 来运行软件应用程序。VM 在来宾操作系统(guest operating system)中运行应用程序,该操作系统在由服务器主机操作系统提供支持的虚拟硬件上运行。

VM 非常擅长为应用程序提供完整的进程隔离:主机操作系统中的问题很少会影响来宾操作系统中运行的软件,反之亦然。但是这种隔离需要付出巨大的代价——为来宾操作系统使用虚拟化硬件所花费的计算开销是巨大的。

容器采用不同的方法:通过利用主机操作系统的低级机制,容器以一小部分计算能力提供大部分虚拟机隔离。

为什么要使用容器?

容器提供了一种逻辑打包机制,其中应用程序可以从它们实际运行的环境中抽象出来。这种解耦使得基于容器的应用程序能够轻松且一致地部署,无论目标环境是私有数据中心、公共云还是开发人员的个人笔记本电脑。这使开发人员能够创建与其余应用程序隔离并可在任何地方运行的可预测环境。

从操作的角度来看,除了可移植性容器之外,容器还可以对资源进行更精细的控制,从而提高基础架构的效率,从而更好地利用计算资源。

随着时间的推移对 Docker 的兴趣

Docker 的谷歌搜索趋势

由于这些好处,容器和 Docker已被广泛采用。Google、Facebook、Netflix 和 Salesforce 等公司利用容器来提高大型工程团队的工作效率并提高计算资源的利用率。事实上,谷歌认为容器消除了对整个数据中心的需求。

本教程将教我什么?

本教程旨在成为让您接触 Docker 起始站。除了揭开 Docker 的神秘面纱之外,它还将为您提供在云上构建和部署自己的 web 应用程序的实践经验。我们将使用Amazon Web Services部署一个静态网站,并使用Elastic BeanstalkElastic Container ServiceEC2上部署两个动态Web 应用程序。即使之前没有部署经验,本教程也应该是开始所需的全部内容。


入门

本文档包含一系列的几个部分,每个部分都解释了 Docker 的一个特定方面。在每个部分中,我们将键入命令(或编写代码)。本教程中使用的所有代码都可以在Github 存储库中找到

先决条件

除了基本熟悉命令行和使用文本编辑器之外,本教程不需要任何特定技能。本教程用于git clone在本地克隆存储库。如果你的系统上没有安装 Git,要么安装它,要么记得从 Github 手动下载 zip 文件。有开发 Web 应用程序的经验会有所帮助,但不是必需的。随着我们继续本教程,我们将使用一些云服务。如果您有兴趣跟随,请在以下每个网站上创建一个帐户:

设置您的计算机

在计算机上设置所有工具可能是一项艰巨的任务,但幸运的是,随着 Docker 变得稳定,在喜欢的操作系统上启动和运行 Docker 变得非常容易。

直到几个版本之前,在 OSX 和 Windows 上运行 Docker 还是很麻烦的。然而,最近 Docker 投入了大量资金来改善其用户在这些操作系统上的入门体验,因此现在运行 Docker 轻而易举。在入门的码头工人指南详细介绍了有关设置指令的MacLinux的的Windows

完成安装 Docker 后,通过运行以下命令来测试您的 Docker 安装:

$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

HELLO WORLD

Busybox

现在已经完成了所有设置,是时候动手实践一下。在本节中,将在系统上运行一个Busybox容器并体验该docker run命令。

首先,在终端中运行以下命令:

$ docker pull busybox

注意:根据在系统上安装 docker 的方式,您可能会permission denied在运行上述命令后看到错误。如果使用的是 Mac,请确保 Docker 引擎正在运行。如果使用的是 Linux,请在docker命令前加上sudo. 或者,您可以创建一个 docker 组来解决此问题。

pull命令从Docker 注册表中获取 busybox映像并将其保存到我们的系统中。您可以使用该命令查看系统上所有图像的列表。docker images

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox                 latest              c51f86c28340        4 weeks ago         1.109 MB

Docker Run

现在基于这个镜像运行一个 Docker容器。为此,将使用全能docker run命令。

$ docker run busybox
$

什么也没有输出,这是一个错误吗?不是的。在幕后,发生了很多事情。当您调用run时,Docker 客户端会找到映像(在本例中为 busybox),加载容器,然后在该容器中运行命令。当运行时docker run busybox,我们没有提供命令,所以容器启动了,运行了一个空命令然后退出。让我们尝试一些更令人兴奋的事情。

$ docker run busybox echo "hello from busybox"
hello from busybox

最后我们看到了一些输出。在这种情况下,Docker 客户端尽职尽责地echo在busybox 容器中运行命令,然后退出它。如果你注意到了,所有这一切都发生得很快。想象一下启动一个虚拟机,运行一个命令然后杀死它。现在你知道为什么他们说容器很快了!好的,现在是时候查看docker ps命令了。该docker ps命令显示当前正在运行的所有容器。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

由于没有容器正在运行,看到一个空行。尝试一个更有用的变体:docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
305297d7a235        busybox             "uptime"            11 minutes ago      Exited (0) 11 minutes ago                       distracted_goldstine
ff0a5c3750b9        busybox             "sh"                12 minutes ago      Exited (0) 12 minutes ago                       elated_ramanujan
14e5bd11d164        hello-world         "/hello"            2 minutes ago       Exited (0) 2 minutes ago                        thirsty_euclid

所以在上面看到的是我们运行的所有容器的列表。请注意,该STATUS列显示这些容器在几分钟前退出。

您可能想知道是否有一种方法可以在容器中运行多个命令。让我们现在试试:

$ docker run -it busybox sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # uptime
 05:45:21 up  5:58,  0 users,  load average: 0.00, 0.01, 0.04

运行run带有-it标志的命令会将我们附加到容器中的交互式 tty。现在可以根据需要在容器中运行任意数量的命令。花一些时间运行最喜欢的命令。

危险:如果您特别喜欢冒险,可以rm -rf bin在容器中尝试。确保在容器中而不是在笔记本电脑/台式机中运行此命令。这样做会使任何其他命令如ls,uptime不起作用。一旦一切都停止工作,可以退出容器(键入exit并按 Enter),然后使用docker run -it busybox sh命令再次启动它。由于 Docker 每次都会创建一个新容器,所以一切都应该重新开始工作。

对强大docker run命令的探索之旅到此结束,这很可能是最常使用的命令。花一些时间来适应它是有道理的。要了解有关 的更多信息run,请使用docker run --help查看它支持的所有标志的列表。随着继续深入,我们将看到更多的docker run.

在继续之前,下面讨论删除容器。我们在上面看到,即使我们通过运行退出后,我们仍然可以看到容器的残余docker ps -a。在本教程中,您将运行docker run多次,留下杂散的容器会占用磁盘空间。因此,根据经验,我会在处理完容器后清理它们。为此,可以运行该docker rm命令。只需从上面复制容器 ID 并将它们粘贴到命令旁边即可。

$ docker rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9

删除时,应该会看到 ID 回显给您。如果要一次性删除一堆容器,复制粘贴 ID 可能会很乏味。在这种情况下,您可以简单地运行 -

$ docker rm $(docker ps -a -q -f status=exited)

此命令删除所有状态为 的容器exited。如果您想知道,该**-q标志仅-f根据提供的条件**返回数字 ID 和过滤器输出。最后一件有用的事情是--rm可以传递给docker run它的标志,一旦它退出就会自动删除容器。对于一次性 docker 运行,--rmflag 非常有用。

在 Docker 的更高版本中,docker container prune可以使用该命令来实现相同的效果。

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
4a7f7eebae0f63178aff7eb0aa39f0627a203ab2df258c1a00b456cf20063
f98f9c2aa1eaf727e4ec9c0283bcaa4762fbdba7f26191f26c97f64090360

Total reclaimed space: 212 B

最后,还可以通过运行删除不再需要的镜像docker rmi

术语

在上一节中,使用了很多 Docker 特定的行话,这可能会让一些人感到困惑。所以这里总结一下在 Docker 生态系统中经常使用的术语。

  • Image(镜像) - 构成容器基础的应用程序蓝图。在上面的演示中,使用docker pull命令来下载busybox镜像。
  • Containers(容器)- 从 Docker 镜像创建并运行实际应用程序。使用docker run下载的 busybox 镜像创建了一个容器。可以使用该docker ps命令查看正在运行的容器列表。
  • Docker Daemon - 在主机上运行的后台服务,用于管理构建、运行和分发 Docker 容器。守护进程是在客户端与之对话的操作系统中运行的进程。
  • Docker Client - 允许用户与守护程序交互的命令行工具。更一般地说,也可以有其他形式的客户端 - 例如向用户提供 GUI 的Kitematic
  • Docker Hub - Docker 镜像的注册表。可以将注册表视为所有可用 Docker 映像的目录。如果需要,可以托管自己的 Docker 注册表并使用它们来拉取镜像。

Reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值