一、Docker介绍

Docker是一个开源的应用容器引擎,是一个轻量级容器技术。基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

Docker的理念:Build,Ship and Run Any App,Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到一次封装,到处运行。

在这里插入图片描述

Docker一次构建,随处运行

更快速的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

更高效的计算资源利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以可以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

几个核心概念

在这里插入图片描述
Host(主机):安装了Docker程序的机器(Docker直接安装在操作系统之上)。

Client(客户端):连接docker主机进行操作。

Registry(仓库):用来保存各种打包好的软件镜像。

Images(镜像):软件打包好的镜像;放在docker仓库中。

Container(容器):镜像启动后的实例称为一个容器,容器是独立运行的一个或一组应用、

Docker使用步骤: 安装Docker→在仓库中找到软件对应的镜像→使用Docker运行此镜像,生成Docker容器→对容器的启动和停止就是对软件的启动和停止。

Docker三要素

镜像(image,类似Java的类)

镜像就是一个模板(只读),容器就是镜像的一个实例。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

容器(container,类似Jva的对象)

Docker容器是用镜像创建的运行实例,一个容器运行一种服务。可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

容器的定义和镜像几乎一模一样,唯一区别在于容器的最上面那一层是可读可写的。

仓库(repository)

仓库(Repository)是集中存放镜像文件的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内类似的公开仓库有阿里云、网易云等。

在这里插入图片描述

Docker运行原理

Docker是如何工作的?
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,可以理解为集装箱的概念。

在这里插入图片描述
虚拟机和Docker有什么区别?

比较Docker容器VM虚拟机
操作系统与宿主机共享OS宿主机OS上运行虚拟机OS
存储大小镜像小,便于存储和传输镜像庞大(vmdk、vdi等)
运行性能几乎无额外性能损失操作系统额外的cpu、内存消耗
移植性轻便、灵活、适应于Linux笨重,与虚拟化技术耦合度高
部署速度快速,秒级较慢,10s以上
隔离级别进程之间的隔离操作系统之间的隔离
安全性低于VM虚拟机高于Docker容器
硬件亲和性面向软件开发者面向硬件运维者

为什么Docker比VM快?
(1)docker有着比虚拟机更少的抽象层
docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上、docker有明显优势。

(2)docker利用的是宿主机的内核,而不需要 宿主机OS 新建一个docker容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。避免引寻、加载操作系统内核等比较费时费资源的过程;新建一个VM虚拟机时,虚拟机软件需要加载 宿主机OS,整个新建过程是分钟级别的。而docker由于直接利用宿主机的OS,则省略了返个过程,新建一个docker容器只需要几秒钟。

二、centos7安装Docker

Docker安装参考手册英文版

Docker安装步骤

前提:确保Linux是centos7以上版本
在这里插入图片描述
第一步:安装gcc相关环境

#  依次执行下面两个命令:
yum -y install gcc
yum -y install gcc-c++

第二步:卸载旧版本的Docker(如果安装过)

# 直接使用下面的命令进行旧版本的卸载
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

第三步:安装需要的安装包

yum install -y yum-utils device-mapper-persistent-data lvm2

第四步:设置stable镜像仓库(改为阿里云)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第五步:更新yum软件包索引(可以使Docker变得更快)

yum makecache fast

第六步:安装DockerCE

yum -y install docker-ce

至此,Docker安装完毕。

Docker使用

启动Docker

# 启动Docker服务
systemctl start docker

配置镜像加速

阿里云的镜像可以自己到阿里云官网查看。

# 在etc下创建docker文件夹
mkdir -p /etc/docker
# 创建docker配置文件
vim  /etc/docker/daemon.json
		 #网易云
		{"registry-mirrors": ["http://hub-mirror.c.163.com"] }
		 
		 #阿里云
		,{
		  "registry-mirrors": ["https://{自已的编码}.mirror.aliyuncs.com"]
		}

# 重新加载daemon配置文件
systemctl daemon-reload
# 重启docker
systemctl restart docker

测试

# 查看Docker版本
docker version
# 测试helloworld是否成功
docker run hello-world

在这里插入图片描述
docker run hello-world干了什么?

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐