docker介绍篇
相关地址
docker 官网:https://www.docker.com/
官方文档:https://docs.docker.com/install/linux/docker-ce/centos/
中文文档:http://www.dockerinfo.net/document
docker仓库:https://hub.docker.com/
阿里云仓库:https://cr.console.aliyun.com/cn-shanghai/instances/repositories
docker 介绍
Docker 是基于 Go 语言实现的开源容器项目,一种容器技术,目前已有 80 多个相关开源组
件项目(包括 Containerd Moby Swarm 等),逐渐形成了围 Docker 容器的完整的生态体系
Docker 的构想是要实现“ Build Ship and Run Any App, Anywhere ”,即通过对应用的封
装( Packaging )、分发( Distribution )、部署( Deployment )、运行( Runtime )生命周期进行管理,达到应用组件级别的“一次封装 ,到处运行” 这里的应用组件, 既可以是一个 Web
用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。
实现Devops的工具。
与虚拟机的区别
比虚拟机更轻量,占用资源更少,部署基块,启动快;隔离行没有虚拟好
Hypervisor管理虚拟机
Docker Engine管理docker
虚拟机存在自己的系统,比较重,docker使用宿主机的系统,更加轻量。
docker的作用
优点:
- 替代虚拟机:只关心应用不关心操作系统时;比虚拟机启动速度快,迁移轻量,分层文件系统,脚本化
- 软件原型:提供沙箱环境
- 打包软件:用户可以构建镜像,并确保它可以运行在任何现代 Linux机器上——就像Java一样,但不需要JVM。减少运维部署工作量
- 让微服务架构成为可能:Docker 有助于将一个复杂系统分解成一系列可组合的部分,这让用 户可以用更离散的方式来思考其服务。用户可以在不影响全局的前提下 重组软件使其各部分更易于管理和可插拔。
- 网络建模:可以在一台机器上启动数百 甚至数千个隔离的容器
- 离线时启用全栈生产力:可以将系统中所有部分捆绑在docker容器中,可以将其编排运行在笔记本电脑中移动办公
- 降低调试支出:Docker让用户可以清晰地说明(即便是脚本的形式) 在一个属性已知的系统上调试问题的步骤,错误和环境重现变得更简 单,而且通常与所提供的宿主机环境是分离的。
- 文档化软件依赖与接触点:通过使用结构化方式构建镜像,为迁移到不同环境做好准备, Docker 强制用户从一个基本出发点开始明确地记录软件依赖
- 启用持续交付:通过实现一个以Docker为中心的可重现的构建过程,标准的持续交 付技术,如蓝/绿部署(blue/green deployment,在生产环境中维护“生 产”和“最新”部署)和凤凰部署(phoenix deployment,每次发布时都重 新构建整个系统)变得很简单
基本概念
docker 镜像
镜像:文件+元数据的集合;一个文件系统 存储了环境信息
镜像是以分层方式存放,分层文件系统,节约空间。比如一个web程序,最上层代码,下一层node依赖,再下一层ubuntu系统;每一层可以被其他镜像共享
镜像分层,镜像只读不可修改
- BootFS 主要包含BootLoader 和Kernel, BootLoader主 要是引导加载Kernel, 当Boot成功后,Kernel被加载到内存中BootFS就被卸载了。
- RootFS包含的就是典型 Linux 系统中的 /dev、/proc、/bin 等标准目录和文件。
所以docker镜像的最底层都是kernel与rootfs,系统环境
容器
从镜像创建的应用运行实例;就是简易版linux环境
仓库
集中存放镜像文件(分为公开仓库(docker hub【官网】,阿里云等),私有仓库)
注册服务器
(Registry):存放仓库的服务器
Registry(存放docker镜像的地方 dock hub)
Repository:registry中,docker镜像存储在repostiory中;repository是具有相同名字,不同标签的docker镜像集合(可以表示同一类,不同版本)
容器运行着由镜像定义的系统。这些镜像由一 个或多个层(或差异集)加上一些Docker的元数据(基础配置,例如:监听端口,环境变量等)组成。
创建Docker镜像的方式
方 法 | 描 述 |
---|---|
Docker命令/“手工” | 使用 启动一个容器,并在命令行输入命令来创建镜像。使用 来创建一个新镜像 |
Dockerfile | 从一个已知基础镜像开始构建,并指定一组有限的简单命令来构建 |
Dockerfile及配置管理(configurationmanagement,CM)工具 | 与Dockerfile相同,不过将构建的控制权交给了更为复杂的CM工具 |
从头创建镜像并导入一组文件 | 从一个空白镜像开始,导入一个含有所需文件的TAR文件 |
docker分层:
Docker在内部使 用写时复制(copy-on-write)机制来减少所需的硬盘空间量。每当一个运行中的容器需要写入一个文件时,它会通过将该项目 复制到磁盘的一个新区域来记录这一修改。在执行Docker提交时,这块 磁盘新区域将被冻结并记录为具有自身标识符的一个层。
写时复制 写时复制是计算技术中使用的一种标准的优化策略。在从模板创 建一个新的(任意类型)对象时,只在数据发生变化时才能将其复制进来, 而不是复制整个所需的数据集。依据用例的不同,这能省下相当可观的资 源。
所有这3层都可以被多个运行中的容器共享,就像一个共享库可以 在内存中被多个运行中的进程共享一样
docker引擎
docker支持以下等多种服务
- Docker 引擎:包括支持在桌面系统或云平台安装 Docker ,以及为企业提供简单安全
弹性的容器集群编排和管理; - DockerHub :官方提供的 托管服务,可以提供公有或私有的镜像仓库;
- DockerCloud :官方提供的容器云服务,可以完成容器的部署与管理,可以完整地支
持容器化项目,还有 CI CD 功能
Docker 目前分为两个版本:社区版本( Community Edition, CE )和企业版本
(Enterprise Edition, EE)
处理过程:
1、docker为c/s结构,在客户端执行pull/run/build命令,server端:docker进程会首先检查本地是否存在需要的镜像,如果存在,则直接使用;如果不存在,则到仓库(可配置)中找,然后现在到本地,由于镜像是分层的,所以当下载镜像时会发现下载过程是多个文件。
数据卷:
功能:1、持久化容器中的数据 2、容器之间可以共享数据
挂载到容器上的数据文件,像u盘一样,可以与多个容器共享。
数据容器卷
专门的容器存储数据卷;只要有其他容器依赖于它,这个容器会一直存在;如果其他容器都挂掉,则自动回收数据卷容器。
网络
容器与容器之间的通信