【Docker】一篇入门基础与镜像原理

本文详细介绍了Docker的基础知识,包括Docker的背景、虚拟化技术的对比、容器与虚拟机的区别,以及Docker的基础组件如Docker Daemon、客户端和镜像。文章还探讨了Docker容器的生命周期,解释了Docker镜像的分层原理,强调了Docker在资源管理和效率方面的优势。最后,文章涵盖了Dockerfile的使用和Docker容器的管理。
摘要由CSDN通过智能技术生成

第一章 Docker介绍

1.1 背景介绍

Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、Dockerfile等。Docker理念是将应用及依赖包打包到一个可移植的容器,可发布到任意Linux发行版Docker引擎上。使用沙箱机制(对内容进行了独立包装)运行程序,程序之间互相隔离;Docker使用Go语言开发。

​ Docker采用C/S架构,Docker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建、运行容器等。客户端为用户提供了一系列的指令。

vmware虚拟机 + centos(ISO镜像) = 得到一个可以使用的Linux系统

传统的纯物理部署的缺点:

screen-capture

虚拟化技术:

screen-capture

虚拟化也有局限性,每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多道一定程度时,操作系统本身资源也就消耗殆尽,或者说必须扩容。

虚拟化:云服务器,其实就是使用网上的虚拟机。

虚拟机工具巨头:

  • vmware workstation (属于个人学习使用),主要是用于windows平台。创建虚拟机(安装系统)
  • linux下的虚拟工具,kvm工具。(创建虚拟机+安装各种系统)
  • 企业版虚拟化 vmware esxi虚拟化工具,高性能服务器结合。进行平台资源虚拟化。

云计算:将计算工作,放在云上去执行。例如:去阿里云购买RDS数据库服务,不需要自己搭建数据库,做数据库高可用等等。

screen-capture

1.2 虚拟化背景:

​ 虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。

​ 全虚拟化:VMware提出一种二进制翻译技术。VMware在虚拟机操作系统和宿主计算机(物理计算机+windows/mac操作系统)之间扮演一个桥梁的角色,将虚拟机中的要执行的指令“翻译”成恰当的指令在宿主物理计算机上执行,以此来模拟执行虚拟机中的程序。

​ 半虚拟化(Xen内核定制修改),与全虚拟化相比避免了敏感指令(删除之类的)对本体系统的修改,降低操作风险。这项技术的代表是Xen,它最大的问题是需要修改操作系统源码,Linux开源倒是可以,windows是闭源的。

​ 硬件辅助虚拟化(VT/AMD -v),CPU辅助虚拟化。

​ KVM-QEMU,KVM全称for Kernel -based Virtual Machine,意为基于内核的虚拟机。KVM作为一项虚拟化技术已经集成到Linux内核之中。也会安装出一个完整的操作系统,与VMware在这方面相同。

容器技术-LXC&Docker,前面的技术其虚拟化的目标都是一台完整的计算机,拥有底层的物理硬件、操作系统和应用程序执行的完整环境。为了让虚拟机中的程序实现像在真实物理机器上运行“近似”的效果,背后的HyperVisor做出了大量的工作(相当于装东西的盒子太过豪华,对于要装的内容来说其实没必要)。而docker 其实就满足了程序运行的环境需要(大小与外观适合的盒子,说装袜子就装袜子,想装衣服就重拿个盒子)。

screen-capture

1.3 容器技术

​ Docker 最初是DotCloud公司在法国期间发起的一个公司内部项目,后来以Apache2.0授权协议开源,其是由go语言开发的,基于Linux内核的Cgroups、NameSpace,以及Union FS(联合唯一文件系统)等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。

​ 由于隔离的进程独立宿主机和其他隔离的进程(在本体主机上,运行两个端口相同的软件也不会冲突),也被称之为容器。

​ Docker被定义为开源的容器引擎,可以方便的对容器进行管理。如对镜像打包封装、引入Docker Registry对镜像统一管理。利用Docker可以实现开发、测试、生产环境的部署一致性,极大的减少运维成本。

screen-capture

screen-capture

1.4 容器和虚拟机的差异

1.4.1 传统虚拟机技术

​ 虚拟机是虚拟出一套硬件,在其上运行一个完整的操作系统,例如我们使用KVM,指定系统镜像,然后装系统,最终可以使用,在该系统上再运行所需的应用程序

​ KVM创建虚拟机时,指定较少的CPU, 内存,硬盘等资源,虚拟机性能较低。

screen-capture

1.4.2 容器技术

​ 容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比起虚拟机更为轻便。(容器内的程序,就好比直接运行在宿主机上,能够使用宿主机最大的硬件资源,但程序之间又是隔离的。)

1.4.3 容器对比KVM的好处

  • 容器能够提供宿主机原生的性能,而KVM虚拟机是分配宿主机硬件资源,性能较弱。
  • 同样配置的宿主机,最多可以启动10个虚拟机的话,可以启动100+的容器数量。
  • 启动一个KVM虚拟机,得有一个完整的开机流程,花费时间较长,或许得20s,而启动一个容器只需要1s.
  • KVM需要硬件CPU的虚拟化支持,而容器不需要。
  • docker提供了除内核以外完整的运行时环境,确保了应用环境的一致性。

第二章 Docker 基础组件

运行镜像生成容器。

screen-capture

2.1 Docker Daemon

安装使用Docker, 得先运行Docker Daemon进程(服务),用于管理docker。

  • 镜像 images,构建容器(我们将应用程序所需的环境,打包为镜像文件)。镜像仓库(dockerhub),用于保存镜像文件,提供上传、下载镜像,作用好比GitHub。
  • 容器 containers
  • 网络 network
  • 数据卷 Data Volumes

2.2 Rest 接口

提供和Daemon交互的Api接口

2.3 Docker Client

客户端使用Rest Api和Docker Daemon进行访问。

2.4 Docker 平台组成

screen-capture

2.5 Images

​ 镜像是一个只读模板,用于创建容器,也可以通过Dockerfile文本描述镜像的内容。镜像的概念类似于编程开发里面对象的类,从一个基类开始(基础镜像Base Image)。构建容器的过程,就是运行镜像,生成容器实例。

​ Docker镜像的描述文件是Dockerfile,包含了如下的指令。

  • FROM定义基础镜像
  • MAINTAINER 作者
  • RUN 运行Linux命令
  • ADD 添加文件/目录
  • ENV 环境变量
  • CMD 运行进程

Dockerfile,将你部署项目的操作,写成一个部署脚本,这就是dockerfile,且该脚本还能够构建出 镜像文件。

2.6 Container

容器是一个镜像的运行实例,镜像>容器。

创建容器的过程:

  • 获取镜像,如 docker pull centos,从镜像仓库拉取。
  • 使用镜像创建容器。
  • 分配文件系统,挂载一个读写层,在读写层加载镜像。
  • 分配网络/网桥接口,创建一个网络接口,让容器和宿主机通信。
  • 容器获取IP地址。
  • 执行容器命令,如/bin/bash
  • 反馈容器启动结果。

第三章 安装docker

提前准备好一个宿主机(vmware 去创建一个linux机器,然后安装docker去使用),虚拟化+容器

基础配置:

wget -0 /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -0 /etc/yum.repos.d/epel.repo http://mirrors
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值