Docker容器应用使用手册
1 Docker概述
Docker是一个开源的应用容器引擎,它基于Go语言,它可以让开发者打包应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何Linux机器上,也可以实现虚拟化。容器性能开销极低。
1.1 Docker思想
(1)集装箱(程序为集装箱中的货物)
(2)标准化(运输方式,将台式机中的应用发送在笔记本中,只需执行2个命令,不需要优盘或网络。存储方式。API接口)
(3)隔离(快速创建虚拟机LXC技术,通过1个命令)
1.2 Docker出现解决的问题
(1)我本地运行没有问题,到你那怎么出了问题。
Java应用需要操作系统,jdk(版本),tomcat(版本),应用的代码(代码中路径配置)。Docker解决了版本不一致带来的问题。
(2)系统好卡。哪个哥们又写死循环啦。它可以设置应用可以使用的最大内存,当超过此数值时,将其杀死。
(3)双11来了,服务器撑不住。特殊节日提前扩容,弹性扩容。只要在每台。
1.3 Docker的精髓
快速部署,弹性伸缩。
2 Docker架构
2.1 Docker的前生LXC
LXC为Linux Container的简写,起到隔离进程和资源,容器有效地将由单个操作系统管理的资源划分为孤立的组中。与传统的虚拟化技术相比,优势:
2.2 Docker与LXC的关系
Docker不是LXC的替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。
2.3 容器与虚拟机的区别
图2-1 容器与虚拟机的区别
容器与虚拟机的区别见图2-1所示。
(1)图2-1中左边容器在linux上本机运行,并与其他容器共享主机的内核,它运行的一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
(2)图2-2中右边虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
2.4 容器在内核中支持的2种重要技术
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
2.4.1 namespaces名称空间
表2-1 namespaces的六项隔离
2.4.2 control group控制组
Cgroup的特点:它的API以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理。
四大功能:资源限制(可以对任务使用的资源总额进行限制),优先级分配(通过分配的cpu时间片数量及磁盘IO带宽大小,控制任务运行优先级),资源统计(可以统计系统的资源使用量,如cpu时长,内存用量),任务控制(cgroup可以对任务执行挂起,恢复等操作)。
2.5 Docker的三个概念
(1)镜像(Image):Docker镜像(Image),就相当于是一个root文件系统。docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个已经做好的镜像来直接使用。
(2)容器(container):docker利用容器运行应用,容器是从镜像创建的运行实例,它可以被启动,开始,停止,删除,每个容器互相隔离。
(3)仓库(reposity):仓库是集中存储镜像文件。
Build镜像,Ship运输镜像,Run运行的镜像就是容器。
Docker镜像就是一系列文件,docker将其存储本地。
Docker仓库目的是要在别处运行我的镜像。Docker仓库有hub.docker.com和c.163.com丰巢,可以自己搭建一个内网仓库。
2.6 Docker架构
图2-2 Docker总体架构1
图2-3 Docker总体架构2
图2-3中,此架构指明了server/client交互,容器和镜像、数据之间的联系,docker daemon就是docker的守护进程即server端,可以是远程的,也可以是本地的,这个是C/S架构,客户端Docker client通过rest api进行通信docker cli用来管理容器和镜像,客户端提供一个只读镜像,然后通过镜像可以创建多个容器,这些容器可以只是一个RFS(Root file system根文件系统),也可以ishi一个包含了用户应用的RFS,容器再docker client中只是要给进程,两个进程之间互不可见,用户不能与server直接交互,但可以通过与容器这个桥梁来交互,由于是操作系统级别的虚拟技术,中间的损耗几乎可以不计。