一、前言
前两天看到一篇文章 再见了 Docker!K8S 已成气候!,K8S这么高端我们是还没有玩过的,Docker倒是实践过一把,这个系列会简单介绍一下实战的过程,具体背景是因为我们有时需要给门店提供一个相对稳定的培训环境,但他们又不需要长期使用,没有必要长期占用机器,需要的时候临时再购买机器就好,然后用Docker快速部署应用,这一篇我们先来了解一下Docker一些基本概念。
二、概念
1、Docker是什么
Docker是一个开源的容器引擎,用来管理软件部署应用,可以把开发的软件代码及软件所依赖的运行环境都打包成一个镜像,镜像有版本控制功能。
注:我们收银台系统要安装到一台新的机器上,先要安装依赖如下:JDK、Nginx、Redis、MySQL、然后部署2个前端2个服务端应用,每次部署都需要耗费比较长的时间,这样针对不变化依赖环境我们可以考虑构建成镜像。
2、Docker仓库
Docker仓库是存放Docker镜像的地方,有官方的公共仓库,你也可以搭建你自己私有仓库,Docker仓库和Maven仓库概念其实是差不多的。
-
官方仓库
https://hub.docker.com/, 如果你要提交镜像需要注册一个账号,然后就可以通过命令将你自己的镜像推到仓库。另外还可以通过官方仓库快速安装一些软件,比如gitlab,如果自己直接搭建git仓库需要安装很多依赖(redis、mysql等)然后各种配置,用docker就一条命令docker pull去拉取镜像,然后用docker run 运行起来就可以了。
-
私有仓库
可以用Docker官方镜像 registry搭建私有仓库。
3、Docker镜像
Docker镜像是一个Linux文件系统,它包含运行在Linux内核之上的程序及相应的数据,Docker镜像与宿主机共享Linux内核。一个镜像可以创建多个Docker容器。
Docker镜像两个特性
-
镜像分层
先有一个base镜像,base镜像提供了最小化安装的Linux发行版本(比如centos、ubuntu等),然后Docker运行镜像启动容器,在容器内安装软件,然后可以保存为新的镜像。分层最主要目的能共享资源,比如多个镜像可以从同一个base镜像构建,这样在磁盘上只需要有一份base镜像,内存中也只需要加载一份base镜像,然后就可以为所有容器使用了。
-
镜像只读
镜像生成后不可修改,添加一层构建新的镜像是通过创建一个容器,然后在容器上安装或删除软件从而构成新的镜像。
4、容器
容器是通过镜像创建的,它是独立于宿主机的隔离进程,可以被启动、开始、停止、删除,每个容器是相互隔离的,镜像与容器的关系就像面向对象中类和对象之间的关系,镜像就是类,容器就是对象。
三、Docker原理
容器在内核层面由主要由两个独立的机制来保证,一个是cgroups,另外一个是namespace。
-
cgroups
主要是对资源进行控制,可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提一系列钩子。
-
namespaces
保证资源的隔离性,将资源放到不同的命名空间中,各个命名空间中的资源是相互隔离的。