什么是docker?
Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers.
Containers are isolated from one another and bundle their own software, libraries and configuration files;
they can communicate with each other through well-defined channels. --wiki
Docker是一组平台即服务产品,它们使用操作系统级虚拟化并被称为容器的软件包交付软件。
容器彼此隔离,并将它们自己的软件,库和配置文件捆绑在一起; 他们可以通过定义明确的渠道相互通信。
docker基本概念容器–什么是容器
What is a Container? A standardized unit of software
容器是标准的软件单元(可独立运行的) ,传统的软件部署方式,需要将软件打包,并在部署之前,要在操作系统上安装相关依赖
,这样的部署方式使得软件的耦合度太高,并且不宜维护,而通过容器,可以将软件打包到标准化单元中,以进行开发,运输和部署,极大降低软件部署的耦合度。
Why Docker?
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。
其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。
传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而 Docker 只需要启动 10 个隔离的应用即可。
docker 容器 vs 虚拟机
容器是应用程序层的抽象,将代码和依赖项打包在一起。
多个容器可以在同一台计算机上运行,并与其他容器共享OS内核,每个容器在用户空间中作为隔离的进程运行。
容器占用的空间少于VM(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要的VM和操作系统更少。
虚拟机(VM)是将一台服务器转变为多台服务器的物理硬件的抽象。
虚拟机管理程序允许多个VM在单台计算机上运行。
每个VM包含操作系统,应用程序,必要的二进制文件和库的完整副本-占用数十GB。
VM也可能启动缓慢。
基本概念
Docker 包括三个基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
镜像
Docker 镜像(Image)就是一个只读的模板。
例如:一个镜像可以包含一个完整的 Ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
容器
Docker 利用容器(Container)来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
- 注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
仓库
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
国内的公开仓库包括时速云 、网易云等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库(参考本文“私有仓库”部分)。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,
这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
- 注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。