1 Docker简介
1.1 什么是Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
1.2 为什么Docker如此受欢迎
Docker 是一种新兴的虚拟化方式,与传统虚拟化相比,它具有许多优势。
启动速度快
首先,Docker 容器的启动可以在秒级实现,这比传统的虚拟机快得多。
高效利用资源
Docker 对系统资源的利用率非常高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中的应用外,几乎不消耗额外的系统资源,从而保证了高性能和低开销。传统虚拟机方式需要为每个应用启动一个虚拟机,而 Docker 只需启动相应数量的隔离应用即可。
快速交付和部署
对于开发和运维人员(DevOps)来说,Docker 提供了更快的交付和部署方式。开发者可以使用一个标准的镜像来构建开发容器,开发完成后,运维人员可以直接使用该容器部署代码。Docker 能快速创建容器,快速迭代应用程序,并使整个过程透明易见,方便团队成员理解应用程序的创建和工作方式。
高效虚拟化
Docker 容器运行不需要额外的 hypervisor 支持,它是内核级虚拟化,能够实现更高的性能和效率。
轻松迁移和扩展
Docker 容器几乎可以在任何平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑和服务器。这种兼容性使得应用程序可以在不同平台之间轻松迁移。
简单管理
使用 Docker,只需进行小幅度修改即可替代过去大量的更新工作。所有修改都以增量方式被分发和更新,实现了自动化和高效管理。
对比传统虚拟机
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 一般支持几十个虚拟机 |
总的来说,Docker 在启动速度、资源利用率、交付和部署速度、虚拟化效率、迁移和扩展能力以及管理简便性方面,都显著优于传统虚拟机。
2 基本概念
Docker 包括镜像(Image)、容器(Container)、仓库(Repository) 三个基本概念
2.1 镜像
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
2.2 容器
Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
2.3 仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
3 Ubuntu 安装 Docker
$ sudo apt-get update
$ sudo apt-get install -y docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
4 镜像
4.1 获取镜像
从仓库获取所需要的镜像,可以使用如下方法,下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 22.04 操作系统的镜像
$ sudo docker pull ubuntu:22.04
下载过程中,会输出获取镜像的每一层信息。
该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:22.04
命令,即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 22.04 的镜像。
如果要从指定的服务器地址下载,使用如下命令
$ sudo docker pull your_server_url/ubuntu:22.04
完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用
$