Docker简介
Docker 是一个开源的应用容器引擎, 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器,基于 Go 语言 并遵从 Apache2.0 协议开源,是在 GitHub 上开发的 Moby 开源项目的一部分。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立,其标志如下图所示。Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。
1.1
Docker的应用场景
1.简化不同环境配置差异虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件, 系统), Docker在降低额外开销的情况下提供了同样的功能. 它能让你将运行环境和配置放在代码汇总然后部署, 同一个Docker的配置可以在不同的环境环境中使用, 这样就降低了硬件要求和应用环境之间耦合度。
2.代码流水线管理代码从开发者的机器到最终在生产环境上的部署, 需要经过很多的中间环境,而每一个中间环境都有自己微小的差别, Docker给应用提供了一个从开发到上线均一致的环境, 让代码的流水线变得简单不少。
3.提升开发效率不同环境中, 开发者的共同目标:(1)让开发环境尽量贴近生产环境.(2)快速搭建开发环境开发环境的机器通常内存比较小, 之前使用虚拟的时候, 我们经常需要为开发环境的机器加内存, 而现在Docker可以轻易的让几十个服务在Docker中跑起来。
4.隔离应用开发时会在一个台机器上运行不同的应用.(1) 为了降低成本, 进行服务器整合(2)将一个整体式的应用拆分成低耦合的单个服务(微服务架构)
5.整合服务器Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用, 以及能在多个实例之间共享没有使用的内存, Docker可以比虚拟机提供更好的服务器整合解决方案。
6.调试能力Docker提供了很多的工具, 这些工具不一定只是针对容器, 但是却适用于容器. 他们提供了很多功能, 包括可以为容器设置检查点, 设置版本, 查看两个容器之间的差别, 这些特性可以帮助调试Bug.
7.多租户环境多租户环境的应用中, 它可以避免关键应用的重写.我们一个特别的关于这个场景的例子是为loT(物联网)的应用开发一个快速, 易用的多租户环境. 这种多租户的基本代码非常复杂, 很难处理, 重新规划以应用不但消耗时间, 也浪费金钱.
使用Docker, 可以为每一个租户的应用层的多个实例创建隔离的环境, 这不仅简单而且成本低廉, 因为Docker环境启动的速度快, diff命令很高效.
8.快速部署Docker为进程创建一个容器, 不需要启动一个操作系统, 时间缩短为秒级别.可以在数据中心创建销毁资源而无须担心重新启动带来的开销. 通常数据中心的资源利用率只有30% , 通过使用Docker并进行有效的资源分配可以提高资源的利用率。
9.环境标准化和版本控制Docker容器可以在不同的开发与产品发布生命周期中确保一致性,进而标准化你的环境。除此之外,Docker容器还可以像git仓库一样,可以让你提交变更到Docker镜像中并通过不同的版本来管理它们。设想如果你因为完成了一个组件的升级而导致你整个环境都损坏了,Docker可以让你轻松地回滚到这个镜像的前一个版本。这整个过程可以在几分钟内完成,如果和虚拟机的备份或者镜像创建流程对比,那Docker算相当快的,它可以让你快速地进行复制和实现冗余。此外,启动Docker就和运行一个进程一样快。
1.2 Docker的优缺点
优点
- 跨平台可移植性:按统一标准打包(镜像中),可传播。
- 面向应用:优化部署应用(设计哲学)→API,接口及文档(体现)。
- 版本控制:追踪、查询、记录版本信息(应用程序更改史)和回滚版本等
- 组件复用:组件式搭建(基础镜像)→Python(运行环境) | postgreasql(基础镜像)。
- 共享性:公共的注册服务器(可免费下载源码)。
缺点Docker 的安装非常容易.目前,Docker支持所有的Linux系列系统,(Ubuntu,RHEL,Debian等).通过Boot2Docker虚拟工具,在OS X 和 Windows下也能够正常运行Docker.注: Docker运行环境的限制:
- 必须是64位机器上运行,目前仅支持 x86_64和AMD64,32系统不支持.
- 系统的Linux内核必须是3.8或者更高,内核支持Device Mapper,AUFS,VFS,btrfs等存储格式.
- 内核必须支持cgroups和命名空间.
1.3 Docker运行时与编排引擎
多数技术人员在谈到 Docker 时,主要是指 Docker 引擎。
Docker 引擎是用于运行和编排容器的基础设施工具。有 VMware 管理经验的读者可以将其类比为 ESXi。
ESXi 是运行虚拟机的核心管理程序,而 Docker 引擎是运行容器的核心容器运行时。
其他 Docker 公司或第三方的产品都是围绕 Docker 引擎进行开发和集成的。
如下图所示,Docker 引擎位于中心,其他产品基于 Docker 引擎的核心功能进行集成。Docker 引擎可以从 Docker 网站下载,也可以基于 GitHub 上的源码进行构建。无论是开源版本还是商业版本,都有 Linux 和 Windows 版本。
Docker 引擎主要有两个版本:企业版(EE)和社区版(CE)。
每个季度,企业版和社区版都会发布一个稳定版本。社区版本会提供 4 个月的支持,而企业版本会提供 12 个月的支持。
社区版还会通过 Edge 方式发布月度版。
从 2017 年第一季度开始,Docker 版本号遵循 YY.MM-xx 格式,类似于 Ubuntu 等项目。例如,2018 年 6 月第一次发布的社区版本为 18.06.0-ce。
注:2017 年第一季度以前,Docker 版本号遵循大版本号.小版本号的格式。采用新格式前的最后一个版本是 Docker 1.13。
Docker的安装
Docker 可以安装在 Windows、Mac、 Linux 系统之上。既可以在云上安装,也可以在个人笔记本电脑上安装。
2.
Ubuntu安装Docker
安装新版本的Docker之前,需要先检查是否已安装旧版本的Docker,如果已安装先卸载。Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
$ apt-get remove docker docker-engine docker.io containerd runc
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker 。
(1)设置仓库
更新 apt 包索引。
$ apt-get update
安装 apt 依赖包,用于通过HTTPS来获取仓库:
$ apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
添加 Docker 的官方 GPG 密钥
$ curl-fsSLhttps://download.docker.com/linux/ubuntu/gpg | apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。
root@ubuntu:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -OKroot@ubuntu:~# apt-key fingerprint 0EBFCD88pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88uid [ unknown] Docker Release (CE deb) <docker@docker.com>sub rsa
40962017-02-22 [S]
使用以下指令设置稳定版仓库
$ add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
(2)安装 Docker Engine-Community
更新 apt 包索引。
$ apt-get update
安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:
$ apt-get install docker-ce docker-ce-cli containerd.io
要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:
使用第二列中的版本字符串安装特定版本,例如 18.06.1~ce~3-0~ubuntu
。
$ apt-cache madison docker-ce
docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages ... $ apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> c
ontainerd.io
安装完成后,运行下面的命令,验证是否安装成功。
$ docker version#或者 $ docker info
2.2
CentOS安装Docker
Docker 支持以下的 64 位 CentOS 版本:
CentOS 7CentOS 8更高版本…该 centos-extras 库必须启用。默认情况下,此仓库是启用的,但是如果已禁用它,则需要重新启用它。
卸载旧版本较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
$ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装 Docker Engine-Community使用 Docker 仓库进行安装在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
使用以下命令来设置稳定的仓库。
$ yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker Engine-Community安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:
$ yum install docker-ce docker-ce-cli containerd.io
如果提示您接受 GPG 密钥,请选是。
有多个 Docker 仓库吗?如果启用了多个 Docker 仓库,则在未在 yum install 或 yum update命令中指定版本的情况下,进行的安装或更新将始终安装最高版本,这可能不适合您的稳定性需求。
Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。
要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:1、列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
$ yum list docker-ce --showduplicates | sort-r
docker-ce.x86_64 3:18.09.1-3.el7
docker-ce-stabledocker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stabledocker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stabledocker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
2、通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1
。
$ yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> contain
erd.io
启动 Docker。
$ systemctl start docker
通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
$ docker run hello-world