目录
Docker介绍
Docker与传统虚拟机相比的优势
Docker基础插件
Docker镜像
容器和仓库
Docker介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵从Apache2.0开源协议,依赖Linux内核的Cgroup和Namespace等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
Docker解决了运行环境和配置不兼容问题,方便做持续集成并有助于整体发布的容器虚拟化技术
目标:Build once,Run anywhere(一次封装,到处运行)
Docker与传统虚拟机相比的优势
Docker可以更高效的利用系统资源:容器不需要进行硬件虚拟以及运行完整操作系统的虚拟等额外开销,对系统资源的利用率更高;
1.更快速的启动时间:容器应用直接运行于宿主机内核,无需启动完整的操作系统,可以做到秒级、甚至毫秒级启动时间;
2.一致的运行环境:镜像提供了完整的运行时环境,确保开发、测试、生产等运行环境一致性;
3.持续交付和部署:通过Dockerfile构建镜像,可以结合持续继承、持续交付、持续部署;
4.更轻松的迁移:Docker镜像确保运行环境一致性,使得服务迁移更加容易;
5.更轻松的维护和扩展:Docker使用分层镜像技术使得重复部分复用更为容易,维护更新、基于镜像继续扩展也变得简单;
Docker基础插件
镜像(Images):Docker 镜像就是一个只读的模板。镜像可以用来创建 Docker容器,一个镜像可以创建很多容器。有镜像才有容器,它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
容器(Container):从面向对象角度Docker 利用容器是独立运行一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。容器可以看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序
仓库(Repository): 是集中存放镜像文件的场所。 类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种项目代码的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
Docker镜像
Docker镜像在服务器存储和运行时,作为Linux的一个文件系统
Docker镜像默认使用Overlay2文件系统(还支持AUFS、Btrfs、Device mapper、OverlayFS、ZFS等联合文件系统),具有以下特点
分层(Layer):一个镜像可以多个中间层组成,多个镜像可以共享同一中间层,也可以通过在镜像添加多一层来生成一个新的镜像(一个平台多个组件如果使用相同的基础镜像,可以大大减少存储空间占用量并提高镜像拉取效率)
只读(read-only):镜像在构建完成之后,便不可以再修改
写时复制:docker 镜像使用了写时复制(copy-on-write)的策略,多个同镜像的容器之间共享镜像只读层,容器内文件发生变化时,把变化的文件内容复制到可读写层,大大减少了多容器下对磁盘空间的占用
容器和仓库
容器:一种特殊的隔离的进程方法
1.Docker封装LXC技术实现容器管理(从 0.9 版本开始使用 libcontainer 替代了LXC)
2.当Docker通过镜像创建一个容器时,就是将镜像定义好的用户空间作为独立隔离的进程运行在 宿主机的Linux内核之上。
3.基于Namespace和Cgroups技术实现容器进程间隔离
a. Namespace:实现资源隔离,包括进程、网络、挂载点等
b. Cgroups :用来限制容器使用的资源配额,包括CPU、内存、磁盘等、、
仓库:是集中存放镜像文件的场所
- 支持镜像拉取、存储、推送等服务
- 公共仓库:一般是指Docker Hub
- 私有仓库 :Docker官方提供了registry这个镜像,可以用于搭建私有仓库服务,产品比如Harbor