Docker是一个轻量级的虚拟化解决方案,相对VMWare等完全封装的管理系统虚拟化技术,Docker只是利用Linux内核特性对进程进行了隔离。
Docker的好处
Docker的好处主要体现在运维上
相对于KVM、VMWare等,性能较好
对环境依赖进行打包,方便部署和扩容
屏蔽应用差别,便于统一基线管理
Docker自身的文件系统特性,发布系统分发的数据较小
Docker的原理
Docker分为宿主机、镜像(Images)、容器(Container),宿主机是外部的操作系统,在此之上运行镜像,对镜像的每一次运行生成一个容器,同一个镜像生成的不同的容器之间会隔离。
容器内部是一系列的进程,Docker推荐容器只运行一个进程,进程可以在宿主机上看到。
容器采用Linux内核的namespace机制对包括网络、pid等进行隔离,利用cgroup进行资源(如可用CPU核数、内存)进行限制。
文件系统采用UnionFS,最早是使用aufs,现主要采用Devicemapper。在打包时,每一次修改会将修改覆盖在下层的文件系统之上,一层层叠加,最后覆盖一层可修改的文件层,保存是修改的部分,下层只读。
每个镜像都是分片保存,每次下载新镜像时,不会下载已存在的分片。
对于网络端口,有多种级别,可以映射(采用缓冲区复制),也可以共用宿主机端口
Docker的守护进程采用sudo方式启动,所有docker命令均采用tcp或者管道方式和守护进程通讯,由守护进程执行
Docker的使用
Docker需要Linux3.8以上内核
Windows、Mac用户可以安装boot2docker,Mac可以用homebrew安装。boot2docker是用virtualbox虚拟了一个特制的linux系统。
Mac下
启动
boot2docker up
ssh到virtualbox内的特制Linux的命令行,之后可以使用Linux的命令。之后所有命令均执行在该环境中
boot2docker ssh
Docker常用命令
启动docker守护进程
docker -d查看docker已下载镜像,
注意IMAGE ID列,另外SIZE列的值在本地并不会存那么大的文件。
指定一个镜像时采用 REPOSITORY: {TAG}的形式,如abc:abc
docker images下载镜像abc:abc
docker pull abc:abc启动镜像
其中–name abc指出abc是别名,使用Container ID的地方可以换用别名。
–net host表示共用宿主机上的端口
-d表示按守护进程启动
IMAGESID可以从dockerimages命令上得到,也可以用 {REPOSITORY}:${TAG}的形式
run命令相当于依次执行了create和start命令,create命令执行后
docker run –name abc –net host -d ${IMAGEID}查看容器
docker ps进入到Docker容器内的“终端”
其中exec是在容器上执行一个进程
-ti表示使用进程的标准输入输出
${CONTAINERID}是容器ID,可以从docker ps中得到,或者使用别名
docker exec -ti ${CONTAINERID} /bin/bash停止容器
注意停止并不会删除运行时所做的修改,之后可以用restart重新启动
docker stop ${CONTAINERID}删除容器
会删除该容器运行时所做的修改,可以采用-f参数强制停止容器后删除
docker rm ${CONTAINERID}Docker打包
.表示在当前目录寻找Dockerfile文件,该文件说明了打包方法
Dockerfile总是from从一个镜像开始,修改叠加,最终变成新的镜像
其中CMD命令只能出现一次,会在容器启动时执行
docker build -t abc:abc .发布
docker push abc:abc查看镜像打包历史,从下至上
docker history ${IMAGEID}