一、初识Docker
(一) 什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。Docker就是类似的理念。
(二)Docker的优势
对开发和运维人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常的运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀
具体来说,Docker在开发和运维过程中,有如下几个方面的优势。
- 更快的交付和部署。使用Docker,开发人员可以使用镜像快速构建一套标准的开发环境,开发完成之后,测试和运维可以直接使用相同环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试和部署的时间。并且各个步骤都有明确的配置和操作,整个过程可见,使团队更容易理解应用的创建和工作过程。
- 更高效的利用资源。Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager VMM)支持。这种兼容性让用户可以在不同的平台之间轻松的迁移应用。
- 更轻松的迁移和扩展。Docker容器几乎可以在任意平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。
- 更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。
Docker与传统虚拟机的比较
特性 | 容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 安全隔离 | 完全隔离 |
二、Docker的核心概念和安装
(一)核心概念
Docker镜像:类似于虚拟机的镜像,可以将它理解为一个面向 Docker 引擎的只读模板,包含了文件系统。镜像是创建 Docker 容器的基础。通过版本管理和增量的文件系统,Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用的镜像,并通过简单的命令就可以直接使用。
Docker容器:类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
Docker仓库:类似于代码仓库,是 Docker 集中存放镜像文件的场所。根据存储的镜像是否公开,Docker 仓库可以分为公开仓库和私有仓库两种形式。目前最大的公开仓库是 Docker Hub ,存放了数量庞大的镜像供用户下载。同时用户可以创建自己的镜像,并将镜像 push 到公有或者私有仓库。当下次需要使用时,可以从仓库 pull 下来。
这样可以看出,Docker 利用仓库管理镜像的设计理念与 Git 非常相似。
(二)Docker 安装
CentOS
Docker 支持 CentOS 6 及以后的版本。
对于 CentOS 6 系统可以使用 EPEL 库安装 Docker, 命令如下:
$ sudo yum install -y http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
$ sduo yum install -y docker-io
对于 CentOS 7 系统,由于CentOS-Extras 源中已内置 Docker ,读者可以直接使用 yum 命令进行安装:
$ sudo yum install -y docker-io
目前在 CentOS 系统中更新 Docker 软件有两种方法,一是自行通过源码编译安装,二是下载二进制文件进行更新。
(三)镜像
使用 docker pull 命令从网络上下载镜像
[root@localhost bin]# docker pull ubuntu
Using default tag: latest
Trying to pull repository docker.io/library/ubuntu ...
这是从默认的注册服务器 registry.hub.docker.com 中的 ubuntu 仓库下载标记为 latest 的镜像。
用户也可以选择从其它注册服务器的仓库下载。此时,需要在仓库名称前面指定完整的仓库注册服务器地址。例如从DockerPool 社区的镜像源 dl.dockerpool.com 下载最新的 Ubuntu 镜像。
使用 docker images 命令可以列出本地主机上已有的镜像。
[root@localhost bin]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 1d9c17228a9e 12 days ago 86.7 MB
[root@localhost bin]#
在列出的信息中,可以看到几个字段信息:
repository: 来自哪个仓库,比如 Ubuntu 仓库。
tag: 镜像的标签信息,比如 latest。
image id: 镜像的 ID 号(唯一)。这个ID 信息十分重要,它唯一标识了镜像。
created: 创建时间。
size: 镜像大小。
使用 docker inspect 命令可以获取该镜像的详细信息
[root@localhost bin]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 1d9c17228a9e 12 days ago 86.7 MB
[root@localhost bin]# docker inspect 1d9c17228a