Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Goole公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护。
Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何支持docker的机器上运行。容器是完全使用沙盒机制,相互之间不会有任何接口调用。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整地摆放起来。并且各种各样的货物被装在集装箱里,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送熟菜的船和专门运送货物的船了。只要这些货物在集装箱里封装得好好的就行。那我就可以用一艘大船把他们都运走。
docker就是类似的理念。云计算就好比大货轮。docker就是集装箱。
2、docker的优点
运行时的性能快,管理操作(启动、停止、开始、重启等等)都是以秒或毫秒为单位的。
像虚拟机一样敏捷,而且会更便宜,在baremetal(裸机)上部署像点一个按钮一样简单。
将应用和系统“容器化”,不添加额外的操作系统。
在一台服务器上可以部署100-1000个Containers容器。
开源的,免费的,低成本的。
docker-ce:社区版
docker-ee:商业版
3、docker的缺点
所有容器共用linuxkernel资源,资源能否实现最大限度利用,所以在安全上也会存在漏洞。
4、Docker与虚拟机的比较
5.docker与虚拟化
Docker以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的supervisor支持。Docker虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器时在操
作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。
windows:maclinux
docker分为两个版本:docker-ce:社区版docker-ee:企业版
linux3.10的内核有BUG
[root@localhost~]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm23、添加软件源信息
[root@localhost~]#sudoyummakecachefast[root@localhost~]#sudoyum-yinstalldocker-ce-19.03.9k8s支持的最新的版本,也是最稳定的版本是195、启动Docker
[root@localhost~]#systemctlstartdocker6、检测docker
三、docker的概念和基本使用
1.docker三大核心概念
官方仓库:hub.docker.com第三方:阿里云、华为云dockerlogin[URL]dockerloginregistry.cn-hangzhou.aliyuncs.com
2.镜像
镜像是启动容器的模板,同一个镜像启动的所有的容器完全相同
2.1下载镜像
dockerinspect[镜像名称|ID]例:dockerinspectnginx2.4镜像tag(别名)
2.7删除镜像(rmi是rmimage的缩写)
dockerrmi[镜像的名称|ID][root@localhost~]#dockerrmialvinos/nginx:v2注:docker镜像只能创建和删除,不能修改。docker的ID全宇宙唯一
3.容器
对外提供服务的实例。
3.1.容器生命周期
容器内的进程至少有一个进程运行在前台。
3.2、启动一个容器(镜像是启动容器的模板,所以启动镜像的时候要加上镜像的名称或者id)
dockerrun[参数][镜像名称|ID][启动命令]例:dockerruncentos(没有的话会下载)dockerrunnginx#启动容器最简单的命令参数:(dockerrun--help)-d:以守护进程方式运行--rm:当容器生命周期结束时,立即删除该镜像--name:指定容器名称-e:指定容器内部的环境变量-h:指定容器的主机名-p:端口映射(固定)#要在互联网访问,需要端口映射-P:端口映射(随机)-i:打开标准输出(将容器内部的标准输出接入到命令行中,正常与-t组合使用)-t:创建一个命令行(伪终端)-v:添加一个目录映射--link--network
dockerstart:启动一个容器dockerstop:停止一个容器dockercreate:创建一个容器
dockerrun和dockercreate之间有两个区别1、dockerrun创建容器并立即启动,而dockercreate只是创建2、dockerrun创建的容器时up状态,而dockercreate创建的容器是create
3.3、查看本机运行的容器列表
dockerps-a:显示本机上的所有的容器-q:只显示ID例:dockerps#查看本机上运行的容器dockerps-a#显示机器上的所有容器dockerps-a-q#显示机器上所有容器的id3.4在容器内部执行命令
dockerexec[容器名称][命令][root@localhost~]#dockerexecnginxv1printenv#打印nginxv1的环境变量进入容器:dockerexec-it[容器名称]bash[root@localhost~]#dockerexec-ithungry_wrightbash3.5删除容器
3.62、将本地的容器保存成镜像压缩包
1、保存容器为镜像压缩包
dockerexport-o,--outputstringWritetoafile,insteadofSTDOUT[root@localhost~]#dockerexport-onginx.tarhungry_wright2、解压容器压缩包成镜像
dockerimport[root@localhost~]#dockerimportnginx.tartest:v2[root@localhost~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEtestv2152d9c19a28f8secondsago140MB3.63、将本地的镜像保存成镜像压缩包
1.保存镜像为镜像压缩包
dockersaveOptions:-o,--outputstringWritetoafile,insteadofSTDOUT[root@localhost~]#dockersave-onginxv1.tarpython:3.6nginx:latest2.解压镜像压缩包为镜像
dockerloadOptions:-i,--inputstringReadfromtararchivefile,insteadofSTDIN-q,--quietSuppresstheloadoutput[root@localhost~]#dockerload-inginxv1.tar