您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > docker安装部署文档
一、简介1、docker简介Docker提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是dotCloud启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致dotCloud把它重命名到DockerInc。它最初是用Go语言编写的,它就相当于是加在LXC(LinuXContainers,linux容器)上的管道,允许开发者在更高层次的概念上工作。Docker扩展了Linux容器(LinuxContainers),或着说LXC,通过一个高层次的API为进程单独提供了一个轻量级的虚拟环境。Docker利用了LXC,cgroups和Linux自己的内核。和传统的虚拟机不同的是,一个Docker容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:1.虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。2.虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。3.传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。5.Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。Docker会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种Linux服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。Docker由下面这些组成:1.Docker服务器守护程序(serverdaemon),用于管理所有的容器。2.Docker命令行客户端,用于控制服务器守护程序。3.Docker镜像:查找和浏览docker容器镜像。2、docker特性文件系统隔离:每个进程容器运行在完全独立的根文件系统里。资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。3两个基础概念images与containerContainer和Image在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用dockercommit命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于gitcommit命令。二、Centos6安装docker1、升级内核Centos6内核版本默认为2.6,安装docker需要内核版本3.8以上1.下载源码包网址:,longterm等版本,一般选择下载longterm版本,因为此版本为提供长期支持的稳定版,因此我选择3.12.16.[root@CentOS-BinaryDev~]#wget解压并进入目录[root@CentOS-BinaryDev~]#tar-zxvflinux-3.10.tar.gz–C/usr/src/kernel/[root@CentOS-BinaryDev~]#cd/usr/src/kernel/linux-3.103.更新当前系统[root@CentOS-BinaryDev~]#yumupdate[root@CentOS-BinaryDev~]#yumupgrade4.安装编译内核所需要的软件包[root@CentOS-BinaryDev~]#yumgroupinstall“DevelopmentTools”[root@CentOS-BinaryDev~]#yuminstallncurses-devel[root@CentOS-BinaryDev~]#yuminstallqt-devel[root@CentOS-BinaryDev~]#yuminstallhmaccalczlib-develbinutils-develelfutils-libelf-devel5.查看当前系统内核[root@CentOS-BinaryDev~]#uname-r2.6.32-358.11.1.el6.x86_646.将当前系统内核的配置文件拷贝到当前目录[root@CentOS-BinaryDev~]#cp/boot/config-2.6.32-358.11.1.el6.x86_64.config7.使用当前系统内核配置,并自动接受每个新增选项的默认设置[root@CentOS-BinaryDev~]#sh-c'yes“”|makeoldconfig'8编辑配置选项#makemenuconfig#在菜单模式下选择需要编译的内核模块找到以下选中选项并选中networkingsupport→networkingoptions→networkpacketfilteringframework(netfilter)(1)Corenetfilterconfiguration勾中Netfilterconnectiontrackingsupport-mstate相关模块是依赖它的,不选则没有。将netbiosnameserviceprotocalsupport(new)编译成模块,不然后面升级iptables后启动时会出错勾中NetfilterXtablessupport(requiredforip_tables)(2)IP:NetfilterConfiguration将IPv4connectiontrackingsupport(requireforNAT)编译成模块。勾中IPtablessupport(requiredforfiltering/masq/NAT)。将FullNAT下的MASQUERADEtargetsupport和REDIRECTtargetsupport编译成模块(3)其它模块可以根据自己的需要进行选择,若不懂可以参考内核配置手册.9.编译[root@CentOS-BinaryDev~]#makebzImage[root@CentOS-BinaryDev~]#makemodules[root@CentOS-BinaryDev~]#makemodules_install10.安装[root@CentOS-BinaryDev~]#makeinstall如果出现少量ERROR可以忽略11.修改Grub引导顺序[root@CentOS-BinaryDev~]#vim/etc/grub.conf一般新内核的位置都在第一个,所以设置default=0.12.重启后查看内核版本号[root@CentOS-BinaryDev~]#uname-r3.10.013.如果失败,转至第5步,在重新开始之前,需要清理上次编译的现场[root@CentOS-BinaryDev~]#makemrproper2、安装aufs1、mock命令需要用普通用户执行[root@test~]#useraddmockbuilder[root@test~]#usermod-a-Gmockmockbuilder[root@test~]#su-mockbuilder注意:如果强行使用root身份执行mock命令,python将会抛出“RuntimeError:mockwillnotrunfromtherootaccount”的错误。2、安装mock和spectoolYum–yinstallrpmdevtoolsmock3、#builddockerrpmspectool-g-Clxc-dockerlxc-docker/lxc-docker.specmock-repel-6-x86_64--buildsrpm--speclxc-docker/lxc-docker.spec--sourceslxc-docker--resultdiroutputmock-repel-6-x86_64--rebuild--resultdiroutputoutput/lxc-docker-0.6.7-1.el6.src.rpm#buildlxcrpmspectool-g-Clxclxc/lxc.specmock-repel-6-x86_64--buildsrpm--speclxc/lxc.spec--sourceslxc--resultdiroutputmock-repel-6-x86_64--rebuild--resultdiroutputoutput/lxc-0.8.0-3.el6.src.rpm#buildkernelrpmspectool-g-Ckernel-ml-aufskernel-ml-aufs/kernel-ml-aufs-3.10.specgitclonegit://git.code.sf.net/p/aufs/aufs3-standalone-baufs3.10pushdaufs3-standalonegitarchive9929e444955f467073ebedf254a9ac0f7a5df1c5../kernel-ml-aufs/aufs3-standalone.tarpopdmock-repel-6-x86_64--buildsrpm--speckernel-ml-aufs/kernel-ml-aufs-3.10.spec--sourceskernel-ml-aufs--resultdiroutputmock-repel-6-x86_64--rebuild--resultdiroutputoutput/k
本文标题:docker安装部署文档
链接地址:https://www.777doc.com/doc-2910191 .html