Hello Docker

Docker: Build, Ship, and Run Any App, Anywhere 在任何地方构建、交付和运行任何应用

1. 引言

最近简单的学习了下Docker,本文先简要梳理下Docker涉及到的一些重要概念,后续在结合.NET Core探讨其基本用法。

2. What's Docker

Docker是用GO语言编写,利用Linux内核的几个特性来提供它的功能。Docker是一个开放平台用于快速开发、分发和部署应用程序。它提供了一个操作系统级别的抽象。它隔离了应用程序对基础架构(操作系统等)的依赖。解决了生产、测试、部署环境的一致性问题。

Docker提供了容器(松耦合且隔离的环境)去打包和运行应用程序。良好的安全性和隔离性允许我们在一个主机上运行多个容器。因为容器是直接在宿主机器的内核中运行且不需要额外的管理程序的负载(比如虚拟机需要VMware管理程序),所以说容器是轻量级的。

3. Docker Engine

从图中可知,Client使用docker CLI(命令行工具)通过Docker REST API去和docker daemon(docker的守护进程)进行交互,docker daemon负责去创建和管理Docker objects(比如镜像、容器、网络和存储卷等)。

4. Docker的适用场景

快速、一致地交付应用 Docker通过使用容器(其提供应用程序和服务)来提供标准化的工作环境来精简开发周期。容器在持续集成和持续开发(CI/CD)中十分有用。 考虑以下示例场景:

  1. 开发人员在本地编写代码,并使用Docker容器与同事分享他们的工作。
  2. 开发人员使用Docker将应用程序推入测试环境,并执行自动和手动测试。当开发人员发现错误时,他们可以在开发环境中修复它们,并将其重新部署到测试环境进行测试和验证。
  3. 完成测试后,将修复程序推送给客户就如同将更新的镜像推送到生产环境一样简单。

响应式部署和缩放 Docker的可移植性和轻量级特性也使得动态管理工作负载变得非常容易,几乎可以实时地按业务需求对应用程序和服务进行扩展和收缩。

在同一硬件运行多个工作负载 Docker的轻量级及运行快速的特性,允许我们用更少的资源做更多的事情,最大化的使用计算机的资源。Docker是高密度环境和中小型部署的理想选择。

5. Docker架构

从图中我们可以看出,Docker是一个C/S架构。客户端通过REST API与Docker的守护进程进行交互,守护进程从Registry(仓库,如DockerHub)拉取镜像,再构建、运行和分发容器等。

6. Docker VS Vitual Machine

首先,Docker是一种容器管理技术,而非虚拟化技术。与我们熟知的虚拟机有着本质区别:

通过上图可知,Docker是基于Docker引擎通过共享宿主机的硬件资源,使用容器来提供独立运行环境来运行应用程序!而VM则是基于Supervisor(虚拟机管理程序)使用虚拟机技术来提供隔离的虚拟机,在虚拟机的操作系统上提供运行环境!虽然两者都提供了很好的资源隔离,但很明显Docker的虚拟化开销更低!

7. 核心术语

下面我们就来重点梳理下Docker涉及到的一些核心术语:Registry、Image、Container、Stack、Service、Swarm。 Registry(仓库) Docker Registry 用来存储Docker镜像,比如Docker官方的Docker Hub就是一个公开的仓库。在上面我们可以找到我们想要的镜像。当然我们也可以建立私有的镜像仓库。 当我们执行Docker pullDocker run命令时,若本地无所需的镜像,那么将会从仓库(一般为DockerHub)下载(pull)一个镜像。Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用login、push等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序。 另外,我们可以在Docker Store进行镜像交易。

Image(镜像) 镜像是自读的,用于创建Docker容器。我们可以基于一个镜像做一些额外的自定义更改后,commit成我们自己的镜像。也可以使用Dockerfile,build成我们自己的镜像。Docker使用镜像分层技术,Dockerfile中的每个指令都会创建为镜像中的一个层。

Container(容器) 容器是docker中最重要的概念,Container是镜像的运行实例,它是一个隔离的、资源受控的可移植的运行时环境,其中包含操作系统、需要运行的程序、运行程序的相关依赖、环境变量等。我们可以通过docker run <image>创建指定镜像的容器,创建容器时会在镜像上附加一个读写层。我们可以连接容器到一个或多个网络,并为其附加存储,或基于它当前状态创建一个新的镜像。Docker使用namespace的技术来实现容器之间的隔离!对于容器的更改是暂时的,当容器停止时,相应的改动就会丢失。我们可以通过挂载volume来持久化存储!

Docker Swarm(Docker集群) Docker Swarm 是 Docker 的独立原生集群工具的名称。Docker Swarm 将多个Docker主机集群并将它们暴露为单个虚拟的Docker主机。

Service(服务) 通过服务我们可以很好进行容器扩展,默认情况下,服务在Swarm下的所有工作节点之间进行负载平衡。在Docker中我们通过编写docker-compose.yml来定义、运行和扩展服务。

Stack(服务堆) Stack是一组相互关联的服务,它们可以共享依赖关系,并且可以一起协调和缩放。单个Stack能够定义和协调整个应用程序的功能。

参考资料:

Docker官方文档 Docker中文网 Docker术语表

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

Docker学习之CentOS 7安装配置

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统...

1.1K9
来自专栏田飞雨的专栏

Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

Docker 部署 Django 应用可以通过两种方式来完成:迭代构建和容器互联。以下记录使用容器互联的方式搭建 Django 容器栈的过程。

5.4K2
来自专栏Rainbond开源「容器云平台」

Dockerfile,你给我站住!

1465
来自专栏Pythonista

docker网络

容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。

3024
来自专栏测试开发架构之路

Docker学习以及镜像制作流程

2793
来自专栏Linyb极客之路

使用 Docker 搭建 Java Web 运行环境

Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它。Docker 是一种“轻量级”容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内...

4105
来自专栏Felix的技术分享

Docker简单使用

21811
来自专栏应兆康的专栏

Docker 简介与安装

Github:https://github.com/yingzk/MyDocker 1. Docker 简介 Docker是一个开源(Github地址: htt...

33712
来自专栏吴柯的运维笔记

Docker安装及基本指令教程

? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟...

3748
来自专栏微服务

Docker的核心概念,镜像操作

简介 在实际使用Docker的过程中,遇到一些问题,但是总没有系统的博文可以详细的介绍Docker,所以个人写一个由浅入深的系统学习Docker过程。 这里首...

4008

扫码关注云+社区