一.概述
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 #创建镜像