![](https://img-blog.csdnimg.cn/img_convert/2d1a06b4c4a6ff85adab99cd3dc434cc.jpeg)
背景:
①现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案就是上面提到的虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。
②然而,虚拟技术把大量内存浪费在“无用”的操作系统上,太过“笨重”,因此容器技术应运而生。
③container 容器、集装箱
集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。
*集装箱之间相互隔离
*长期反复使用
*快速装载和卸载
*规格标准,在港口和船上都可以摆放
④与虚拟机通过操作系统实现隔离不同,容器技术 只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。
一、什么是docker
注:容器是一种通用技术,docker只是其中的一种实现。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现。这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。
通俗点说,我们使用Docker,只需要配置一次Docker容器上面的应用,就可以跨平台,跨服务器,实现应用程序跨平台间的无缝衔接。
(Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中然后发布到任何流行的Linux机器上,也可以实现虚拟化)
一句话,Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
![](https://img-blog.csdnimg.cn/img_convert/4f91066f1d5a3d46c9e10fb7e5f69851.png)
![](https://img-blog.csdnimg.cn/img_convert/74375dc334e7e646596209fa26ef1093.png)
二、如何使用docker
(1)docker(编译器)中有这样几个概念:
dockerfile(源代码)
image(可执行程序.exe)
container(运行起来的进程)
实际上你可以简单的把image理解为可执行程序,container就是运行起来的进程。
那么写程序需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。
因此我们只需要在dockerfile中指定需要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编译”,也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命令,image运行起来后就是docker container。
(2)Docker 架构
Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
(3)docker是如何工作的
docker使用了常见的CS架构,也就是client-server模式。docker client负责处理用户输入的各种命令,比如docker build、docker run。真正工作的其实是server,也就是docker demon。值得注意的是,docker client和docker demon可以运行在同一台机器上。
①docker bulid(创建镜像)
②docker run(运行镜像,生成容器)
③docker pull(下载镜像)