Docker简介
是什么
Docker可以解决什么问题?
- 在开发过程中,开发人员只关心源代码,而不关心运行环境。在运维人员那里可能出现环境不一致导致运行不起来的情况。我们可以将整体的运行环境+源代码交给运维人员,运维人员带环境安装,就可以通过Docker镜像实现。
- 在集群中,安装和配置软件是很麻烦的。通过Docker来安装软件将会很方便。
- Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
Docker理念
- 回顾我们安装虚拟机的时候,如何保证在每个平台上都可以运行同一个.iso镜像文件的?答案就是将.iso镜像文件运行在虚拟机软件之上。Docker就类似这里的虚拟机软件
- Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
- Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
- 总结:Docker是解决了运行环境和配置问题的软件容器。方便做持续集成并有助于整体发布的容器虚拟化技术。
容器与虚拟机比较
虚拟机就是带环境安装的一种解决方案。
- 传统虚拟机:在主操作系统上的虚拟机管理系统中安装从操作系统,需要虚拟各种硬件。缺点:资源占用多、冗余步骤多、启动慢
容器虚拟化
- 由于前面虚拟机的缺点,LInux发展出了另一种虚拟化技术:Linux容器(Linux Containers,简称LXC)
- Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
- Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行
- 对比

- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
- 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
- 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
Docker为什么比虚拟机快?
Docker有着比虚拟机更少的抽象层,不需要向虚拟机先对硬件资源进行虚拟,而是直接使用实际物理机的硬件资源。
Docker利用的是宿主机的内核,而不需要加载操作系统内核。比如启动一个Redis,虚拟机需要先启动系统再启动Redis;而Docker只需要启动Redis即可。从而避免了加载操作系统的时间消耗。

Docker作用
- 更快速的应用交付和部署:传统的应用开发完成后部署很麻烦,使用Docker后只需要交付Docker容器镜像文件,在正式环境中加载镜像并运行即可
- 更便捷的升级和扩缩容:由于不需要虚拟出各种硬件,通过镜像运行新的容器可以进行快速扩容
- 更简单的系统运维:应用容器化运行之后,不会因为环境的不同导致出现不一样的问题。
- 更高效的计算资源利用:内核级虚拟化,区别于传统虚拟机,将大大提升自愿的利用率。
Docker组成
Linux安装Docker前提
- Docker需要依赖Linux内核运行。要求系统为64位,Linux内核版本3.8及以上

- Docker需要依赖Linux内核运行。要求系统为64位,Linux内核版本3.8及以上
Docker的基本组成
- 镜像(image):理解为一个只读的模板,一个镜像可以创建多个Docker容器。
- 容器(container):容器是用镜像创建的运行实例。其中包括一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库(repository):集中存放镜像文件的场所。分为公开库(Public)和私有库(Private)。最大的仓库就是Docker Hub。国内经常使用阿里云仓库
- 注意:Docker本身只是一个容器运行载体或者说是管理引擎。我们将image镜像文件交给Docker运行,运行起来就是容器的实例。
Docker平台架构图
- 入门版

客户端可以通过Docker操作运行在Docker之上的容器。
镜像文件如果本地存在就可以直接运行生成容器实例,如果不存在需要先从网络拉取镜像。
客户端通过Docker后台守护进程来访问Docker中运行时实例。
- 架构版

Docker安装
以CentOS8为例安装Docker,步骤如下
- 安装gcc相关
yum -y install gccyum -y install gcc-c++
- 安装gcc相关
- 安装需要的软件包
sudo yum install -y yum-utils
- 添加阿里云镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum软件包索引
yum cache
- 安装Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
- 启动Docker
sudo systemctl start docker
- 查看运行状态
ps -ef | grep docker
- 查看版本信息
可以看到包括Client和Server端
- 运行HelloWorld

- Docker卸载
systemctl stop docker yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker rm -rf /var/lib/containerd
阿里云镜像加速
- 阿里云-容器镜像服务-镜像工具-镜像加速器




