1、背景

一款产品要上线的话需要两套环境,一个是开发环境;一个是线上环境。每个环境都要进行环境、应用配置,非常麻烦。

版本更新,导致服务不可用,考验就十分大。环境配置十分麻烦,每个机器都要部署环境(集群Redis、ES、Hadoop…),费时费力。

发布一个项目: Jar 包,需要一些环境,如Redis、MySQL、JDK等。如果可以把项目和环境一起打包 { Jar + (Redis、JDK、MySQL)} 安装,就很方便。

在一个服务器上配置一个应用的环境 Redis、MySQL、JDK、ES、Hadoop…配置超级麻烦,不能够跨平台。

传统的模式是开发给出Jar包,部署上线由运维来做。现在是有开发打包部署上线,一套流程做完!

Docker 为什么会出现:Docker 给以上的问题,提出来解决方案。

Docker 的思想来自于集装箱,隔离:Docker的核心思想!打包装箱!每个箱子是互相隔离的!

java --> apk --> 发布(应用商店) --> 张三使用apk --> 安装即可用
java --> Jar(环境) --> 打包项目带上环境(镜像) --> (Docker仓库:商店) --> 下载我们发布的镜像 --> 直接运行即可

2、Docker 是什么 ?

官方网址:Home - Docker

官方文档:Docker Documentation | Docker Documentation

仓库地址:Docker Hub Container Image Library | App Containerization


Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github上, 基于go语言并遵从Apache2.0协议开源。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化, 容器是完全使用沙箱机制, 相互之间不会有任何接口。

3、Docker 能做什么?

虚拟机技术

docker下部署 考试系统 docker试题_应用程序

虚拟化技术缺点:

1、资源占用十分多

2、冗余步骤多

3、启动很慢

容器化技术

容器化技术并不是模拟的一个完整的操作系统

docker下部署 考试系统 docker试题_Docker_02

Docker 和 虚拟化技术的不同:

  • 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个操作系统上安装和运行软件
  • 容器化技术,容器内的应用直接运行在 宿主机的内核上,容器是没有自己的内核的,也没有虚拟硬件,所以非常轻便。
  • 每个容器之间是互相隔离的,每个容器都有一个属于自己的文件系统,互不影响。

DevOps (开发、运维)

Docker 是一个用于开发,交付和运行应用程序的开放平台。

Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。

Docker 可以与管理应用程序相同的方式来管理基础架构。

Docker 可以快速交付,测试和部署代码,从而大大减少编写代码和在生产环境中运行代码之间的延迟。

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

Docker 是基于容器的平台,允许高度可移植的工作负载。

Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

优点

  • 应用更快速的交付和部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的计算资源利用

4、Docker 的安装

4.1、Docker 的基本组成

docker下部署 考试系统 docker试题_Docker_03

一个完整的Docker有以下几个部分组成:

  • Docker Client 客户端
  • Docker Daemon 守护进程
  • Docker Image 镜像
  • Docker Container 容器

什么是Docker?看这一篇干货文章就够了! - 知乎 (zhihu.com)

Docker 中有这样几个概念:

  • dockerfile
  • image
  • container

实际上你可以简单的把 image 理解为可执行程序,container 就是运行起来的进程。

那么写程序需要源代码,那么“写” image 就需要 dockerfile,dockerfile 就是 image 的源代码,docker 就是"编译器"。

因此我们只需要在 dockerfile 中指定需要哪些程序、依赖什么样的配置,之后把 dockerfile 交给“编译器” docker 进行“编译”,也就是 docker build 命令,生成的可执行程序就是 image,之后就可以运行这个 image了,这就是 docker run

dockerfile ===> (docker build命令) ==> image ===> (docker run命令) ==> container

docker pull :

我们可以从应用商店(APP Store)下载到别人写好的应用程序。

docker中 image 的概念就类似于 “可执行程序”,Docker Hub就是 docker 官方的 “应用商店(Docker Image Store)”,从这可以下载到别人编写好的 image,这样你就不用自己编写 dockerfile 了。

docker registry 可以用来存放各种 image,公共的可以供任何人下载 image 的仓库就是 docker Hub。那么该怎么从Docker Hub中下载image呢,就是这里的docker pull命令了。

用户通过docker client发送命令,docker daemon 接收到命令后向 docker registry 发送 image 下载请求,下载后存放在本地,这样我们就可以使用 image 了。


4.2、安装 Docker

环境查看

# 查看系统内核版本
uname -r
# 查看系统换进
cat /etc/os-release

4.3、卸载 Docker 引擎

  1. 卸载 Docker 引擎、CLI、Containerd 和 Docker Compose 包:
$ sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin	# 卸载依赖
  1. 主机上的镜像、容器、卷或自定义配置文件不会自动删除。删除所有映像、容器和卷:
# 删除资源
$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd

您必须手动删除任何已编辑的配置文件。

4.4、 hello-world 运行流程

run的运行流程:

docker下部署 考试系统 docker试题_应用程序_04

4.5、底层原理

Docker 是怎么工作的?

Docker是一个Client - Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!

Docker Server 接收到 Docker Client 的指令,就会执行这个命令!

docker下部署 考试系统 docker试题_docker下部署 考试系统_05

Docker 为什么比 虚拟机 快?

1、Docker 有着比虚拟机更少的抽象层。

2、Docker 利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。

3、由于 Docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用的都是实际物理机的硬件资源。

docker下部署 考试系统 docker试题_Docker_06