原文作者:Jeff Hale

原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-b7ba70caeb4b

翻译:猪齿鱼技术团队

容器对于提高软件开发和数据科学中的安全性、可重复性和可伸缩性非常有用。容器的崛起是当今科技领域最重要的趋势之一。

Docker是一个用于在容器中开发、部署和运行应用程序的平台。Docker本质上是容器化的同义词。对于有抱负的软件开发人员或数据科学家来说,Doc​​ker就是他们的未来。

如果您还不适应最新技术,请不要担心——本文将帮助您理解Docker的概念,了解Docker的过程可以想象成是制作披萨的过程。

在本系列有五篇文章,之后的四篇文章我们将会讲解Docker术语、Dockerfiles、Docker镜像、Docker命令和数据存储。阅读完这个系列(再加上一点练习),你将会了解很多Docker发挥的作用!

Docker的类比

首先,阐明一下Docker的类比。

谷歌中对类比的第二个定义是:

象征物被认为是其他事物的代表或象征的事物,尤指抽象的事物。

类比可以帮助我们理解新的事物。例如,物理容器的类比可以帮助我们快速掌握虚拟容器的本质。

图为物理容器

容器

以下是塑料容器对照Docker容器的类比:

  1. 容纳东西——东西要么在容器内,要么在容器外;
  2. 便携式——可在本地计算机、远程计算机或云提供商的服务器(例如AWS)上使用。就像盒子一样,你可以随时移动。
  3. 具有清晰的访问接口——物理容器有一个盖子,用于打开和放入物品以及取出物品。同样,Docker容器具有多种与外界交互的机制。它具有可以通过打开浏览器进行交互的端口,您可以通过命令行将其配置为与数据交互。
  4. 可以从远程位置获取——当您需要用到塑料容器时,您可以网购一个,这些塑料容器是商家从制造商那里购买的,这些制造商通过一个模具就能将数千个塑料容器冲压出来。对于Docker容器,异地注册表会为容器保存一个像模具的镜像。然后,当您需要一个容器时,就可以从图像中制作一个。

与虚拟Docker容器不同,网购的塑料容器需要花费钱,并且商家也不会提供商品副本。

实例

Docker容器的第二种类比是可以将其视为一个有生命的的实例。实例是以某种形式存在的东西,不仅仅只是代码,正是这些代码赋予了Docker容器生命。像其他生物一样,实例最终将死亡-这意味着容器将关闭。

Docker容器是Docker镜像的生命表现。

软件程序

除了容器类比和实例类比,您还可以将Docker容器视为软件程序。毕竟,Docker容器确实是软件,在最基本的层次上,容器是一组操纵其他位的指令。

图为容器是代码

当Docker容器运行时,通常会有程序在运行。容器中的程序执行操作,应用程序也对应执行相关操作。

例如,Docker容器中的代码已经实时将网页上读取的内容发送了您,或者可能会将您的语音命令带到Amazon Alexa,并将其解码为另一个程序并在不同容器中使用的指令。

使用Docker,您可以在主机上同时运行多个容器,和其他软件程序一样,Docker容器可以运行、检查、停止和删除。

概念

虚拟机

虚拟机是Docker容器的前身,它可以隔离应用程序及其依赖项。但是,Docker容器优于虚拟机,因为它们占用的资源更少,非常便捷,并且启动速度更快。

Docker镜像

在本文中,术语“ 镜像 ”的含义无法很好地映射到物理镜像。

Docker镜像更像是蓝图、饼干切割机或模具。镜像是不可变的主模板,用于抽取完全相同的容器。

镜像包含应用程序运行所需的Dockerfile、库和代码,所有这些都是捆绑在一起的。

Dockerfile

Dockerfile 是一个文件,其中包含Docker应如何构建图像的说明。

Dockerfile引用用于构建初始镜像层的基础镜像。流行的官方基础镜像包括python,Ubuntu和alpine。

然后,根据Dockerfile中的说明,可以将其他层堆叠在基本镜像层的顶部。例如,用于机器学习应用程序的Dockerfile可以告诉Docker在中间层添加NumPy,Pandas和Scikit-learn。

最后,根据Dockerfile代码,在其他层之上堆叠了一个可写的薄层。(薄层的尺寸很小,在这里薄是一种类比)

在本系列的后续文章中,将会更深入地探讨Dockerfiles。

Docker容器

Docker镜像加上命令docker run image_name,可从镜像创建并启动容器。

容器注册表

如果希望其他人能够从自己的镜像中创建容器,则可以将镜像发送到容器注册表。Docker Hub是最大的注册表,也是默认的注册表。

用Docker烹饪

图为景观类比

  • 配方就像Dockerfile一样。它告诉您如何实现最终目标。
  • 成分是层。这个比萨饼有皮、酱汁和奶酪。

将食谱和食材想像成一体的披萨制作套件。这是Docker镜像。

配方(Dockerfile)告诉我们我们要做什么。计划如下:

  • 外壳是预成型且不可变的,就像基本的Ubuntu父镜像一样。它是最底层的,是首先被构建的。
  • 然后添加一些奶酪。将第二层添加到比萨饼就像安装一个外部库——例如NumPy。
  • 然后撒一些芝士。芝士就像运行应用程序的文件中编写的代码。

图为烤箱

  • 烤披萨的烤箱就像Docker平台一样。搬进烤箱并将烤箱安装到了自己的房子里,就可以制作东西了。同样,在计算机上安装了Docker,就可以制作容器了。
  • 通过旋转旋钮可以启动烤箱。该docker run image_name命令就像烤箱的旋钮一样——它可以创建并启动容器。
  • 煮熟的比萨就像一个Docker容器。
  • 吃披萨就像使用您的应用程序一样。

就像制作披萨一样,在Docker容器中制作应用程序需要一些工作,但最终您会拥的是非常有价值的。

总结

以上就是Docker概念的内容。在本系列的第2部分,将阐明在Docker生态系统中常用的一些术语。希望本文对您了解Docker有所帮助,同时也希望您看到类比在理解新技术中的价值。


本文由猪齿鱼技术团队原创,转载请注明出处:猪齿鱼官网

Docker入门系列之一:什么是Docker?的更多相关文章

  1. Docker入门系列之二:Docker术语

    原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-1c40ea269fa8 翻译: ...

  2. Docker入门系列之一:在一个Docker容器里运行指定的web应用

    实现题目描述的这个需求有很多种办法,作为入门,让我们从最简单的办法开始. 首先使用命令docker ps确保当前没有正在运行的Docker实例. 运行命令docker run -it nginx: 然 ...

  3. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  4. Docker入门系列(一):目标和安排

    Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...

  5. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

  6. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

  7. Docker入门教程(五)Docker安全

    Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...

  8. Docker入门教程(四)Docker Registry

    Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...

  9. Docker入门系列3:使用

    入门 首先强烈建议玩一遍官方的入门教程,Interactive commandline tutorial,下面是答案: 查看版本:docker version 搜索Image:docker searc ...

  10. Docker入门系列之五:15个 Docker 命令

    在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...

随机推荐

  1. 如何请求一个需要登陆才能访问的接口(基于cookie)---apipost

    在后台在开发.调试接口时,常常会遇到需要登陆才能请求的接口. 比如:获取登陆用户的收藏列表,此时,我们就需要模拟登陆状态进行接口调试了.如图: 今天,我们讲解利用ApiPost的环境变量,解决这种需要 ...

  2. Java HashSet和TreeSet【笔记】

    Java HashSet和TreeSet[笔记] PS:HashSet.TreeSet 两个类是在 Map 的基础上组装起来的类 HashSet 类注释 1.底层实现基于 HashMap,所以迭代时不 ...

  3. stm32 connot enter debug mode

    dap 可以发现设备,stlink jlink 均无法发现设备,但是都不能下载.connot enter debug mode ,发现是vdda 未连接

  4. 使用Java8改造出来的模板方法真的是yyds

    GitHub 21.3k Star 的Java工程师成神之路,不来了解一下吗! GitHub 21.3k Star 的Java工程师成神之路,真的不来了解一下吗! 我们在日常开发中,经常会遇到类似的场 ...

  5. spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD

    spring-boot 2.5.4,nacos 作为配置.服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 本文主要介绍 Java 通过 Cloud N ...

  6. 轻松让你的nginx服务器支持HTTP2协议

    目录 简介 HTTP1.1和HTTP2 安装最新的nginx 开启HTTP2支持 添加SSL支持 修改加密算法 Diffie–Hellman对消息进行加密 重定向所有的HTTP请求到HTTPS 启动n ...

  7. C#实现http协议GET、POST请求

    using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Ne ...

  8. linux中的分号&&和&,|和||说明与用法

    在用linux命令时候,我们可以一行执行多条命令或者有条件的执行下一条命令,下面我们讲解一下linux命令分号&&和&,|和||的用法 在用linux命令时候,我们可以一行执行 ...

  9. 跨域@RequestBody@RequestParam 和JSON.stringify

  10. T-SQL - 习题01_查询每门课都大于80分的学生姓名

    时间:2017-09-11 整理:byzqy 题目:用一条SQL语句查询出每门课都大于80分的学生姓名. 最近面试C#开发工程师,碰到上面这个考数据库的题目,自己感觉有点难度,没有思路,现将找到的解决 ...