一、Docker简介
1、背景
物理机时代
一个物理机上安装操作系统,然后直接运行我们的软件。也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费。
缺点
-部署慢
-成本高
虚拟机都不开,直接上物理机部署应用,那成本能不高嘛
-资源浪费
硬件资源没有合理利用
-不易迁移和增加机器
每次迁移都要重新安装一模一样的运行环境等
-受限于硬件
虚拟机时代
一个物理机上虚拟化出来多个虚拟机,每个虚拟机上进行安装操作系统,然后在虚拟机上直接运行我们的软件。比如阿里云、腾讯云等云服务器都是虚拟机。
特点
-多部署
一个物理机上创建多个虚拟机,每个虚拟机的ip都不同,一个软件可以在不同虚拟机上进行部署。
-资源隔离
>每个虚拟机都由独立分配的内存磁盘等硬件资源,通过Hypervisor分配。
-易扩展
随时随地都能在一个物理机上开出新的虚拟机。成本也低。
-成本相对较低
缺点
-虚拟机需要安装操作系统
>假设我们的应用程序只有几KB,或者几十MB,但是却要在虚拟机上安装一个几百兆的操作系统来跑。
容器化时代
虚拟化技术是物理硬件的隔离,容器化技术是app层面的隔离,两者不冲突。往往容器化时代都是基于虚拟机基础之上做的资源隔离。它可以基于虚拟机的操作系统部署多服务,不再需要额外安装操作系。
特点
-标准化的迁移方式
开发者将环境和程序打包给运维,运维直接执行就完事了。
-统一的参数配置
-自动化部署
-应用集群监控
-开发与运维之间的沟通桥梁
传统虚拟机和Docker的比较
2、Docker是什么
docker官方地址:https://www.docker.com/
Docker is an open platform for developing,shipping,and running applications.Docker enables you to separate your applications from your infrastructure so you can deliver software quickly.With Docker,you can manage your infrastructure in the same ways you manage your applications.By taking advantage of Docker’s methodologies for shipping,testing,and deploying code quickly,you can significantly reduce the delay between writing code and running it in production.
Docker最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,于2013年3月以Apache 2.0授权协议开源,主要项目代码在GitHub上进行维护。
Docker使用Google公司推出的Go语言进行开发实现。
Docker是linux容器的一种封装,提供简单易用的容器使用接口。它是最流行的Linux容器解决方案。
Docker的接口相当简单,用户可以方便的创建、销毁容器。
Docker将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器。程序运行在虚拟容器里,如同在真实物理机上运行一样,有了Docker,就不用担心环境问题了。
Docker concepts
Docker is a platform for developers and sysadmins to**build,run,and share**applications with containers.The use of containers to deploy applications is called*containerization*.Containers are not new,but their use for easily deploying applications is.
Containerization is increasingly popular because containers are:
-Flexible:Even the most complex applications can be containerized.
灵活:即使是最复杂的应用也可以集装箱化。`
-Lightweight:Containers leverage and share the host kernel,making them much more efficient in terms of system resources than virtual machines.
轻量级:容器利用并共享主机内核,使它们在系统资源方面比虚拟机效率更高`
-Portable:You can build locally,deploy to the cloud,and run anywhere.
便携式:您可以在本地构建,部署到云,并在任何地方运行`
-**Loosely coupled**:Containers are highly self sufficient and encapsulated,allowing you to replace or upgrade one without disrupting others.
松耦合:容器是高度自给自足和封装的,允许您更换或升级一个容器,而不会中断其他容器。`
-**Scalable**:You can increase and automatically distribute container replicas across a datacenter.
可扩展:您可以在数据中心增加并自动分发容器副本。`
-**Secure**:Containers apply aggressive constraints and isolations to processes without any configuration required on the part of the user.
安全:容器对进程应用严格的约束和隔离,而不需要用户进行任何配置。`
**以上引自docker官方文档:https://docs.docker.com/get-started/**
3、Docker应用场景
-web应用的自动化打包和发布
-自动化测试和持续集成、发布
-在服务型环境中部署和调整数据库或其他应用
4、Docker三大概念
Docker架构
1.镜像image
docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
2.容器container
docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
3.仓库repository
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
一个Docker Registry中可以包含多个仓库
Repository
;每个仓库可以包含多个标签
Tag
;每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过:的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。
仓库分为两种,公有仓库和私有仓库,最大的公共仓库是docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。
5、Docker优势
1.更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。
无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行