




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
123456789fromflaskimportimportsocketimportosapp=Flask(namehtml=o{name}!</h3>""<b>Hostname:</b>returnhtml.format(name=os.getenv("NAME","world"), =="mainapp.run(host='',在這段代碼中,我使用Flask框架啟動(dòng)了一個(gè)Web服務(wù)器,而它唯一的功能是:如果當(dāng)前環(huán)境中有“NAME”這個(gè)環(huán)境變量,就把它打印在“o”后,否則就打印“oworld”,最后再打印出當(dāng)前環(huán)境的hostname。這個(gè)應(yīng)用的依賴,則被定義在了同下的requirements.txt代碼$cat代碼代碼123456789#使提供的Python開(kāi)發(fā)鏡像作為基FROMpython:2.7-#將工切換為WORKDIR#將當(dāng) 下的所有內(nèi)ADD./app#使用pip命令安裝這個(gè)應(yīng)用所需要RUNpipinstall--trusted-host-r#允許外EXPOSE80端設(shè)置環(huán)境變17ENVNAME#設(shè)置容器進(jìn)程為:pythonapp.pyPythonCMD["python",亮的詞語(yǔ)),描述我們所要構(gòu)建的Docker鏡像。并且這些原語(yǔ),都是按順序處理的。Python代碼代碼FROMRUNapt-getupdate-yRUNapt-getinstall-ypython-pippython-devbuild-其中,RUNs命令的意思。而WORKDIR,意思是在這一句之后,Dockerfile后面的操作都以這一句指定的/app CMD,Dockerfilepythonapp.pyapp.pyapp/app.py。所以,CMDpython”,“app.pydocker另外,在使用Dockerfile時(shí),你可能還會(huì)看到一個(gè)叫作ENTRYPOINTCMDDockerENTRYPOINTCMD不指定ENTRYPOINT時(shí),比如在我們這個(gè)例子里,實(shí)際上運(yùn)行在容器里的完整進(jìn)程是:/bin/shc“pythonapp.pyCMDENTRYPOINTENTRYPOINTCMD當(dāng)前(即Dockerfile所在的)里的文件,到指定容器內(nèi)的當(dāng)中。讀懂這個(gè)Dockerfile之后,我再把上述內(nèi)容,保存到當(dāng)前 代碼代碼$ Docker制作這個(gè)鏡像了,在當(dāng)前執(zhí)行:代碼代碼1$dockerbuild-oworld其中,-tTag,即:起一個(gè)好聽(tīng)的名字。dockerbuild當(dāng)前下的Dockerfile文件,然后按照順序,執(zhí)行文件中的原語(yǔ)。而這個(gè)過(guò)程,實(shí)際上可以DockerDockerfile并沒(méi)有明顯地修改文件的操作(比如,ENV原語(yǔ)),它對(duì)應(yīng)的層也會(huì)存在。只不過(guò)在外界看代碼代碼1234$dockerimageIMAGE法,查看這些新增的層在AuFS路徑下對(duì)應(yīng)的文件和了。dockerrun代碼代碼1$dockerrun-p 代碼代碼1$dockerrun-poworldpythondockerps代碼代碼123$dockerCONTAINERd"python10secondsp4000:80Docker804000代碼代碼$ oWorld!</h3><b>Hostname:</b>否則,我就得先用dockerinspect命令查看容器的IP地址,然后“http://<容器IP地DockerHub上給的人,我要怎么做呢為了能夠上傳鏡像,我首先需要一個(gè)DockerHub賬號(hào),然后使用dockerlogin命令登dockertag代碼代碼1$dockeroworld 注意:你自己做實(shí)驗(yàn)時(shí),請(qǐng)將"geektime"替換成你自己的DockerHub賬戶名稱,比如zhangsan/ docker代碼1$dockerpushgeektime/DockerHub此外,我還可以使用dockercommit指令,把一個(gè)正在運(yùn)行的容器,直接提交為一個(gè)鏡像。一代碼代碼$dockerexec-itd3 d:/app#touch445d:/app#$dockercommit d 這里,我使用了dockerexec命令進(jìn)入到了容器當(dāng)中。在了解了LinuxNamespace的機(jī)制后,你應(yīng)該會(huì)很自然地想到一個(gè)問(wèn)題:dockerexec是怎么做到進(jìn)入容器里的呢?比如,通過(guò)如下指令,你可以看到當(dāng)前正在運(yùn)行的Docker容器的進(jìn)程號(hào)(PID)是代碼代碼$dockerinspect--format'{{.State.Piddproc25686Namespace410-]510-]610-]710-]lrwxrwxrwx1rootroot0Aug1314:05pid_for_children-> lrwxrwxrwx1rootroot0Aug1314:05user-> lrwxrwxrwx1rootroot0Aug1314:05uts-> LinuxNamespaceproc/[進(jìn)程號(hào)]/ns應(yīng)的虛擬文件,并且到一個(gè)真實(shí)的Namespace文件上。有了這樣一個(gè)可以“holdLinuxNamespaceNamespace一些很有意義事情了,比如:加入到一個(gè)已經(jīng)存在的Namespace當(dāng)中。入”這個(gè)進(jìn)程所在容器的目的,這正是dockerexec的實(shí)現(xiàn)原理。代碼代碼1#definemain(intargc,char*argv[])intfd=open(argv[1],if(setns(fd,0)==-1)}execvp(argv[2],}Namespace文件的路徑,比如/proc/25686/ns/net;而第二個(gè)參數(shù),則是你要在這個(gè)Namespace里運(yùn)行的進(jìn)程,比如/bin/bash。文件的描述符fd交給setns()使用。在setns()執(zhí)行后,當(dāng)前進(jìn)程就加入了這個(gè)文件對(duì)應(yīng)的LinuxNamespace當(dāng)中了。Namespace中:1gcc-oset_ns2./set_ns/proc/25686/ns/net34 Link HWaddr inet inet6addr:fe80::42:acff:fe11:2/64UPBROADCASTRUNNING RXpackets:12errors:0dropped:0overruns:0TXpackets:10errors:0dropped:0overruns:0collisions:0 RXbytes:976(976.0 TXbytes:796(796.013 Linkencap:Local inet inet6addr:::1/128UPLOOPBACK RXpackets:0errors:0dropped:0overruns:0collisions:0RXbytes:0(0.0TXbytes:0(0.0實(shí)際上,在setns()之后我看到的這兩個(gè)網(wǎng)卡,正是我面啟動(dòng)的Docker容器里的網(wǎng)卡。也bin/bash(PID=25686)NetworkNamepace,它看到的網(wǎng)絡(luò)設(shè)備與這個(gè)容器里是一樣的,即:/bin/bash在宿主機(jī)上,你可以用ps指令找到這個(gè)set_nsbin/bash進(jìn)程,其真實(shí)的PID代碼代碼#在宿主機(jī)psaux|grep 284990.00.0199443612S 0:00PID=28499Namespace,你就會(huì)代碼代碼12345$ls-llrwxrwxrwx1rootroot0Aug1314:18/proc/28499/ns/net->]$ls-llrwxrwxrwx1rootroot0Aug1314:05/proc/25686/ns/net->]在 (PID=25686)指向的NetworkNamespace文件完全一樣。這說(shuō)明這兩個(gè)進(jìn)程,共享了這個(gè)名叫net:[ ]的NetworkNamespace。NetworkNamespacenet代碼代碼1$dockerrun-it--netdbusybox這樣,我們新啟動(dòng)的這個(gè)容器,就會(huì)直接加入到ID=4ddf d的容器,也就是我們前面的創(chuàng)建的Python應(yīng)用容器(PID=25686)的NetworkNamespace中。所以,這里ifconfig而如果我指定–net=host,就意味著這個(gè)容器不會(huì)為進(jìn)程啟用NetworkNamespace。這就意味著,這個(gè)容器拆除了NetworkNamespace的“墻”,所以,它會(huì)和宿主機(jī)上的其他普dockerexecLinuxNamespacedockercommitdockercommit,實(shí)際上就是在容器運(yùn)行起來(lái)后,把最上層的“可讀寫層”,加上原先容器鏡而正如前所說(shuō),InitdockercommitDockerDockerHub代碼1$dockerpushgeektime/當(dāng)然可以,這個(gè)統(tǒng)一存放鏡像的系統(tǒng),就叫作DockerRegistry。感的話,你可以查Docker的文檔,以及VMware的Harbor項(xiàng)目Docker:Volume(數(shù)據(jù)卷)rootfsMountNamespace,構(gòu)建出了一個(gè)同宿主 這正是DockerVolume要解決的問(wèn)題:Volume機(jī)制,允許你將宿主機(jī)上指定的 在Docker項(xiàng)目里,它支持兩種Volume方式,可以把宿主機(jī) 掛載進(jìn)容器的/test目代碼$dockerrun-v/test$dockerrun-v/home:/test 掛載進(jìn)了容器的/test目 ,那么Docker就會(huì)默認(rèn)在宿主機(jī)上創(chuàng)建一個(gè)臨 MountNamespaceMountNamespacechroot(pivot_root)之前,容器進(jìn) rootfschrootVolume(比如 ),掛載到指定的容 (比如 )在宿主機(jī)上對(duì)應(yīng) (/[可讀寫層上,這個(gè)更重要的是,由于執(zhí)行這個(gè)掛載操作時(shí),“容器進(jìn)程”已經(jīng)創(chuàng)建了,也就意味著此時(shí)Mount容器內(nèi)部的這個(gè)掛載點(diǎn)的。這就保證了容器的性不會(huì)被Volume打破。注意:這里提到的"容器進(jìn)程",是Docker創(chuàng)建的一個(gè)容器初始化進(jìn)程(dockerinit),而不是應(yīng)用進(jìn)程(ENTRYPOINT+CMD)。dockerinit會(huì)負(fù)責(zé)完成 、配置hostname等一系列需要在容器內(nèi)進(jìn)行的的PID=1的進(jìn)程。而這里要使用到的掛載技術(shù),就是Linux的綁定掛載(bindmount)機(jī)制。它的主要作用就 其實(shí),如果你了解Linux內(nèi)核的話,就會(huì)明白,綁定掛載實(shí)際上是一個(gè)inodeLinux操作系統(tǒng)中,inode可以理解為存放文件內(nèi)容的“對(duì)象”,而dentry,也 是這個(gè)inode所使用的“指針”正如上圖所示,mountbindhometesthometest/test的dentry,重定向到了/home的inode。這樣當(dāng)我們修改 的inode。這也就是為何,一旦執(zhí)行umount命令,/test 復(fù):因?yàn)樾薷恼嬲l(fā)生在的,是/home 所以,在一個(gè)正確的時(shí)機(jī),進(jìn)行一次綁定掛載,Docker就可以成功地將一個(gè)宿主機(jī)上的 這樣,進(jìn)程在容器里對(duì)這個(gè)/test 那么,這個(gè)/test commit提交掉呢?這個(gè)原因其實(shí)我們前面已經(jīng)提到過(guò)。容器的鏡像操作,比如dockercommit機(jī)空間的。而由于MountNamespace的作用,宿主機(jī)并不知道這個(gè)綁定掛載的存在。以,在宿主機(jī)看來(lái),容器中可讀寫層的 不過(guò),由于Docker一開(kāi)始還是要?jiǎng)?chuàng)建/test這個(gè) 作為掛載點(diǎn),所以執(zhí)行了dockercommit之后,你會(huì)發(fā)現(xiàn)新產(chǎn)生的鏡像里,會(huì)多出來(lái)一個(gè)空的/test 作,又不是掛載操作,MountNamespace對(duì)它可起不到“障眼法”的作用。 oworld容器,給它一個(gè)Volume,掛載在容器里的 上代碼代碼$dockerrun-d-v容器啟動(dòng)之后,我們來(lái)查看一下這個(gè)Volume代碼代碼$dockervolume VOLUME 然后,使用這個(gè)ID,可以找到它在Docker工 下的volumes路徑代碼1$ls這個(gè)_data文件夾,就是這個(gè)容器的Volume在宿主機(jī)上對(duì)應(yīng)的臨時(shí) 接下來(lái),我們?cè)谌萜鞯腣olume里,添加一個(gè)文件text.txt:代碼$dockerexec-itcf53b766fa6fcdtouch這時(shí),我們?cè)倩氐剿拗鳈C(jī),就會(huì)發(fā)現(xiàn)text.txt已經(jīng)出現(xiàn)在了宿主機(jī)上對(duì)應(yīng)的臨 里代碼$ls可是,如果你在宿主機(jī)上查看該容器的可讀寫層,雖然可以看到這個(gè)/test 的(關(guān)于如何找到這個(gè)AuFS文件系統(tǒng)的路徑,請(qǐng)參考我上一次的內(nèi)容):11$lsVolumedockercommit以上內(nèi)容,就是DockerVolume的原理了總的主要場(chǎng)景。熟悉了這些操作,你也就基本上摸清了Docker容器的功能。LinuxNamespace、Cgroupsrootfs這個(gè)容器進(jìn)程“pythonapp.py”,運(yùn)行在由LinuxNamespace和Cgroups構(gòu)成的環(huán)境合掛載在一起的rootfsrootfsDockerDockerInit/etc/hosts容器的Volume的掛載點(diǎn),也出現(xiàn)在這一層。思考DockerNamespacecgroupNamespace?它是Linux4.6之后新增加的一個(gè)Namespace,你知道它的作用嗎?如果你執(zhí)行dockerrun-v/home:/test的時(shí)候,容器鏡像里的/test下本來(lái)就有內(nèi)容的話,你會(huì)發(fā)現(xiàn),在宿主機(jī)的/home下,也會(huì)出現(xiàn)這些內(nèi)容。這是怎么回事?為什么它們沒(méi)有被綁定掛載隱呢?(提示:Docker的“copyData”功能)PythonCPUMemory限制,然后啟動(dòng)它。根據(jù)我們前面介紹CgroupsCgroups歸科技所有 精選留言
一步 這樣把原理刨根究底的講解出來(lái),很好,理解的很透徹黃文 收貨很大,感謝!請(qǐng)教一個(gè)問(wèn)題,請(qǐng)問(wèn)在容器內(nèi)部如何獲取宿主機(jī)的 謝謝作者回復(fù)單靠容器,在開(kāi)的情況下是拿不到的。但是有了kbenetes之后這些系統(tǒng)信息都可以從環(huán)境變量里拿到。這個(gè)功能叫donardpi 這節(jié)干貨滿滿啊與路同 有預(yù)感專欄會(huì)破2假裝 聽(tīng)來(lái)清晰易懂,省去不少學(xué)習(xí)時(shí)間蔡鵬 dockerrun時(shí)指定-v掛載宿主機(jī) 到容器 ,即使容器原有 內(nèi)有數(shù)據(jù),也會(huì)被我宿主 作者回復(fù)這個(gè)行為其實(shí)是可配置的陶希 想知道云服務(wù)器等技術(shù)是不是也是通過(guò)namespace+cgroup作者回復(fù)當(dāng)然多 一切從問(wèn)題出發(fā),根據(jù)問(wèn)題理解答案,總結(jié)問(wèn)題如下:一、docker鏡像如何制作的兩種方式是什么?二、容器既然是一個(gè)封閉的進(jìn)程,那么外接程序是如何進(jìn)入容器這個(gè)進(jìn)程的呢?三、dockercot對(duì)掛載點(diǎn)oume內(nèi)容修改的影響是什么?四、容器與宿主機(jī)如何進(jìn)行文件讀寫?或volume五、Docker的copyData六、bindmount機(jī)制是什么?七、cgroupNamespace的作用是什么? 非常感謝老師的講解,咱們這個(gè)有群可以互相交流嗎? 作者回復(fù)如果你用的是k ontners這種基于虛擬化的容器,才可以實(shí)現(xiàn)。但原生其實(shí)也不提供這個(gè)功能。擇 在等更新,沙發(fā)!Leon 謝謝老師!前4節(jié)高屋建瓴地介紹了ocker和K8S的演進(jìn)歷史,接著4節(jié)ocker基礎(chǔ)深入淺出地介紹了重要的基礎(chǔ)知識(shí),受益匪淺,這4節(jié)ocker基礎(chǔ)再次讓我體會(huì)到了醍醐灌頂?shù)母杏X(jué)。多 課程干貨滿滿,一堂課下來(lái)不聽(tīng)上幾遍根本無(wú)法掌握課中的知識(shí)點(diǎn),一切從問(wèn)題出發(fā),能明白課中解決了什么問(wèn)題或提出了什么問(wèn)題,從這個(gè)角度出發(fā),更正理清課中講的知識(shí)點(diǎn),總結(jié)內(nèi)容如下:一、docker鏡像如何制作的兩種方式是什么?二、容器既然是一個(gè)封閉的進(jìn)程,那么外接程序是如何進(jìn)入容器這個(gè)進(jìn)程的呢?三、dockercot對(duì)掛載點(diǎn)oume內(nèi)容修改的影響是什么?四、容器與宿主機(jī)如何進(jìn)行文件讀寫?或oue是為了解決什么題?五、ocker的copyata功能是什么?解決了什么問(wèn)題?六、bindmount機(jī)制是什么?七、cgroupNamespace的作用是什么?獸 講得非常不錯(cuò),曾經(jīng)翻遍了幾乎所有Docker文檔,都沒(méi)中來(lái)得深刻,謝謝。 話,這些CMD執(zhí)行的yum命令修改的內(nèi)容還屬于只讀層?作者回復(fù)任何鏡像里的內(nèi)容,都屬于只讀層。commit之后的東西當(dāng)然也屬于只讀層。一 你好,磊哥,謝謝你講得這么詳細(xì),我有一點(diǎn)不是很清楚:容器中的主進(jìn)程在系統(tǒng)調(diào)用或調(diào)用一些lib時(shí),調(diào)用到的和容器只讀層提供的lib嗎作者回復(fù) !有些地方自己折騰狠難理解到!多謝老師高維指點(diǎn)。 請(qǐng)問(wèn)docker掛載有何限制沒(méi),是否隨便一個(gè) 都可以掛載?在容器里應(yīng)該是root用戶,豈是可以對(duì) 無(wú)節(jié)制地操作,哪怕原本主機(jī) 中有些文件并不允許當(dāng)前用戶?是否可以相應(yīng)限制作者回復(fù)。至于用戶權(quán)限,是有 namespace可以做一定的限制 如果在docker容器中部署oracle,實(shí)際生產(chǎn)環(huán)境有沒(méi)有人這么干?作者回復(fù)好像oracle自己就有個(gè)方案? 所以說(shuō)dockerexec每次都會(huì)創(chuàng)建一個(gè)和容器共享namespace的新進(jìn)程?作者回復(fù)可以這么理解,i.e.spawnanewprocessinexisting藍(lán)色天 Linux基礎(chǔ)薄弱,理解起來(lái)有點(diǎn)吃力作者回復(fù)不太理解的地方,可以提出來(lái)微 很清 確實(shí)清晰了很多了不過(guò)還是有不清楚的點(diǎn)作者回復(fù)可以提出來(lái)討論 老師您好!請(qǐng)問(wèn),搭建的Harbor服務(wù)器,在項(xiàng)目管理頁(yè)面的右上角會(huì)顯示我有作者回復(fù)不了解 老師好,又來(lái)問(wèn)您問(wèn)題了。生產(chǎn)中有沒(méi)有什么好的工具管理本地的dockerregistry,比如磁盤作者回復(fù)harbor孫 4.6內(nèi)核之前,查看/proc/$PID/cgroup,或者掛載cgroup時(shí),在容器中會(huì)看到整個(gè)系統(tǒng)的這個(gè)問(wèn)題感覺(jué)像陷阱,掛載后改變的是home的inode值(/test的inode),有數(shù)據(jù)就作者回復(fù)2.docker 掛載文件夾能理解,但是如果掛載宿主機(jī)的某一文件到容器,為什么需要容器事先存在同名的這個(gè)文件呢?作者回復(fù)不需要啊,文件 都不需要事先存在韓懿 豆沙 你好我用dockerrun起了app這個(gè)容器之后,查看aufs里層的信息,讀寫層為什么會(huì)和init層是同一個(gè)層呢?不是一個(gè)會(huì)被打包一個(gè)不會(huì)被打包么?#cat/sys/fs/aufs/si_cc04a4d4a9a38631/br[0- 作者回復(fù)你沒(méi)分清楚 和 的區(qū)別 干貨很多,要反復(fù)琢磨一下了!追尋云的痕 docker-ee的實(shí)現(xiàn)不是基于Hyper-V作者回復(fù)在windows上一共就兩種方案hyperv和wincontainer,它必然得支持 只會(huì)最后這個(gè)。dockerrun-p8000:80--cpuset-cpus="1"-m500M 木 張老師,能把搭建dockerk8s的環(huán)境簡(jiǎn)要說(shuō)一下嗎,比如使用ubuntu還是centos、rhel,什么作者回復(fù)看部署那篇 ;老師,有個(gè)地方還是不太明白,以下是你些的原文:ENTRYPOINTCMDdockerinit會(huì)負(fù)責(zé)完成根的準(zhǔn)備、掛載設(shè)備和、配hostnameexecv讓應(yīng)用進(jìn)程取代自己,成為容器里的PID=1的進(jìn)程。我有以下疑問(wèn):2、這里的dockerinit和應(yīng)用進(jìn)程在宿主機(jī)中是兩個(gè)不同的進(jìn)程id么4、一個(gè)容器內(nèi)部是否只有一個(gè)進(jìn)程?,或者說(shuō)容器只是一個(gè)房間(由aepce和cgrop組成),而其他的進(jìn)程都是走進(jìn)了這個(gè)房間,讓大家以為這個(gè)房間就是一個(gè)系統(tǒng),里面包含了這么多進(jìn)程,其實(shí)在宿主機(jī)的角度他們都是一個(gè)個(gè)進(jìn)程,只是共享了amepace和cgrop而已,這樣理解對(duì)么?作者回復(fù)是。替換當(dāng)然就是為了保證pd不變。注意,容器里的其他進(jìn)程都是1號(hào)進(jìn)程的子進(jìn)程,不存在獨(dú)立的說(shuō)法。甄心 為什作者回復(fù)因?yàn)楸坏絾为?dú)的netns里了 贊 請(qǐng)教一個(gè)問(wèn)題,為啥子鏡像的entrypoint會(huì)覆蓋母鏡像的entrypoint的作者回復(fù)因?yàn)閐ockerfile順序buildShJin、 那么老師,請(qǐng)問(wèn)有沒(méi)有辦法通過(guò) -it的方式進(jìn)入容器作者回復(fù)權(quán)限控制的辦法很多,但這也啥意義呢?我手寫一個(gè) 行的語(yǔ)言代碼就可以加入容器的amespace啊。所以不隨便給人root權(quán)限比較重要吧。 抱歉:再次進(jìn)入image還是dockerrunimage,但沒(méi)有指定volumn作者回復(fù)因?yàn)関olume除非刪除掉它還是在那臺(tái)主機(jī)上,你在別的機(jī)器上拉鏡像試試江宇 寫的不錯(cuò)點(diǎn) 作者回復(fù)再次進(jìn)入image是什 請(qǐng)問(wèn)老師,鏡像只提供文件系統(tǒng),系統(tǒng)調(diào)用使用的宿主機(jī)的內(nèi)核?這個(gè)感覺(jué)很模糊,不是很理解作者回復(fù)默念三遍內(nèi)核共享侯強(qiáng)亮 公司研發(fā)環(huán)境用的oracle的12c容 cetos7都是版本3的內(nèi)核,針對(duì)k8s,到目前為止有遇到過(guò)因?yàn)閮?nèi)核bg的問(wèn)題必須從3切換到版本4的內(nèi)核的場(chǎng)景嗎,比如切換到btu?篇幅問(wèn)題具體問(wèn)題不方便在這里描述。主要是想了解下,是否有遇到過(guò)cetos有些比較棘手的問(wèn)題,而不得不試圖切換到其它os的場(chǎng)景呢 docket里面的用戶和真實(shí)系統(tǒng)的會(huì) docker啟動(dòng)用戶用root好不 如果查看alpine:latest的掛 ,應(yīng)該如何查找換句話說(shuō)就是如何通過(guò)dockerimage的唯一id來(lái)查找出內(nèi)部id(si_xxx)?作者回復(fù)遺憾的是,這個(gè)ID沒(méi)有對(duì)應(yīng)關(guān)系,最方便的做法是查看mnt 變化小魚 老師的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氨綸彈力行業(yè)深度研究報(bào)告
- 2025年度新能源充電樁建設(shè)與運(yùn)營(yíng)合同-@-2
- 2025年塑料線路支架行業(yè)深度研究分析報(bào)告
- 新車拖車合同范本
- 2025年度項(xiàng)目合作保密協(xié)議書模板匯編
- 2025年度二手家具買賣合同范本
- 2025年度房屋租賃合同范本(含物業(yè)管理)
- 2025年度殘疾人輔助器具研發(fā)與生產(chǎn)合作協(xié)議
- 2025年襪子繡花項(xiàng)目投資可行性研究分析報(bào)告
- 2025年度二次供水設(shè)備清洗保養(yǎng)與環(huán)保合規(guī)合同
- 動(dòng)力管道設(shè)計(jì)手冊(cè)-第2版
- 看不見(jiàn)的森林
- 危險(xiǎn)作業(yè)申請(qǐng)表
- 中小學(xué)教師專業(yè)標(biāo)準(zhǔn)解讀
- 有限空間作業(yè)安全管理監(jiān)理實(shí)施細(xì)則
- 成人術(shù)后口渴癥狀評(píng)估與管理的專家共識(shí)課件
- 初中心理健康-4.我與我生活的環(huán)境教學(xué)課件設(shè)計(jì)
- 《城市軌道交通員工職業(yè)素養(yǎng)》課程標(biāo)準(zhǔn)
- 語(yǔ)文新課程課堂教學(xué)設(shè)計(jì)課件
- 金屬非金屬礦山安全規(guī)程培訓(xùn)課件(五)
- 企事業(yè)單位全面風(fēng)險(xiǎn)清單(含內(nèi)控風(fēng)險(xiǎn)-2023版-雷澤佳編制)
評(píng)論
0/150
提交評(píng)論