一.概述

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。说白了,docker是一种用了新颖方式实现的轻量级虚拟机,类似于VM,但是在原理和应用上和VM的差别还是很大的.并且docker的专业叫法是应用容器(Application Container)。

一个完整的Docker有以下几个部分组成:

dockerClien       #客户端
Docker Daemon     #守护进程
Docker Image      #镜像
DockerContainer   #容器

二.基本概念

Docker包括三个基本概念:
      镜像(Image)
      容器(Container)
      仓库(Repository)

1.镜像

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
当新建一层时,之前的那一层就已经成为了镜像层,运行时是自下而上的,所以结果肯定会包含上一层所执行的结果,因为你对之前的镜像层没有进行插入操作,就只是在往上叠加,所以除了现在这层之外的所有层都是一个cache,执行起来比较快。
当你只想执行这一层而且不想要之前某一层的结果时,可以在Dockerfile里边进行修改删掉这一层的run,但是注意这个cache就被破坏了,需要重新执行得到一个新的cache,但是对于结果没有影响,就是比之前慢一点,因为要重新生成cache。

2.容器

个人对于镜像(Image)和容器(Container)的理解,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。
容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,
使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

3.仓库

镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,
Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

三.基础命令

1.docker的启动、停止、重启

systemctl start docker        #启动docker服务     
service docker start          
systemctl stop docker         #关闭docker服务 
service docker stop  
systemctl restart  docker     #重启docker服务
service docker restart       
systemctl daemon-reload       #重载守护进程 
chkconfig docker on           #开机自启docker

2.容器的管理

docker run -it --name vm1 ubuntu bash   #创建并运行一个新的容器 	   			(run=create+start)    -it 表示交互式
docker run -d  --name vm1 nginx         #创建并运行一个新的容器;-d表示打入后台
docker info                             #显示docker系统信息,包括镜像和容器数等
docker version                          #查看docker容器版本  
docker search  ...                      #搜索符合条件的镜像
docker ps -a                            #查看所有容器状态
docker ps                               #查看正在运行的容器进程
docker pull nginx                       #拉取镜像
docker push                             #将镜像推送至远程仓库
docker history nginx                    #查看指定镜像的创建历史
docker attach vm1                       #连接容器
docker top vm1                          #查看容器进程
docker logs vm1                         #查看容器指令输出; -f表示可以实时查看
docker inspect vm1                      #查看容器的参数(获取容器元数据)
docker stats vm1                        #查看容器资源使用率
docker diff vm1                         #查看容器修改
docker start vm1                        #启动容器
docker stop vm1                         #停止容器
docker restart vm1                      #重启容器
docker kill vm1                         #强制杀死容器
docker pause vm1                        #暂停容器
docker unpause vm1                      #恢复容器
docker rm vm1                           #删除容器; -f表示强制删除
docker export vm1 > vm1.tar             #导出容器
docker import vm1.tar image             #导入容器为镜像image

3.镜像管理
镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。

docker search                      #查询镜像
docker pull      				   #拉取镜像
docker push      			       #推送镜像
docker inspect    				   #查看镜像详情
docker images     				   #列出本地已有的所有镜像
docker load -i ubuntu.tar          #导入镜像
docker commit                      #更新镜像
docker rmi        				   #删除镜像
docker build      			       #创建镜像