Docker学习笔记---day001
Docker学习笔记—day001
文章目录
- Docker学习笔记---day001
- 1、Docker基本概念
- 1.1、问题1:为什么会有Docker的出现呢?
- 1.2、Docker概念(go语言)
- 1.3、容器和虚拟机技术
- 1.4、Docker和虚拟机的不同之处
- 1.5、Docker的优点
- 2、Docker的下载安装
- 2.1、镜像
- 2.2、容器
- 2.3、仓库
- 3、Docker图解与工作原理
- 3.1、图解操作
- 3.2、Docker的工作原理
1、Docker基本概念
1.1、问题1:为什么会有Docker的出现呢?
由于开发环境和测试环境可能存在版本差异或配置不一致,导致代码无法正常运行。
解决方案:采用Docker容器化部署,完整复制原始运行环境。(完成系统的平滑移植、容器虚拟化技术)
Docker的出现打破了过去的“程序即应用”的观念。通过镜像(Images)将作业系统核心除外,运行应用程序所需要的系统环境,由上而下打包,达到应用程序跨平台间的无缝接轨运作。
例如:我们可以将其想象为VM创建虚拟机的过程

1.2、Docker概念(go语言)
Docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
Docker的主要目标是“Build,Ship and Run Any App,Anywher”,即通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能够做到“一次镜像、到处运行”。
1.3、容器和虚拟机技术
- 传统虚拟机技术:基于安装在主操作系统上的虚拟机管理系统(VM),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统(Centos 7 ),在从操作系统中部署相关应用(Jar包)。
缺点: 资源占用多、冗余步骤多、启动慢
例如:有Mysql、Redis、MongoDB分别在三台不同的Centos7中,此时会造成资源浪费,其实三个环境完全可以复用一台Centos 7 。 - 容器虚拟化技术(LXC):是与系统其它部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

Docker容器是在操作系统层面上实现了虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统虚拟机相比,Docker优势体现为启动速度快,占用体积小。
1.4、Docker和虚拟机的不同之处
- 传统虚拟机技术室虚拟出一套硬件后,在其上运行一个完整的从操作系统,在该系统上在运行所需应用进程。
- 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且没有进行硬件虚拟。因此容器要比传统虚拟机更轻便。
- 每个容器之间相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
1.5、Docker的优点
- 一次构建、随处运行:
更快速的应用交付和部署、更便捷的升级和扩缩容、更简单的系统运维、更高效的计算资源利用。 - 应用场景
Docker借鉴了集装箱的概念。将标准的集装箱运往各地,Docker将这个模式运用到自己的设计中,唯一不同的:Docker运输的是软件,集装箱是货物。
2、Docker的下载安装
Docker官网:http://www.docker.com/
Docker Hub官网(安装Docker镜像的仓库):https://hub.docker.com/
Docker并非是一个通用的容器,它依赖于已存在并运行的Linux内核环境。

Docker的三件套:镜像(Image)、容器(Container)、仓库(Repository)
Docker镜像(Image)就是一个只读的模版。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
相当于容器的“源代码”,docker镜像文件类似于Java的类模版,而Docker容器实例类似于Java中new出来的实例对象。
| Docker | 面向对象 |
|---|---|
| 容器 | 对象 |
| 镜像 | 类 |
2.1、镜像
- 从面向对象的角度
Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台 - 从镜像的角度
对象**的角度
Docker 利用可以把容器看做是一个简易版的Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
2.2、容器

容器实例由两部分所组成:最小最核心的Linux内核文件和像Redis、Mysql这样应用所组成。
2.3、仓库
仓库(Repository)是集中存放镜像文件的场所
类似于
- Maven仓库:存放各种jar包的地方
- github仓库:存放各种git项目的地方
- Docker Hub:存放各种镜像模版的地方。
仓库分为公开仓库(pubilc)和私有仓库(Private)两种形式。
最大的公开仓库是Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。
注意:Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是一个Image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似于Java中new出来一个对象)。
image文件可以看做是容器的模版。Docker根据image文件生成容器实例。同一个image文件,可以生成多个同事运行的容器实例。
- 镜像文件:image文件生成的容器实例,本身也是一个文件,称为镜像文件。
- 容器实例:一个容器运行一种服务,当我们需要的时候,就可以通过Docker客户端创建一个对应的运行实例,也就是我们的容器。
- 仓库:就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以。
3、Docker图解与工作原理
3.1、图解操作

- docker build:根据Dockerfile中的指令自动构建新的Docker镜像。
- docker pull:从远程仓库拉取镜像并下载到本地仓库。
- docker run:根据制定的镜像版本,创建并启动一个新的容器。
3.2、Docker的工作原理
Docker是一个Cilent-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境。

