注意:centos 6.9上默认是安装docker早期的1.7.*版本,后续docker 分CE和EE的版本,只能安装在centos 7.*上。
centos6.9环境中,因为有系统包名冲突的原因,所以docker的包名是docker-io,而不是docker,安装命令: sudo yum install docker-io, 安装完成后,
在CentOS上安装Docker有一定的版本要求,CentOS 7.X及其以后版本&3.10以后版本。
Docker 包括三个基本概念:镜像(Image)容器(Container)仓库(Repository)
镜像(Image)——一个特殊的文件系统
容器的种类 : 一次性容器 , 持续性容器 .
一次性容器 : 作为一种工具类型的容器,运行一次实现某个或者某组功能 . 例如 : 清理系统垃圾 , 对系统进行配置 , 部署应用等. 可以类比脚本程序 .
持续性容器 : 大多数应用程序运行的模式 , 在后台运行,并提供服务 .
操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。
Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构。 镜像实际是由多层文件系统联合组成。
容器(Container)——镜像运行时的实体
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
仓库(Repository)——集中存放镜像文件的地方
镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。
Registry公开服务是官方的Docker Hub ,这也是默认的Registry,并拥有大量的高质量的官方镜像,网址为:hub.docker.com/
Docker和K8S 使用的都是HTTP接口
Docker最核心的程序是Docker Engine,根据参数,它既可以作为后台daemon运行,也可以作为命令行工具使用。
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式:
-
host模式,使用--net=host指定。
-
container模式,使用--net=container:NAME_or_ID指定。
-
none模式,使用--net=none指定。
-
bridge模式,使用--net=bridge指定,默认设置。
Docker架构
Docker使用C-S架构,其客户端同Docker Daemon进行交互,主要的工作通过daemon来完成,包括拉取镜像、编译镜像、运行容器、发布容器等。Docker client和daemon可以运行在同一个系统上,也可以通过远程方式进行访问。Docker client和daemon之间是在 socket 上通过RESTful API来进行交互的。
Docker 的核心组件包括:
Docker 客户端 - Client
Docker 服务器 - Docker daemon
Docker 镜像 - Image
Docker 仓库 - Registry
Docker 容器 - Container
Docker运行流程:
- Docker 采用的是 Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信。
Docker 的架构:
Docker客户端:
- 通过 docker 我们可以方便地在 Host 上构建和运行容器
Docker服务端:
- Docker daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像
Docker镜像:
- 可将 Docker 镜像看着只读模板,通过它可以创建 Docker 容器.
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker容器:
- Docker 容器就是 Docker 镜像的运行实例。
Docker仓库:
- Registry 是存放 Docker 镜像的仓库,Registry 分私有和公有两种。
- docker pull 命令可以从 Registry 下载镜像。
docker run 命令则是先下载镜像(如果本地没有),然后再启动容器。
Docker的应用场景都有哪些
1. 作为云主机使用
2. 作为服务使用
Docker思想
-
集装箱
-
标准化: ①运输方式、②存储方式、 ③API接口
-
隔离
Docker容器的特点
-
轻量,在一台机器上运行的多个Docker容器可以共享这台机器的操作系统内核;它们能够迅速启动,只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件。这样就能尽量降低磁盘用量,并能更快地下载镜像。
-
标准,Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
-
安全,Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器。
Docker优点
-
Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;——一致的运行环境
-
可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间
-
避免公用的服务器,资源会容易受到其他用户的影响。——隔离性
-
善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
-
可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便
-
使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署
Docker容器部署服务的场景
1. Web应用服务
Web应用服务是使用最广泛的一类服务,典型的架构是前端一个Tomcat + Java服务,后端MySQl数据库。
例如下图所示。
Docker容器的Web服务
2. 持续集成和持续部署
互联网行业倡导敏捷开发,持续集成部署CI/CD便是最典型的开发模式。
Docker的持续集成持续部署流程
3. 微服务架构使用
微服务架构将传统分布式服务继续拆分解耦,形成一些更小服务模块,服务模块之间独立部署升级,这些特性与容器的轻量、高效部署不谋而合。
如下图所示,每个容器里可以使用完全不同环境的镜像服务,容器启动即产生了一个独立的微服务主机节点(独立的网络IP),上层服务与下层服务之间服务发现通过环境变量注入、配置文件挂载等多种方式灵活解决,而且还可以直接将云平台提供的各种云服务与自定义的微服务整合组成一个强大的服务集群。
更重要的是,拥有如此多服务的集群环境迁移、复制也非常轻松,只需选择好各服务对应的Docker服务镜像、配置好相互之间访问地址就能很快搭建出一份完全一样的新集群。
容器优势总结:
-
敏捷的应用创建与部署:相比虚拟机镜像,容器镜像的创建更简便、更高效。
-
持续的开发、集成,以及部署:在快速回滚下提供可靠、高频的容器镜像编译和部署(基于镜像的不可变性)。
-
开发与运营的关注点分离:由于容器镜像是在编译/发布期创建的,因此整个过程与基础架构解耦。
-
跨开发、测试、产品阶段的环境稳定性:在笔记本电脑上的运行结果和在云上完全一致。
-
在云平台与OS上分发的可转移性:可以在 Ubuntu、RHEL、CoreOS、预置系统、Google 容器引擎,乃至其它各类平台上运行。
-
以应用为核心的管理:从在虚拟硬件上运行系统,到在利用逻辑资源的系统上运行程序,从而提升了系统的抽象层级。
-
松散耦联、分布式、弹性、无拘束的微服务:整个应用被分散为更小、更独立的模块,并且这些模块可以被动态地部署和管理,而不再是存储在大型的单用途机器上的臃肿的单一应用栈。
-
资源隔离:增加程序表现的可预见性。
-
资源利用率:高效且密集。
容器 VS 虚拟机
两者对比图
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
容器与虚拟机 (VM) 总结
容器与虚拟机(VM)两者是可以共存的
就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。
一、安装docker的先决条件:
1.必须是64位CPU架构的计算机,Docker目前不支持32位CPU;
2.运行Linux3.8或更高版本内核,CentOS时内核必不小于3.10;
3.内核必须支持一种合适的存储驱动,可以是Device Manager、AUFS、vfs、btrfs、以及默认的驱动Device Mapper中的一个;
4.内核必须支持并开启cgroup和命名空间namespace功能。
安装分两种比较常见的情况:一种是Ubuntu环境下安装,一种是CentOS环境下进行安装,Ubuntu环境下的安装参见《第一本Docker书》,书中有详细的步骤,此处
只讨论CentOS环境下的安装。本文用的版本为CentOS7.1。
docker官方安装文档:https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1
二、检查前提条件
1.内核
通过uname命令来检查内核版本信息。
2.检查Device Mapper
ls -l /sys/class/misc/device-mapper
3、首先安装了yum-utils,它提供了yum-config-manager管理工具,然后安装了最新稳定版本的Repository文件,最后更新yum的package索引。
[root@localhost-01 ~ ]#
yum install -y yum-utils
三、安装docker
yum安装
1)使用root权限登录系统
2)更新系统包到最新
yum -y update
3)添加yum仓库
# cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
完成后如下:
4)安装docker包
yum install -y docker-engine
yum install -y docker-selinux
在使用现成的安装包安装的时候selinux的安装一定要在docker-engine之前。
yum list installed | grep docker
5)启动docker
systemctl start docker.service
6)查看一下当前系统上的进程,执行ps -ef | grep docker确认Docker已经启动:
7)验证docker已经正常安装
docker run hello-world
7)配置docker开机自启动
systemctl enable docker.service
四、使用yum卸载docker
1.列出安装的软件包
yum list installed | grep docker
2.移除软件包
yum -y remove docker-engine.x86_64