Docker是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低(因为是操作系统层面的虚拟化)。
Docker和虚拟机的区别

首先docker不是虚拟机,Docker Engine可以简单看成对Linux的NameSpace、Cgroup、镜像管理文件系统操作的封装。Docker并没有和虚拟机一样利用一个完全独立的Guest OS实现环境隔离。
而虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。
简而言之,Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远多于虚拟机数量。对系统的利用率非常高。
反过来说,与虚拟机隔离性更强,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离。
Docker的作用
- 简化部署,能够快速搭建诸如mysql、ngnix等环境,并且可以把自己的应用打包成docker镜像,极大地提高了部署的简易型和可移植性。
- 持续部署与测试,由于docker容器的特性,可以做到整个开发到部署过程中,环境的一致性、Docker可以让你构建、测试和发布镜像,这个镜像可以跨多个服务器进行部署。
- 类似git的版本控制可以让镜像的管理更加可控,对于升级后应用的错误,可以随时回滚到上一个版本。
- 一个容器中只有一个应用,这样可以让每个应用的添加和删除易于管理,也不会有版本依赖的问题出现,这是docker的隔离作用。
- 基于隔离作用,docker的安全性也有所保障,Docker确保运行在容器中的应用程序和其他容器中的应用程序是完全分隔与隔离的,在通信流量和管理上赋予你完全的控制权。Docker容器不能窥视运行在其他容器中的进程。
Docker基本概念
Image(镜像)
它是一种特殊的文件系统,为容器的运行提供了所需的程序、库和相应的配置参数等,它不包含任何动态数据,镜像在构建后也不会发生改变。
Container(容器)
容器和镜像的关系和类与实例的关系非常类似。容器就是镜像运行的实体。容器运行在一个独立的隔离环境中,使用起来和独立于宿主的系统下操作一样。
镜像和容器之间的关系

前面说过镜像是静态的,只读的,容器之于镜像多了一个可写层,我们可以运行容器,进入容器,停止容器等等一系列操作。

如上图,我们通过
docker create命令把镜像创建了一个容器,然后用docker start启动了这个容器,这个时候我们就可以和容器互动了。
镜像是只读的,但是我们可以把容器内的修改作为提交更新镜像,这样下次使用这个接受提交的镜像时,就会生成一个包含了上次提交变化的容器,我们就可以对项目进行持续的集成。
Repository(仓库)
docker的仓库概念和git的仓库概念极为相似,除了github、码云等大型git仓库,也有公司自己部署的私用仓库。
docker也是一样,最大的是docker hub,国内也有AliCloud等clone的镜像库,用户也可以自己部署镜像库。
和git类似你只需要使用docker pull就可以拉取想要的仓库,也可以使用docker push提交自己的镜像。