当前位置: 首页 > 科技观察

解放运维人员----Docker快速部署

时间:2023-03-22 16:46:01 科技观察

Docker是一种以新颖方式实现的超轻量级虚拟机。它在实现原理和应用方面与VM还是有很大区别的。它被称为专业。就是应用容器(ApplicationContainer)。(个人还是喜欢称其为虚拟机)Docker应用容器相对于VM有以下优势:启动速度快,容器通常可以在一秒内启动,而VM通常需要更长时间,资源利用率高率很高。一台普通PC可以跑几千个容器,就可以跑几千个VM。性能开销很小。虚拟机通常需要额外的CPU和内存来完成操作系统的功能。这部分占用额外的资源,因为VM的hypervisor需要实现硬件的虚拟化,而且还需要搭载自己的操作系统,自然在启动速度、资源占用和性能等方面有比较大的开销。亲身体验两个优点:1.快速部署。传统的部署方式是:安装(包管理工具或源码包编译)->配置->运行;Docker的部署方式是:复制->运行。2、可以保证线上环境和测试环境一致。计划以后上线时直接拷贝测试用的docker容器)什么是docker?http://oilbeater.com/docker/2014/06/29/what-is-docker.html为什么要关注docker?http://oilbeater.com/docker/2014/06/13/why-you-should-care-about-docker.html1、docker安装debian7安装docker参考地址:http://www.webmaster.me/server/installing-docker-on-debian-wheezy-in-60-seconds.htmlechodebhttp://get.docker.io/ubuntudockermain|sudotee/etc/apt/sources.list.d/docker.listsudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9sudoapt-getupdatesudoapt-getinstall-ylxc-docker#四行命令,Docker安装完毕。下面创建一个ubuntu虚拟系统:dockerpullubuntu#这里是从官网拉取的名为ubuntu的镜像,也可以到https://index.docker.io手动搜索需要的镜像。dockerrun-i-tubuntu/bin/bash#创建容器,-t是临时终端。ubuntu12.04、windows、macOS安装docker参考docker中文文档http://www.widuu.com/docker/2、docker使用流程实践2.1在测试机上启动容器,安装sshdockerrun-i-tubuntu/bin/bash#here模式下运行的容器退出后会关闭。apt-getinstallopenssh-server#安装ssh#需要修改/etc/sshd/sshd_config文件中的内容PermitRootLoginyesUsePAMno2.2启动ssh,容器后台运行dockerrun-d-p50001:22/usr/sbin/sshd-D#容器id可以通过dockerps-a查看,最上面的是***。2.3通过ssh连接到容器安装软件sshroot@127.0.0.1-p50001#连接之后就可以安装你想要的东西了,你可以使用exit退出容器,但是它仍然会在后台运行。2.4服务安装完成后,停止容器。dockerstop#停止正在运行的容器2.5提交容器生成一个***镜像dockercommitdebian02#提交这个容器生成一个新的debian02镜像(该镜像是原镜像和容器的整合)2.6打包镜像dockersavedebian02>/root/debian02.tar#debian02镜像打包2.7在另一台机器上导入镜像dockerload。5、关于docker容器和镜像的关系,不管在容器中进行什么操作,写文件还是删除文件。容器的基础镜像都不会改变。这是因为Docker从父镜像构建增量镜像,只存储每个容器的变化。所以如果你有一个300MB的父镜像,如果你在容器中额外安装50MB的应用程序或服务,你的容器只有50MB,而父镜像还是300MB。但是您可以使用Dockfile或commit命令通过将增量图像与父图像组合来生成新图像。Commit使用:dockercommitDockfile使用:root@yangrong:/data#catDockerfileFROMubuntu/testa#ThisisthebaseimageCMD["/root/start.sh"]#Thisisthestartupcommandroot@yangrong:/data#dockerbuild-t./更多关于Dockfile的参数参考地址:http://www.tuicool.com/articles/FRvAbehttp://www.colorscode.net/2014/01/04/howto-build-image-with-automatic-startup-ssh-service-from-dockerfile/6。docker参数详解dockerusageofdocker-D默认为false允许调试模式(debugmode)-H默认为unix:///var/run/docker.socktcp://[host[:port]]绑定或unix://[/path/to/socket]使用(二进制文件),当主机iphost=[0.0.0.0],(Port)port=[4243]或path=[/var/run/docker.sock]时默认值,作为默认值使用-api-enable-corsdefaultflaseallowsCORSheaderremoteapi-bdefaultisempty,appendontheexistingbridge,如果使用'none'参数,容器的网络被禁用-bip默认为空,使用提供的CIDR(ClasslessInter-DomainRouting-无类型域间路由)标签地址(dcoker0)动态创建网桥,与-b参数冲突-d默认为false允许进程模式(daemonmode)-dns默认为空,让docker使用指定的DNS服务器-g默认为“/var/lib/docker”:作为docker使用的根Path-icc默认为true,允许容器间tocommunicate-ipdefaults"0.0.0.0":绑定容器端口的默认IP地址-iptables默认为true禁用dockerr添加iptables规则-mtudefault1500:设置容器网络传输的最大单位(mtu)-p默认为/var/run/docker.pid进程pid使用的文件路径-r默认为true重启之前运行的容器-s默认为空,表示docker运行使用指定的存储驱动-v默认为false打印版本信息并退出7、dockerrun命令详细用法:dockerrun[OPTIONS]IMAGE[:TAG][COMMAND][ARG...]runacommandinanewcontainer-a=map[]:附加标准输入、输出或错误输出-c=0:共享CPU格式(比较重要)-cidfile="":将容器的ID写入文件-d=false:分离模式,在后台运行容器,并打印出容器ID-e=[]:设置环境变量-h="":容器的主机名-i=false:保持输入流打开即使没有附加输入流-privileged=false:为容器扩展提供权限-m="":内存限制(格式:,unitunit=b,k,morg)-n=true:允许镜像使用网络-p=[]:匹配镜像中的网络端口号-rm=false:容器退出时自动删除(不能与-d一起使用)-t=false:分配一个假终端输入-u="":用户名或ID-dns=[]:自定义容器DNS服务器-v=[]:创建挂载绑定:[host-dir]:[容器目录]:[rw|ro]。如果容器目录丢失,docker将创建一个新卷-volumes-from="":挂载容器的所有卷-entrypoint="":覆盖镜像设置的默认入口点-w="":容器在工作目录-lxc-conf=[]:添加自定义-lxc-conf="lxc.cgroup.cpuset.cpus=0,1"-sig-proxy=true:代理接收所有进程信号(eveninnon-ttymode)-expose=[]:让你的主机不有开放的端口-link="":连接到另一个容器(name:alias)-name="":分配容器的名称,如果不指定,将生成一个随机的-P=false:Publishallexposedportstothehostinterfacespublishall显示的端口主机界面8.docker常用命令汇总dockerpull<镜像名称:tag>#从官网拉取镜像dockerimages#查询所有镜像,默认为最近创建并排名靠前的dockerps#查看正在运行的容器dockerps-l#查看***退出的容器IDdockerps-a#查看所有容器,包括退出的容器。dockerlogs{containerID|containername}#查询一个容器的所有操作记录。dockerlogs-f{容器ID|容器名称}#实时查看易操作记录。8.2删除容器和镜像dockerrm$(dockerps-a-q)#删除所有容器dockerrm<容器名称或ID>#删除单个容器dockerrmi#删除单个镜像dockerrmi$(dockerimages|grepnone|awk'{print$3}'|sort-r)#删除所有镜像8.3启动和停止容器dockerstop<容器名称或ID>#停止一个容器dockerstart<容器名称或ID>#启动一个容器dockerkill<容器名称或ID>#杀死一个容器>/home/export.tar#exportcat/home/export.tar|sudodockerimport-busybox-1-export:latest#importexport.tar文件dockersavedebian>/home/save.tar#打包debian容器dockerload./#GenerateanewimageDockfile更多参数参考:http://www.tuicool.com/articles/FRvAbehttp://www.colorscode.net/2014/01/04/howto-build-image-与-automatic-startup-ssh-service-from-dockerfile/有任何问题欢迎留言讨论。qq:10286460原文链接:http://yangrong.blog.51cto.com/6945369/1551327