今天我们开始进入 Docker 系列专题,在本专题中,我将基于 .NET 项目介绍和讲解 Dcoker 的基本使用、基础命令、Dockfile,以及 Docker 的存储和网络等内容。
在过去几年时间里,容器(Container)技术得到了快速的发展和普及。在这样的大背景下,我们作为开发人员,容器技术可以说是我们必备的基础技能之一。而 Docker 是容器技术中目前普及率最高的一个实现。
虽然现在 DevOps 领域最火的 Kubernetes(K8s) 已经弃用了 Dockershim(这是一个适配器组件,使得你可以把 Docker 用作 K8s 的容器运行时),但这并不代表 K8s 就不能运行 Docker 容器了。Dockershim 一定还会继续由社区或官方维护,或者 Docker 将来可能会支持 CRI 规范以使它可以不用借助适配器组件便可以运行在 K8s 中,所以目前来看大家完全不必担心。
Docker 目前在市场上的及率依然非常高,在实际环境中还是有很多更适合直接使用 Docker 的场景。
另外,我个人感觉,学习了 Docker 再去学 K8s 会轻松很多,很多概念不会那么抽象。
顾名思义,容器(Container)是 IT 世界标准化的“集装箱”。就像运输业使用实体集装箱隔离不同的货物,以便通过船只和火车运输,软件开发技术也已使用这种容器化的方法。
最早的容器技术应该是一个叫 Linux Container 的工具,简称 LXC,它是一种内核轻量级的操作系统层的虚拟化技术。Linux Container 的实现主要包含 Namespace 和 Cgroup 两大基础技术,前者是命名空间,主要用于资源的隔离,后者负责资源管理和控制,比如 CPU 和内存的限制、进程组的挂起、恢复和优先级控制等。
随着虚拟化技术的发展,在 LXC 系统层容器技术的基础上,又诞生了应用层容器技术,比如 Docker。它是运行在操作系统之上的一个应用程序,在这个应用程序中,可以将需要部署的应用程序进行容器化,让各个应用程序运行在被隔离的容器中。
容器的主要优势特点是:标准化、轻量级、易移植、低成本。容器技术提供轻量级固定的基础设施,无需配置硬件和花费时间安装操作系统和软件来托管部署。它可将应用程序的代码与相关配置文件、库及执行应用程序所需的一切以非常标准化的方式组合打包在一起,这可让开发人员或运维人员顺畅地跨环境部署应用程序,从而解决应用程序换个环境就无法正确执行的问题。容器之间彼此隔离,有助于提升应用程序的安全性。
前文说了,Docker 是容器技术的一种实现。Docker 是一个用于开发、交付和运行容器的容器化平台。桌面版 Docker 支持 Linux、Windows 和 macOS。对于服务器环境,Docker 支持 Linux 的多种分发版本和 Windows Server 2016 及更高版本,许多云服务商(如阿里云、Azure 等)都支持 Docker。
Docker 使用的是 C/S(客户端/服务器)架构。Docker 客户端与 Docker 守护进程(Daemon)对话,后者负责构建、运行和分发 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,或者你可以将 Docker 客户端连接到一个远程的 Docker 守护进程,它们之间使用 REST API 通讯。另一个 Docker 客户端是 Docker Compose,它可以让你处理由一组容器组成的应用程序。
Docker 客户端是一个名为 docker
的命令行应用程序,它为我们提供了一个命令行接口 (CLI),用于与 Docker 服务器进行交互。docker
命令使用 REST API 接口将诸如 docker run
之类的指令发送到本地或远程服务器来管理容器。一个 Docker 客户端可以多个守护进程通信。
Docker 服务器中的守护程序(名为 dockerd
)监听 Docker API 请求并管理 Docker 对象,如镜像、容器、网络、插件等。守护程序还可以与其他守护程序进行通信,以管理 Docker 服务。
Docker 镜像仓库是一个软件即服务(SaaS)Docker 容器 Registry(注册表)。Docker 镜像仓库是用于存储和分发创建的容器镜像。Docker Hub 是 Docker 用于镜像管理的默认公共仓库。
本文主要介绍了什么是容器和什么是 Docker,相信你对容器技术和 Docker 已经有了基本的了解。在接下来的章节中,请跟着我一起来操作吧。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8