来源掘金小册docker资料
# 一、Docker 的四大组成对象
在
Docker体系里,有四个对象 (Object) 是我们不得不进行介绍的,因为几乎所有Docker以及周边生态的功能,都是围绕着它们所展开的。它们分别是:镜像 (Image)、容器 (Container)、网络 (Network)、数据卷 (Volume)…
# 1.1 镜像
所谓镜像,可以理解为一个只读的文件包,其中包含了虚拟环境运行最原始文件系统的内容
# 1.2 容器
容器就是用来隔离虚拟环境的基础设施,而在
Docker里,它也被引申为隔离出来的虚拟环境。
- 如果把镜像理解为编程中的类,那么容器就可以理解为类的实例。镜像内存放的是不可变化的东西,当以它们为基础的容器启动后,容器内也就成为了一个“活”的空间
Docker 的容器应该有三项内容组成
- 一个
Docker镜像 - 一个程序运行环境
- 一个指令集合
# 1.3 网络
在
Docker中,实现了强大的网络功能,我们不但能够十分轻松的对每个容器的网络进行配置,还能在容器间建立虚拟网络,将数个容器包裹其中,同时与其他网络环境隔离
Docker能够在容器中营造独立的域名解析环境,这使得我们可以在不修改代码和配置的前提下直接迁移容器,Docker会为我们完成新环境的网络适配。对于这个功能,我们甚至能够在不同的物理服务器间实现,让处在两台物理机上的两个 Docker 所提供的容器,加入到同一个虚拟网络中,形成完全屏蔽硬件的效果…
# 1.4 数据卷
- 除了网络之外,文件也是重要的进行数据交互的资源。在以往的虚拟机中,我们通常直接采用虚拟机的文件系统作为应用数据等文件的存储位置。然而这种方式其实并非完全安全的,当虚拟机或者容器出现问题导致文件系统无法使用时,虽然我们可以很快的通过镜像重置文件系统使得应用快速恢复运行,但是之前存放的数据也就消失了。
- 为了保证数据的独立性,我们通常会单独挂载一个文件系统来存放数据。这种操作在虚拟机中是繁琐的,因为我们不但要搞定挂载在不同宿主机中实现的方法,还要考虑挂载文件系统兼容性,虚拟操作系统配置等问题。值得庆幸的是,这些在 Docker 里都已经为我们轻松的实现了,我们只需要简单的一两个命令或参数,就能完成文件系统目录的挂载。
- 能够这么简单的实现挂载,主要还是得益于
Docker底层的 Union File System 技术。在UnionFS的加持下,除了能够从宿主操作系统中挂载目录外,还能够建立独立的目录持久存放数据,或者在容器间共享。 - 在
Docker中,通过这几种方式进行数据共享或持久化的文件或目录,我们都称为数据卷 (Volume)…
# 二、搭建运行Docker环境
# 2.1 Docker Engine 的版本
对于 Docker Engine 来说,其主要分为两个系列
- 社区版 (
CE, Community Edition ) - 企业版 (
EE, Enterprise Edition )
- 社区版 (
Docker Engine CE) 主要提供了Docker中的容器管理等基础功能,主要针对开发者和小型团队进行开发和试验。而企业版 (Docker Engine EE) 则在社区版的基础上增加了诸如容器管理、镜像管理、插件、安全等额外服务与功能,为容器的稳定运行提供了支持,适合于中大型项目的线上运行… - 社区版和企业版的另一区别就是免费与收费了。对于我们开发者来说,社区版已经提供了
Docker所有核心的功能,足够满足我们在开发、测试中的需求,所以我们直接选择使用社区版进行开发即可。在这本小册中,所有的内容也是围绕着社区版的Docker Engine展开的… - 从另外一个角度,
Docker Engine的迭代版本又会分为稳定版 (Stable release) 和预览版 (Edge release)。不论是稳定版还是预览版,它们都会以发布时的年月来命名版本号,例如如 17 年 3 月的版本,版本号就是 17.03…
Docker Engine的稳定版固定为每三个月更新一次,而预览版则每月都会更新。在预览版中可以及时掌握到最新的功能特性,不过这对于我们仅是使用Docker的开发者来说,意义并不是特别重大的,所以我还是更推荐安装更有保障的稳定版本。- 在主要版本之外,
Docker官方也以解决Bug为主要目的,不定期发布次要版本。次要版本的版本号由主要版本和发布序号组成,如:17.03.2就是对17.03版本的第二次修正…
# 2.2 Docker 的环境依赖
- 由于
Docker的容器隔离依赖于Linux内核中的相关支持,所以使用Docker首先需要确保安装机器的Linux kernel中包含Docker所需要使用的特性。以目前 Docker 官方主要维护的版本为例,我们需要使用基于Linux kernel 3.10以上版本的Linux系统来安装Docker.… - 也许
Linux kernel的版本还不够直观,下面的表格就直接展示了Docker对主流几款Linux系统版本的要求
| 操作系统 | 支持的系统版本 |
|---|---|
CentOS |
CentOS 7 |
Debian |
Debian Wheezy 7.7 (LTS) |
Debian |
Jessie 8 (LTS) |
Debian |
Stretch 9 |
Debian |
Buster 10 |
Fedora |
Fedora 26 、Fedora 27 |
Ubuntu |
Ubuntu Trusty 14.04 (LTS) |
Ubuntu |
Xenial 16.04 (LTS) |
Ubuntu |
Artful 17.10... |
# 2.3 在 Linux 系统中安装 Docker
因为
Docker本身就基于Linux的核心能力,同时目前主流的Linux系统中所拥有的软件包管理程序,已经可以很轻松的帮助我们处理各种依赖问题,所以在Linux中安装Docker并非什么难事
CentOS
$ sudo yum install yum-utils device-mapper-persistent-data lvm2
$
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce
$
$ sudo systemctl enable docker
$ sudo systemctl start docker...
Debian
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
$
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$
$ sudo systemctl enable docker
$ sudo systemctl start docker...
Fedora
$ sudo dnf -y install dnf-plugins-core
$
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
$ sudo dnf install docker-ce
$
$ sudo systemctl enable docker
$ sudo systemctl start docker...
Ubuntu
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$
$ sudo systemctl enable docker
$ sudo systemctl start docker...
# 2.4 上手使用
在安装
Docker完成之后,我们需要先启动docker daemon使其能够为我们提供Docker服务,这样我们才能正常使用Docker
在我们通过软件包的形式安装 Docker Engine 时,安装包已经为我们在 Linux 系统中注册了一个 Docker 服务,所以我们不需要直接启动 docker daemon 对应的 dockerd 这个程序,而是直接启动 Docker 服务即可。启动的 Docker 服务的命令其实我已经包含在了前面谈到的安装命令中,也就是…
sudo systemctl start docker
当然,为了实现
Docker服务开机自启动,我们还可以运行这个命令
$ sudo systemctl enable docker
docker version
在
Docker服务启动之后,我们先来尝试一个最简单的查看Docker版本的命令:docker version
$ sudo docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:03 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:25:29 2018
OS/Arch: linux/amd64
Experimental: false...
这个命令能够显示
Docker C/S结构中的服务端 (docker daemon) 和客户端 (docker CLI) 相关的版本信息。在默认情况下,docker CLI连接的是本机运行的docker daemon,由于docker daemon和docker CLI通过RESTful接口进行了解耦,所以我们也能修改配置用于操作其他机器上运行的docker daemon…
docker info
配置国内镜像源
那么有了地址,我们要如何将其配置到 Docker 中呢?
参数识别