Docker技术专题讲座

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Docker技术专题讲座技术原理环境搭建应用实例简介Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。最重要的是,它不依赖于任何语言、框架或系统。目标是实现轻量级的操作系统虚拟化解决方案基础:Linux容器(LXC)Go语言实现Apache2.0协议GitHub上进行维护对比传统虚拟机对比虚拟机特性虚拟机容器启动分钟级秒级资源消耗很大,单机一般几十个VM,硬盘使用一般为GB很小,单机支持上千个容器,硬盘使用一般为MB性能通过对硬件层的模拟,增加了系统调用链路的环节,有性能损耗共享Kernel,接近原生,几乎没有性能损耗操作系统覆盖支持Linux、Windows、Mac等仅仅Kernel所支持的OSDocker应用场景web应用的自动化打包和发布自动化测试和持续集成、发布在服务型环境中部署和调整数据库或其他的后台应用从头编译或者扩展现有的OpenShift或CloudFoundry平台来搭建自己的PaaS环境。Docker带来的好处安装安装Docker所需条件:需要64位架构的系统和Linux3.10内核或更高版本。Docker有很多种安装的选择,推荐在Ubuntu下面安装,因为docker是在Ubuntu下面开发的,安装包测试比较充分,可以保证软件包的可用性。添加Docker的官方apt软件源/etc/apt/sources.list.d/docker.listdeb添加成功后,更新apt软件包缓存$sudoapt-getupdate安装Docker$sudoapt-getinstall-ydocker-engineDocker的HelloWorld启动docker后台Daemon:$sudosystemctlstartdocker跑我们第一个HelloWorld容器:$sudodockerrun-i-tfedora/bin/echohelloworldhelloworld可以看到在运行命令行后的下一行会打印出经典的HelloWorld字符串。3个内部组件DockerImagesDockerimage是Dockercontainer最基本的模板。image通过容器使系统和应用易于安装,Dockerimage是用来运行的容器,你可以在这里找到许多images(多种操作系统和软件已经被安装好了的Docker)。DockerContainerDocker容器(DockerContainer)是一个Image,在运行的Dockerimage上读取和写入。Docker是一个联合的文件系统作为容器后台,容器的任何变化,都将被保存在一个基本image新的层上。我们安装应用程序的层就是容器。每个在主机上运行的容器都是独立的,因此,提供了一个安全的应用平台。DockerRegistryDockerregistry是为Dockerimages提供的库。它提供了公共和私有库。公共Docker库被叫做DockerHub。这里我们能够上传push和pull我们自己的images。Docker架构图Docker总架构图Docker运行案例分析--dockerpullDocker运行案例分析--dockerrunDocker镜像每个镜像都由很多层次构成,Docker使用UnionFS将这些不同的层结合到一个镜像中去。使用dockerpull命令来从仓库获取所需要的镜像$sudodockerpullubuntu:12.04使用dockerimages显示本地已有的镜像创建镜像从DockerHub获取已有镜像并更新,最后使用dockercommit命令来提交更新后的副本。利用Dockerfile来创建镜像Dockerfile中每一条指令都创建镜像的一层,例如:编写完成Dockerfile后可以使用dockerbuild来生成镜像#ThisisacommentFROMubuntu:14.04MAINTAINERDockerNewbeenewbee@docker.comRUNapt-get-qqupdateRUNapt-get-qqyinstallrubyruby-devRUNgeminstallsinatra镜像导出、导入、移除如果要导出镜像到本地文件,可以使用dockersave命令。$sudodockersave-oubuntu_14.04.tarubuntu:14.04可以使用dockerload从导出的本地文件中再导入到本地镜像库,例如:$sudodockerload--inputubuntu_14.04.tar如果要移除本地的镜像,可以使用dockerrmi命令。使用下面的命令可以清理所有未打过标签的本地镜像$sudodockerrmi$(dockerimages-q-fdangling=true)Docker容器启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。新建并启动$sudodockerrunubuntu:14.04/bin/echo'Helloworld'Helloworld启动已终止容器dockerstart添加-d参数来实现后台运行,不直接把执行命令的结果输出在当前宿主机下。使用dockerstop来终止一个运行中的容器使用dockerattach命令进入容器进行操作如果要导出本地某个容器,可以使用dockerexport命令。$sudodockerexport7691a814370eubuntu.tar可以使用dockerimport从容器快照文件中再导入为镜像$catubuntu.tar|sudodockerimport-test/ubuntu:v1.0使用dockerrm来删除一个处于终止状态的容器。用dockerrm$(dockerps-a-q)清理所有处于终止状态的容器仓库目前Docker官方维护了一个公共仓库DockerHub,其中已经包括了超过15,000的镜像。dockersearch命令来查找官方仓库中的镜像dockerpull命令来将它下载到本地有时候使用DockerHub这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。registry是官方提供的工具,可以用于构建私有的镜像仓库Docker数据管理使用数据卷和数据卷容器在Docker内部以及容器之间管理数据。挂载一个主机目录作为数据卷$sudodockerrun-d-P--nameweb-v/src/webapp:/opt/webapptraining/webapppythonapp.pyDocker中的网络功能介绍Docker允许通过外部访问容器或容器互联的方式来提供网络服务。外部访问容器通过-P或-p参数来指定端口映射$sudodockerrun-d-p5000:5000training/webapppythonapp.py容器互联使用--link参数可以让容器之间安全的进行交互$sudodockerrun-d-P--nameweb--linkdb:dbtraining/webapppythonapp.pyDocker网络多台物理主机之间的容器互联(暴露容器到真实网络中)一张图总结Docker的命令底层实现Docker底层的核心技术包括Linux上的名字空间(Namespaces)、控制组(Controlgroups)、Union文件系统(Unionfilesystems)和容器格式(Containerformat)。大家虽然都共用一个内核和某些运行时环境(例如一些系统命令和系统库),但是彼此却看不到,都以为系统中只有自己的存在。这种机制就是容器(Container),利用名字空间来做权限的隔离控制,利用cgroups来做资源分配。AUFS(AnotherUnionFS)AUFS是一种UnionFS,简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统,更进一步的理解,AUFS支持为每一个成员目录(类似GitBranch)设定readonly、readwrite和whiteout-able权限,同时AUFS里有一个类似分层的概念,对readonly权限的branch可以逻辑上进行修改(增量地,不影响readonly部分的)。典型的启动Linux运行需要两个FS:bootfs+rootfs:Docker的开源之路--用户社区维护、源代码管理、创建合作伙伴生态圈应用案例--在测试中使用Docker使用Docker测试静态网站1.Sample网站的初始Dockerfile2.构建Sample网站和tomcat镜像3.从Sample网站和tomcat镜像构建容器4.修改网站应用案例--中小企业使用Docker标准化开发、测试和生产环境应用案例--基于Docker构建服务应用案例--分布式Docker集群KubernetesMesos…学习资源《TheDockerBook》-《第一本Docker书》《Docker-从入门到实践》Docker官网Docker中文社区Dockerhub时速云镜像网易蜂巢镜像!Thankyou!

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功