Docker æ¯å®¹å¨ç®¡çå·¥å
·
Docker
æ¯ä¸ä¸ªè½»é级ã便æºå¼ãä¸å¤çé离ç容å¨ï¼ä¹æ¯ä¸ä¸ªå¯ä»¥å¨å®¹å¨ä¸å¾æ¹ä¾¿å°æ建ãä¼ è¾ãè¿è¡åºç¨çå¼æãåä¼ ç»çèæåææ¯ä¸åçæ¯ï¼Docker
å¼æ并ä¸èæåºä¸å°èææºï¼èæ¯ç´æ¥ä½¿ç¨å®¿ä¸»æºçå
æ ¸å硬件ï¼ç´æ¥å¨å®¿ä¸»æºä¸è¿è¡å®¹å¨å
åºç¨ãä¹æ£æ¯å¾çäºæ¤ï¼Docker
容å¨å
è¿è¡çåºç¨å宿主æºä¸è¿è¡çåºç¨æ§è½å·®è·å ä¹å¯ä»¥å¿½ç¥ä¸è®¡ã
ä½æ¯ Docker æ¬èº«å¹¶ä¸æ¯ä¸ä¸ªå®¹å¨ç³»ç»ï¼èæ¯ä¸ä¸ªåºäºåæç容å¨åå·¥å
· LXC ç¨æ¥å建èæç¯å¢çå·¥å
·ã类似 LXC çå·¥å
·å·²ç»å¨ç产ç¯å¢ä¸ä½¿ç¨å¤å¹´ï¼Docker ååºäºæ¤æä¾äºæ´å å好çéå管çå·¥å
·åé¨ç½²å·¥å
·ã
Docker ä¸æ¯èæåå¼æ
Docker 第ä¸æ¬¡åå¸çæ¶åï¼å¾å¤äººé½æ¿ Docker åèææº VMwareãKVM å VirtualBox
æ¯è¾ã尽管ä»åè½ä¸çï¼Docker åèæåææ¯è´åäºè§£å³çé®é¢é½å·®ä¸å¤ï¼ä½æ¯ Docker
å´æ¯éåäºå¦ä¸ç§é常ä¸åçæ¹å¼ãèææºæ¯èæåºä¸å¥ç¡¬ä»¶ï¼èææºçç³»ç»è¿è¡çç£çæä½ï¼å
¶å®é½æ¯å¨å¯¹èæåºæ¥çç£çè¿è¡æä½ãå½è¿è¡ CPU
å¯éåçä»»å¡æ¶ï¼æ¯èææºæèæç³»ç»éç CPU
æ令âç¿»è¯âæ宿主æºçCPUæ令并è¿è¡æ§è¡ã两个ç£çå±ï¼ä¸¤ä¸ªå¤çå¨è°åº¦å¨ï¼ä¸¤ä¸ªæä½ç³»ç»æ¶èçå
åï¼ææèæåºçè¿äºé½ä¼å¸¦æ¥ç¸å½å¤çæ§è½æ失ï¼ä¸å°èææºææ¶èç硬件èµæºå对åºç硬件ç¸å½ï¼ä¸å°ä¸»æºä¸è·å¤ªå¤çèææºä¹åå°±ä¼è¿è½½ãè
Docker 就没æè¿ç§é¡¾èãDocker è¿è¡åºç¨éåçæ¯â容å¨âç解å³æ¹æ¡ï¼ä½¿ç¨ namespace å CGroup
è¿è¡èµæºéå¶ï¼å宿主æºå
±äº«å
æ ¸ï¼ä¸èæç£çï¼ææç容å¨ç£çæä½å
¶å®é½æ¯å¯¹ /var/lib/docker/
çæä½ãç®è¨ä¹ï¼Docker å
¶å®åªæ¯å¨å®¿ä¸»æºä¸è¿è¡äºä¸ä¸ªåå°éå¶çåºç¨ç¨åºã
ä»ä¸é¢ä¸é¾çåºï¼å®¹å¨åèææºçæ¦å¿µå¹¶ä¸ç¸åï¼å®¹å¨ä¹å¹¶ä¸è½å代èææºãå¨å®¹å¨åæä¸è½åçå°æ¹ï¼èææºå¯ä»¥å¤§æ¾èº«æãä¾å¦ï¼å®¿ä¸»æºæ¯
Linuxï¼åªè½éè¿èææºè¿è¡ Windowsï¼Docker 便æ æ³åå°ãåä¾å¦ï¼å®¿ä¸»æºæ¯ Windowsï¼Windows 并ä¸è½ç´æ¥è¿è¡
Dockerï¼Windowsä¸ç Docker å
¶å®æ¯è¿è¡å¨ VirtualBox èææºéçã
Docker 使ç¨å±çº§çæ件系ç»
åé¢æå°è¿ï¼Docker åç°æ容å¨ææ¯ LXC çç¸æ¯ï¼ä¼å¿ä¹ä¸å°±æ¯ Docker æä¾äºéå管çãå¯¹äº Docker
èè¨ï¼éåæ¯ä¸ä¸ªéæçãåªè¯»ç容å¨æ件系ç»çå¿«ç
§ãç¶èä¸ä»
å¦æ¤ï¼Docker
ä¸ææçç£çæä½é½æ¯å¯¹ç¹å®çCopy-On-Writeæ件系ç»è¿è¡çãä¸é¢éè¿ä¸ä¸ªä¾å解éä¸ä¸è¿ä¸ªé®é¢ã
ä¾å¦æ们è¦å»ºç«ä¸ä¸ªå®¹å¨è¿è¡ JAVA Web åºç¨ï¼é£ä¹æ们åºè¯¥ä½¿ç¨ä¸ä¸ªå·²ç»å®è£
äº JAVA çéåãå¨
Dockerfileï¼ä¸ä¸ªç¨äºçæéåçæ令æ件ï¼ä¸ï¼åºè¯¥ææâåºäº JAVA éåâï¼è¿æ · Docker å°±ä¼å» Docker Hub
Registry ä¸ä¸è½½æåæ建好ç JAVA éåãç¶åå Dockerfile ä¸ææä¸è½½å¹¶è§£å Apache Tomcat è½¯ä»¶å° /opt/tomcat
æ件夹ä¸ãè¿æ¡å½ä»¤å¹¶ä¸ä¼å¯¹åæç JAVA éå产çä»»ä½å½±åï¼èä»
ä»
æ¯å¨åæéåä¸é¢æ·»å äºä¸ä¸ªæ¹å¨å±ãå½ä¸ä¸ªå®¹å¨å¯å¨æ¶ï¼å®¹å¨å
çæææ¹å¨å±é½ä¼å¯å¨ï¼å®¹å¨ä¼ä»ç¬¬ä¸å±ä¸è¿è¡ /usr/bin/java
å½ä»¤ï¼å¹¶ä¸è°ç¨å¦å¤ä¸å±ä¸ç /opt/tomcat/bin
å½ä»¤ãå®é
ä¸ï¼Dockerfile ä¸æ¯ä¸æ¡æ令é½ä¼äº§çä¸ä¸ªæ°çæ¹å¨å±ï¼å³ä¾¿åªæä¸ä¸ªæ件被æ¹å¨ãå¦æç¨è¿ Git
å°±è½æ´æ¸
æ¥å°è®¤è¯è¿ä¸ç¹ï¼æ¯æ¡æ令就åæ¯æ¯æ¬¡ commitï¼é½ä¼çä¸è®°å½ãä½æ¯å¯¹äº Docker
æ¥è¯´ï¼è¿ç§æ件系ç»æä¾äºæ´å¤§ççµæ´»æ§ï¼ä¹å¯ä»¥æ´æ¹ä¾¿å°ç®¡çåºç¨ç¨åºã
æ们Spantreeçå¢éæä¸ä¸ªèªå·±ç»´æ¤çå«æ Tomcat çéåãåå¸æ°çæ¬ä¹é常ç®åï¼ä½¿ç¨ Dockerfile
å°æ°çæ¬æ·è´è¿éåä»èå建ä¸ä¸ªæ°éåï¼ç¶åç»æ°éåè´´ä¸çæ¬çæ ç¾ãä¸åçæ¬çéåçä¸åä¹å¤ä»
ä»
æ¯ä¸ä¸ª 90 MB 大å°ç WAR
æ件ï¼ä»ä»¬æåºäºç主éåé½æ¯ç¸åçãå¦æ使ç¨èææºå»ç»´æ¤è¿äºä¸åççæ¬çè¯ï¼è¿è¦æ¶èæå¾å¤ä¸åçç£çå»åå¨ç¸åçç³»ç»ï¼èä½¿ç¨ Docker
å°±åªéè¦å¾å°çç£ç空é´ãå³ä¾¿æ们åæ¶è¿è¡è¿ä¸ªéåçå¾å¤å®ä¾ï¼æ们ä¹åªéè¦ä¸ä¸ªåºç¡ç JAVA / TOMCAT éåã
Docker å¯ä»¥è约æ¶é´
å¾å¤å¹´åæå¨ä¸ºä¸ä¸ªè¿éé¤å
å¼å软件æ¶ï¼ä»
ä»
æ¯ä¸ºäºæè¿°å¦ä½æ建ç¯å¢é½éè¦åä¸ä¸ª 12 页ç Word ææ¡£ãä¾å¦æ¬å° Oracle
æ°æ®åºï¼ç¹å®çæ¬ç
JAVAï¼ä»¥åå
¶ä»ä¸ä¸å
«å
«çç³»ç»å·¥å
·åå
±äº«åºã软件å
ãæ´ä¸ªæ建è¿ç¨æµªè´¹æäºæ们å¢éæ¯ä¸ªäººå ä¹ä¸å¤©çæ¶é´ï¼å¦æç¨éé±è¡¡éçè¯ï¼è±æäºæ们ä¸ä¸ç¾éçæ¶é´ææ¬ãè½ç¶å®¢æ·å·²ç»å¯¹è¿ç§äºæ
ä¹ ä»¥ä¸ºå¸¸ï¼çè³è®¤ä¸ºè¿æ¯å¼å
¥æ°æåã让æåéåºç¯å¢ã让èªå·±çåå·¥éåºæ们ç软件æå¿
é¡»çææ¬ï¼ä½æ¯ç¸æ¯è¾èµ·æ¥ï¼æ们å®æ¿ææ´å¤çæ¶é´è±å¨ä¸ºå®¢æ·æ建å¯ä»¥å¢è¿ä¸å¡çåè½ä¸é¢ã
å¦æå½æ¶æ Dockerï¼é£ä¹æ建ç¯å¢å°±ä¼å使ç¨èªå¨åæ建工å
· Puppet / Chef / Salt / Ansible
ä¸æ ·ç®åï¼æ们ä¹å¯ä»¥ææ´ä¸ªæ建æ¶é´å¨æä»ä¸å¤©ç¼©ç为å åéãä½æ¯åè¿äºå·¥å
·ä¸åçå°æ¹å¨äºï¼Docker
å¯ä»¥ä¸ä»
ä»
å¯ä»¥æ建æ´ä¸ªç¯å¢ï¼è¿å¯ä»¥å°æ´ä¸ªç¯å¢ä¿åæç£çæ件ï¼ç¶åå¤å¶å°å«çå°æ¹ãéè¦ä»æºç ç¼è¯ Node.js åï¼Docker
åå¾å°ãDocker ä¸ä»
ä»
å¯ä»¥æ建ä¸ä¸ª Node.js ç¯å¢ï¼è¿å¯ä»¥å°æ´ä¸ªç¯å¢åæéåï¼ç¶åä¿åå°ä»»ä½å°æ¹ãå½ç¶ï¼ç±äº Docker
æ¯ä¸ä¸ªå®¹å¨ï¼æ以ä¸ç¨æ
å¿å®¹å¨å
æ§è¡çä¸è¥¿ä¼å¯¹å®¿ä¸»æºäº§çä»»ä½çå½±åã
ç°å¨æ°å å
¥æ们å¢éç人åªéè¦è¿è¡ docker-compose up
å½ä»¤ï¼ä¾¿å¯ä»¥åæ¯åå¡ï¼ç¶åå¼å§å·¥ä½äºã
Docker å¯ä»¥èçå¼é
å½ç¶ï¼æ¶é´å°±æ¯éé±ãé¤äºæ¶é´å¤ï¼Docker è¿å¯ä»¥èçå¨åºç¡è®¾æ½ç¡¬ä»¶ä¸çå¼éãé«å¾·çº³å麦è¯é¡çç 究表æï¼æ°æ®ä¸å¿çå©ç¨çå¨ 6% -
12% å·¦å³ãä¸ä»
å¦æ¤ï¼å¦æéç¨èææºçè¯ï¼ä½ è¿éè¦è¢«å¨å°çæ§å设置æ¯å°èææºç CPU 硬çåå
åç使ç¨çï¼å 为éç¨äºéæååº(static
partitioning)æ以èµæºå¹¶ä¸è½å®å
¨è¢«å©ç¨ããè容å¨å¯ä»¥è§£å³è¿ä¸ªé®é¢ï¼å®¹å¨å¯ä»¥å¨å®ä¾ä¹é´è¿è¡å
ååç£çå
±äº«ãä½ å¯ä»¥å¨åä¸å°ä¸»æºä¸è¿è¡å¤ä¸ªæå¡ãå¯ä»¥ä¸ç¨å»éå¶å®¹å¨ææ¶èçèµæºãå¯ä»¥å»éå¶èµæºãå¯ä»¥å¨ä¸éè¦çæ¶ååæ¢å®¹å¨ï¼ä¹ä¸ç¨æ
å¿å¯å¨å·²ç»åæ¢çç¨åºæ¶ä¼å¸¦æ¥è¿å¤çèµæºæ¶èãåæ¨ä¸ç¹çæ¶ååªæå¾å°ç人ä¼å»è®¿é®ä½ çç½ç«ï¼åæ¶ä½ éè¦æ¯è¾å¤çèµæºæ§è¡å¤é´çæ¹å¤çä»»å¡ï¼é£ä¹å¯ä»¥å¾ç®åç便å®ç°èµæºç交æ¢ã
èææºææ¶èçå
åã硬çãCPU é½æ¯åºå®çï¼ä¸è¬å¨æè°æ´é½éè¦éå¯èææºãèç¨ Docker çè¯ï¼ä½ å¯ä»¥è¿è¡èµæºéå¶ï¼å¾çäº
CGroupï¼å¯ä»¥å¾æ¹ä¾¿å¨æè°æ´èµæºéå¶ï¼è®©ç¶ä¹å¯ä»¥ä¸è¿è¡èµæºéå¶ãDocker
容å¨å
çåºç¨å¯¹å®¿ä¸»æºèè¨åªæ¯ä¸¤ä¸ªé离çåºç¨ç¨åºï¼å¹¶ä¸æ¯ä¸¤ä¸ªèææºï¼æ以宿主æºä¹å¯ä»¥èªè¡å»åé
èµæºã
Docker æä¸ä¸ªå¥å£®çéåæ管系ç»
åé¢æå°è¿ï¼è¿ä¸ªæ管系ç»å°±å«å Docker Hub Registryãæªæ¢å° 2015å¹´4æ29æ¥ï¼äºèç½ä¸å¤§çº¦æ 14000
个å
Œ
±ç Dockerï¼è大é¨åé½è¢«æç®¡å¨ Docker Hub ä¸é¢ãå Github å·²ç»å¾å¤§ç¨åº¦ä¸æ为å¼æºé¡¹ç®ç代表ä¸æ ·ï¼Docker
å®æ¹ç Docker Hub åå·²ç»æ¯å
Œ
± Docker éåç代表ãè¿äºéåå¯ä»¥ä½ä¸ºä½ åºç¨åæ°æ®æå¡çåºç¡ã
ä¹æ£æ¯å¾çäºæ¤ï¼ä½ å¯ä»¥éæå°è¯ææ°çææ¯ï¼è¯´ä¸å®æäºäººå°±æå¾å½¢åæ°æ®åºçå®ä¾æå
æäº Docker éåæ管å¨ä¸é¢ãåä¾å¦
Gitlabï¼æå·¥æ建 Gitlab é常å°é¾ï¼è¯è
ä¸å»ºè®®æ®éç¨æ·å»æå·¥æ建ï¼èå¦æä½¿ç¨ Docker
Gitlabï¼è¿ä¸ªéååä¼äºç§å
便æ建å®æãåä¾å¦ç¹å® Ruby çæ¬ç Rails åºç¨ï¼åä¾å¦ Linux ä¸ç .NET
åºç¨ï¼è¿äºé½å¯ä»¥ä½¿ç¨ç®åçä¸æ¡ Docker å½ä»¤æ建å®æã
Docker å®æ¹éåé½æ official æ ç¾ï¼å®å
¨æ§å¯ä»¥ä¿è¯ãä½æ¯ç¬¬ä¸æ¹éåçå®å
¨æ§æ æ³ä¿è¯ï¼æ以请谨æ
ä¸è½½ç¬¬ä¸æ¹éåãç产ç¯å¢ä¸å¯ä»¥åªä½¿ç¨ç¬¬ä¸æ¹æä¾ç Dockerfile æ建éåã
Docker Github ä»ç»ï¼5 ç§å
æå®ä¸ä¸ª Gitlab
å
³äº Linux ä¸ç .NET åºç¨å Rails åºç¨ï¼å°ä¼å¨ä»¥åçæç« ä¸å详ç»ä»ç»ã
Docker å¯ä»¥é¿å
产ç Bug
Spantree ä¸ç´æ¯âåºå®åºç¡è®¾ç½®âï¼immutable
infrastructureï¼çççç±å¥½è
ãæ¢å¥è¯è¯´ï¼é¤éæå¿èåºè¡è¿ç§æ¼æ´ï¼æ们尽éä¸å¯¹ç³»ç»åå级ï¼ä¹å°½éä¸å»æ¹åç³»ç»ç设置ãå½æ·»å æ°æå¡å¨çæ¶åï¼æ们ä¹ä¼ä»å¤´æ建æå¡å¨çç³»ç»ï¼ç¶åç´æ¥å°éå导å
¥ï¼å°æå¡å¨æ¾å
¥è´è½½åè¡¡çé群éï¼ç¶å对è¦éä¼çæå¡å¨è¿è¡å¥åº·æ£æ¥ï¼æ£æ¥å®æ¯å移é¤é群ãå¾çäº
Docker éåå¯ä»¥å¾è½»æ¾ç导å
¥å¯¼åºï¼æ们å¯ä»¥æ大ç¨åº¦å°åå°å 为ç¯å¢åçæ¬é®é¢å¯¼è´çä¸å
¼å®¹ï¼å³ä¾¿æä¸å
¼å®¹äºä¹å¯ä»¥å¾è½»æ¾å°åæ»ãå½ç¶ï¼æäº
Dockerï¼æ们å¨ç产ãæµè¯åå¼åä¸çè¿è¡ç¯å¢å¾å°ç»ä¸ã以åå¨ååå¼åæ¶ï¼ä¼å 为æ¯ä¸ªäººå¼åççµèé
ç½®ä¸åè导è´âå¨æççµèä¸æ¯è½è¿è¡çï¼ä½ çæä¹ä¸è¡âçæ
åµï¼èå¦ä»
Docker å·²ç»å¸®æ们解å³äºè¿ä¸ªé®é¢ã
Docker ç®ååªè½è¿è¡å¨ Linux ä¸
åé¢ä¹æå°è¿ï¼Docker 使ç¨çæ¯ç»è¿é¿æ¶é´ç产ç¯å¢æ£éªçææ¯ï¼è½ç¶è¿äºææ¯å·²ç»é½åºç°å¾é¿æ¶é´äºï¼ä½æ¯å¤§é¨åææ¯é½è¿æ¯ Linux
ç¬æçï¼ä¾å¦ LXC å Cgroupãä¹å°±æ¯è¯´ï¼æªæ¢å°ç°å¨ï¼Docker 容å¨å
åªè½å¨ Linux ä¸è¿è¡ Linux
ä¸çæå¡ååºç¨ãMicrosoft æ£å¨å Docker ç´§å¯åä½ï¼å¹¶ä¸å·²ç»å®£å¸äºä¸ä¸ä¸ªçæ¬ç Windows Server å°ä¼æ¯æ
Docker 容å¨ï¼å¹¶ä¸å½å为 Windows Dockerï¼ä¼°è®¡éç¨çææ¯åºè¯¥æ¯Hyper-V
Containerï¼æ们ææå¨æªæ¥çå å¹´å
çå°è¿ä¸ªçæ¬ã
温馨提示:答案为网友推荐,仅供参考