Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÎÒµÄËéËéÄDockerÈëÃÅÖ¸ÄÏ
 
×÷ÕߣººÎÁÖ³å À´Ô´£ºdockone.io ·¢²¼ÓÚ 2015-9-2
  3038  次浏览      30
 

Ö®Ç°Ôø¾­·­Òë¹ýºÜ¶àDockerÈëÃŽéÉܵÄÎÄÕ£¬Ö®ËùÒÔÔÙ·­ÒëÕâÆª£¬ÊÇÒòΪAndersµÄ½Ç¶ÈºÜ¶ÀÌØ£¬Ë¼Â·Ò²ºÜµ÷Àí¡£ÄãÒ²¿ÉÒÔ¿´ÏÂ×÷ÕßµÄÑݽ²¸å¡¶Docker£¬ DevOpsµÄδÀ´¡·¡£±¾ÎĽéÉÜÁËDockerµÄһЩ»ù±¾¸ÅÄî¡¢ÓÕÈ˵ÄÌØÐÔ¡¢DockerµÄ¹¤×÷Ô­Àí¡¢ÈÕ³£¹ÜÀí»ù±¾²Ù×÷£¬ÒÔ¼°Ò»Ð©DockerµÄÎÊÌâµÄ½â¾ö·½°¸¡£

ʲôÊÇDocker£¬ÄãÓ¦¸ÃÖªµÀЩʲô£¿

Ïà±ÈºÜ¶àÈ˵ĽâÊÍ£¬ÎÒÏàÐÅ˵DockerÊÇÒ»¸öÇáÁ¿¼¶µÄÐéÄâ»ú¸üÈÝÒ×Àí½â¡£ÁíÍâÒ»ÖÖ½âÊÍÊÇ£ºDocker¾ÍÊDzÙ×÷ϵͳÖеÄchroot¡£Èç¹ûÄã²»ÖªµÀchrootÊÇʲôµÄ»°£¬ºóÒ»ÖÖ½âÊÍ¿ÉÄÜÎÞ·¨°ïÖúÄãÀí½âʲôÊÇDocker¡£

chrootÊÇÒ»ÖÖ²Ù×÷£¬Äܸı䵱ǰÔËÐеĽø³ÌºÍ×Ó½ø³ÌµÄ¸ùĿ¼¡£ ³ÌÐòÔËÐÐÔÚÕâÑùµÄÒ»¸ö±»Ð޸ĵĻ·¾³ÖУ¬Ëü²»ÄÜ·ÃÎÊÕâ¸ö»·¾³Ä¿Â¼Ê÷Ö®ÍâµÄÎļþºÍÃüÁÕâ¸ö±»Ð޸ĵĻ·¾³¾ÍÊÇ¡°chrootÀÎÁý¡±¡£

-- Arch Linux µÄ wiki ÖÐ¶Ô chroot µÄ½âÊÍ

ÐéÄâ»ú vs. Docker

ÏÂÃæÕâÕÅͼÃèÊöÁËÐéÄâ»úºÍDockerÖ®¼äµÄ²îÒì¡£ ÔÚVMÖУ¬ËÞÖ÷OSÉÏÊÇhypervisor£¨ÐéÄâ»ú¼àÊÓÆ÷£©, ×îÉϲãÊǿͻ§»ú²Ù×÷ϵͳ£¬¶øDockerÔòʹÓÃDockerÒýÇæºÍÈÝÆ÷¡£ ÕâÑù½âÊÍÄãÄÜÀí½âÂð? DockerÒýÇæºÍhypervisorÖ®¼äµÄÇø±ðÓÖÊÇÊ²Ã´ÄØ£¿Äã¿ÉÒÔÁгöÔËÐÐÔÚËÞÖ÷OSÉϵĽø³ÌÀ´Àí½âËüÃǵÄÇø±ð¡£

ÏÂÃæÕâ¸ö¼òµ¥µÄ½ø³ÌÊ÷¿ÉÒÔ¿´³öËüÃǵIJîÒì¡£ËäÈ»ÐéÄâ»úÖÐÔËÐÐÁËºÜ¶à½ø³Ì£¬µ«ÊÇÔËÐÐÐéÄâ»úµÄËÞÖ÷»úÉÏÈ´Ö»ÓÐÒ»¸ö½ø³Ì¡£

# Running processes on Host for a VM
$ pstree VM

-+= /VirtualBox.app
|--= coreos-vagrant

¶øÔËÐÐDockerÒýÇæµÄÖ÷»úÉÏÔò¿ÉÒÔ¿´µ½ËùÓеĽø³Ì¡£ ÈÝÆ÷½ø³ÌÊÇÔËÐÐÔÚËÞÖ÷OSÉϵģ¡£¬ËûÃÇ¿ÉÒÔͨ¹ýÆÕͨµÄps£¬killµÈÃüÁî½øÐмì²éºÍά»¤¡£

# DockerÔÚÖ÷»úÖеĽø³Ì
$ pstree docker

-+= /docker
|--= /bin/sh
|--= node server.js
|--= go run app
|--= ruby server.rb
...
|--= /bin/bash

ËùÓеĶ«Î÷¶¼ÊÇ͸Ã÷µÄ£¬ Òâζ×ÅÊ²Ã´ÄØ£¿Òâζ×ÅDockerÈÝÆ÷±ÈÐéÄâ»ú¸üС£¬¸ü¿ì£¬¸üÈÝÒ×ÓëÆäËü¶«Î÷¼¯³É¡£ÈçÏÂͼËùʾ¡£

°²×°CoreOSµÄСÐÍÐéÄâ»ú¾ÓÈ»ÓÐ1.2GB£¬ ¶ø×°ÉÏbusyboxµÄСÐÍÈÝÆ÷Ö»ÓÐ2.5MB¡£×î¿ìµÄÐéÄâ»úÆô¶¯Ê±¼äÒ²ÊÇ·ÖÖÓ¼¶µÄ£¬¶øÈÝÆ÷µÄÆô¶¯Ê±¼äͨ³£²»µ½Ò»Ãë¡£ÔÚͬһËÞÖ÷»úÉϰ²×°ÐéÄâ»úÐèÒªÕýÈ·µÄÉèÖÃÍøÂ磬 ¶ø°²×°Docker·Ç³£¼òµ¥¡£

ÕâôÀ´¿´£¬ÈÝÆ÷ÊÇÇáÁ¿¡¢¿ìËÙ²¢ÇÒÒ×¼¯³É£¬µ«Õâ²¢²»ÊÇËüµÄÈ«²¿£¡

Docker ÊÇÒ»·ÝºÏÔ¼

Docker»¹ÊÇ¿ª·¢ÕߺÍÔËά֮¼äµÄ¡°ºÏÔ¼¡±¡£ ¿ª·¢ºÍÔËάÔÚÑ¡Ôñ¹¤¾ßºÍ»·¾³Ê±µÄ×Ë̬ͨ³£²î±ðºÜ´ó¡£¿ª·¢ÕßÏëҪʹÓÃһЩÉÁÁÁµÄж«Î÷£¬±ÈÈçNode.js¡¢Rust¡¢Go¡¢Î¢·þÎñ¡¢Cassandra¡¢Hadoop¡¢blablabla.........¶øÔËάÔòÇãÏòÓÚʹÓÃÒÔÍùÓùýµÄ¹¤¾ß£¬ÒòΪÊÂʵ֤Ã÷ÄÇЩ¾ÉµÄ¹¤¾ßºÜÓÐЧ¡£

µ«ÕâǡǡÊÇDockerµÄÁÁµã£¬ ÔËάϲ»¶Ëü£¬ÒòΪDockerÈÃËûÃÇÖ»Òª¹ØÐÄÒ»¼þÊÂ: ²¿ÊðÈÝÆ÷£¬ ¶ø¿ª·¢ÕßÒ²Ò»ÑùºÜ¿ªÐÄ£¬Ö»ÒªÐ´ºÃ´úÂ룬ȻºóÍùÈÝÆ÷ÀïÒ»ÈÓ£¬Ê£ÏµĽ»¸øÔËά¾ÍÍêÊÂÁË¡£

²»¹ý±ð¼±£¬Õ⻹ûÍê¡£ÔËά»¹ÄܰïÖú¿ª·¢Õß¹¹½¨ÓÅ»¯ºÃµÄÈÝÆ÷ÒÔ±ãÓÃÓÚ±¾µØ¿ª·¢¡£

¸üºÃµÄ×ÊÔ´ÀûÓÃ

ºÜ¶àÄêǰ£¬ÄÇʱºò»¹Ã»ÓÐÐéÄ⻯£¬µ±ÎÒÃÇÐèÒª´´½¨Ò»¸öзþÎñʱ£¬ÎÒÃDZØÐëÉêÇëʵ¼ÊµÄÎïÀí»úÓ²¼þ¡£ Õâ¿ÉÄÜÒª»¨ÉÏÊýÔ£¬ÒÀÀµÓÚ¹«Ë¾µÄÁ÷³Ì¡£Ò»µ©·þÎñÆ÷µ½Î»£¬ÎÒÃÇ´´½¨ºÃ·þÎñ£¬ºÜ¶àʱºòËü²¢Ã»ÓÐÏñÎÒÃÇÏ£ÍûµÄÄÇÑù³É¹¦£¬ÒòΪ·þÎñÆ÷µÄCPUʹÓÃÂÊÖ»ÓÐ5%¡£ Ì«ÉݳÞÁË¡£

½Ó×Å£¬ÐéÄ⻯À´ÁË¡£Ëü¿ÉÒÔÔÚ¼¸·ÖÖÓÖ®ÄÚ°Ñһ̨»úÆ÷ÔËתÆðÀ´£¬»¹¿ÉÒÔÔÚͬһӲ¼þÉÏÔËÐжà¸öÐéÄâ»ú£¬×ÊԴʹÓÃÂʾͲ»Ö»5%ÁË¡£µ«ÊÇ£¬ÎÒÃÇ»¹ÐèÒª¸øÃ¿¸ö·þÎñ·ÖÅäÒ»¸öÐéÄâ»ú£¬Òò´ËÎÒÃÇ»¹ÊDz»ÄÜÈçÔ¸µÄʹÓÃÕą̂»úÆ÷¡£

ÈÝÆ÷»¯ÊÇÑÝ»¯½ø³ÌµÄÏÂÒ»²½¡£ÈÝÆ÷¿ÉÒÔÔÚ¼¸ÃëÖ®ÄÚ´´½¨ÆðÀ´£¬¶øÇÒ»¹ÄÜÒÔ±ÈÐéÄâ»ú¸üСµÄÁ£¶È½øÐв¿Êð¡£

ÒÀÀµ

DockerÆô¶¯ËÙ¶ÈÕæµÄºÜ¿á¡£ µ«ÊÇ£¬ÎÒÃÇΪʲô²»°ÑËùÓеͼ·þÎñ²¿Êðµ½Í¬Ò»Ì¨»úÆ÷ÉÏÄØ£¿ Ô­ÒòºÜ¼òµ¥£ºÒÀÀµµÄÎÊÌâ¡£ÔÚͬһ̨»úÆ÷Éϰ²×°¶à¸ö¶ÀÁ¢µÄ·þÎñ£¬²»¹ÜÊÇÕæÊÇ»úÆ÷»¹ÊÇÐéÄâ»ú¶¼ÊÇÒ»³¡ÔÖÄÑ¡£ÓÃDocker¹«Ë¾µÄ˵·¨ÊÇ£ºµØÓüÒ»ÑùµÄ¾ØÕóÒÀÀµ¡£

¶øDockerͨ¹ýÔÚÈÝÆ÷Öб£ÁôÒÀÀµ¹ØÏµ½â¾öÁ˾ØÕóÒÀÀµµÄÎÊÌâ¡£

ËÙ¶È

¿ìµ±È»²»´í£¬µ«ÊÇÄÜ¿ì100±¶¾ÍÌ«²»¿É˼ÒéÁË¡£ËÙ¶ÈÈúܶàÊÂÇé³ÉΪ¿ÉÄÜ£¬Ôö¼ÓÁ˸ü¶àеĿÉÄÜÐÔ¡£±ÈÈ磬ÏÖÔÚ¿ÉÒÔ¿ìËÙ´´½¨ÐµĻ·¾³£¬Èç¹ûÐèÒª´ÓClojure¿ª·¢»·¾³ÍêÕûµÄÇл»µ½GoÓïÑÔÂð£¿Æô¶¯Ò»¸öÈÝÆ÷°É¡£ÐèҪΪ¼¯³ÉºÍÐÔÄܲâÊÔÌṩÉú²ú»·¾³DB £¿Æô¶¯Ò»¸öÈÝÆ÷°É£¡ ÐèÒª´ÓApacheÇл»Õû¸öÉú²ú»·¾³µ½Nginx£¿Æô¶¯ÈÝÆ÷°É£¡

DockerÊÇÔõô¹¤×÷µÄ£¿

DockerÊÇÒ»¸öClient-Server½á¹¹µÄϵͳ£¬DockerÊØ»¤½ø³ÌÔËÐÐÔÚÖ÷»úÉÏ£¬ È»ºóͨ¹ýSocketÁ¬½Ó´Ó¿Í»§¶Ë·ÃÎÊ£¬ ¿Í»§¶ËºÍÊØ»¤½ø³ÌÒ²¿ÉÒÔÔËÐÐÔÙͬһÖ÷»úÉÏ£¬µ«Õâ²»ÊDZØÐëµÄ¡£DockerÃüÁîÐпͻ§¶ËÒ²ÊÇÀàËÆµÄ¹¤×÷·½Ê½£¬µ«Ëüͨ³£Í¨¹ýUnixÓòÌ×½Ó×Ö¶ø²»ÊÇTCPÌ×½Ó×ÖÁ¬½Ó¡£

ÊØ»¤½ø³Ì´Ó¿Í»§¶Ë½ÓÊÜÃüÁî²¢¹ÜÀíÔËÐÐÔÚÖ÷»úÉϵÄÈÝÆ÷¡£

Docker ¸ÅÄî¼°Ï໥×÷ÓÃ

Ö÷»ú£¬ ÔËÐÐÈÝÆ÷µÄ»úÆ÷¡£

¾µÏñ£¬ÎļþµÄ²ã´Î½á¹¹£¬ÒÔ¼°°üº¬ÈçºÎÔËÐÐÈÝÆ÷µÄÔªÊý¾Ý

ÈÝÆ÷£¬Ò»¸ö´Ó¾µÏñÖÐÆô¶¯£¬°üº¬ÕýÔÚÔËÐеijÌÐòµÄ½ø³Ì

Registry£¬ ¾µÏñ²Ö¿â

¾í£¬ÈÝÆ÷ÍâµÄ´æ´¢

Dockerfile£¬ ÓÃÓÚ´´½¨¾µÏñµÄ½Å±¾

ÎÒÃÇ¿ÉÒÔͨ¹ýDockerfileÀ´¹¹½¨¾µÏñ£¬ »¹¿ÉÒÔͨ¹ýcommitÒ»¸öÔËÐеÄÈÝÆ÷À´´´½¨Ò»¸ö¾µÏñ£¬Õâ¸ö¾µÏñ¿ÉÒԻᱻ±ê¼Ç£¬¿ÉÒÔÍÆµ½Registry»òÕß´ÓRegistryÉÏÀ­ÏÂÀ´£¬¿ÉÒÔͨ¹ý´´½¨»òÕßÔËÐоµÏñµÄ·½Ê½À´Æô¶¯ÈÝÆ÷£¬¿ÉÒÔ±»stop£¬Ò²¿ÉÒÔͨ¹ýrmÀ´ÒƳýËü¡£

¾µÏñ

¾µÏñÊÇÒ»ÖÖÎļþ½á¹¹£¬°üº¬ÈçºÎÔËÐÐÈÝÆ÷µÄÔªÊý¾Ý¡£DockerfileÖеÄÿÌõÃüÁî¶¼»áÔÚÎļþϵͳÖд´½¨Ò»¸öеIJã´Î½á¹¹£¬ÎļþϵͳÔÚÕâЩ²ã´ÎÉϹ¹½¨ÆðÀ´£¬¾µÏñ¾Í¹¹½¨ÓÚÕâЩÁªºÏµÄÎļþϵͳ֮ÉÏ¡£

µ±ÈÝÆ÷Æô¶¯ºó£¬ËùÓоµÏñ¶¼»áͳһºÏ²¢µ½Ò»¸ö½ø³ÌÖС£ ÁªºÏÎļþϵͳÖеÄÎļþ±»É¾³ýʱ£¬ ËüÃÇÖ»ÊDZ»±ê¼ÇΪÒÑɾ³ý£¬µ«Êµ¼ÊÉÏÈÔÈ»´æÔÚ¡£

# Commands for interacting with images
$ docker images # ²é¿´ËùÓоµÏñ.
$ docker import # ´Ótarball´´½¨¾µÏñ
$ docker build # ͨ¹ýDockerfile´´½¨¾µÏñ
$ docker commit # ´ÓÈÝÆ÷Öд´½¨¾µÏñ
$ docker rmi # ɾ³ý¾µÏñ
$ docker history # Áгö¾µÏñµÄ±ä¸üÀúÊ·

¾µÏñ´óС

ÕâÊÇһЩ¾­³£Ê¹ÓõľµÏñÏà¹ØµÄÊý¾Ý£º

scratch - »ù´¡¾µÏñ£¬ 0¸öÎļþ£¬´óСΪ0

busybox - ×îСUnixϵͳ£¬2.5MB£¬10000¸öÎļþ

debian:jessie - Debian×îа棬 122MB£¬ 18000 ¸öÎļþ

ubuntu:14.04 - 188MB£¬23000 ¸öÎļþ

´´½¨¾µÏñ

¿ÉÒÔͨ¹ýdocker commit container-id¡¢docker import url-to-tar»òÕßdocker build -f Dockerfile .À´´´½¨¾µÏñ¡£
ÏÈ¿´commitµÄ·½Ê½£º

# ͨ¹ýcommitµÄ·½Ê½À´´´½¨¾µÏñ
$ docker run -i -t debian:jessie bash
root@e6c7d21960:/# apt-get update
root@e6c7d21960:/# apt-get install postgresql
root@e6c7d21960:/# apt-get install node
root@e6c7d21960:/# node --version
root@e6c7d21960:/# curl https://iojs.org/dist/v1.2.0/iojs-v1.2.0-
linux-x64.tar.gz -o iojs.tgz
root@e6c7d21960:/# tar xzf iojs.tgz
root@e6c7d21960:/# ls
root@e6c7d21960:/# cd iojs-v1.2.0-linux-x64/
root@e6c7d21960:/# ls
root@e6c7d21960:/# cp -r * /usr/local/
root@e6c7d21960:/# iojs --version
1.2.0
root@e6c7d21960:/# exit
$ docker ps -l -q
e6c7d21960
$ docker commit e6c7d21960 postgres-iojs
daeb0b76283eac2e0c7f7504bdde2d49c721a1b03a50f750ea9982464cfccb1e

´ÓÉÏÃæ¿ÉÒÔ¿´³ö£¬ÎÒÃÇ¿ÉÒÔͨ¹ýdocker commitÀ´´´½¨¾µÏñ£¬µ«ÊÇÕâÖÖ·½Ê½ÓеãÁèÂÒ¶øÇÒºÜÄѸ´ÖÆ£¬ ¸üºÃµÄ·½Ê½ÊÇͨ¹ýDockerfileÀ´¹¹½¨¾µÏñ£¬ÒòΪËü²½ÖèÇåÎú²¢ÇÒÈÝÒ׸´ÖÆ£º

FROM debian:jessie
# Dockerfile for postgres-iojs

RUN apt-get update
RUN apt-get install postgresql
RUN curl https://iojs.org/dist/iojs-v1.2.0.tgz -o iojs.tgz
RUN tar xzf iojs.tgz
RUN cp -r iojs-v1.2.0-linux-x64/* /usr/local

È»ºóÓÃÏÂÃæµÄÃüÁîÀ´¹¹½¨£º

$ docker build -tag postgres-iojs .

DockerfileÖеÄÿһ¸öÃüÁî¶¼´´½¨ÁËаæµÄlayer£¬Í¨³£°ÑÀàËÆµÄÃüÁî·ÅÔÚÒ»Æð£¬Í¨¹ý&&ºÍÐøÐзûºÅ°ÑÃüÁî×éºÏÆðÀ´£º

FROM debian:jessie
# Dockerfile for postgres-iojs

RUN apt-get update && \
apt-get install postgresql && \
curl https://iojs.org/dist/iojs-v1.2.0.tgz -o iojs.tgz && \
tar xzf iojs.tgz && \
cp -r iojs-v1.2.0-linux-x64/* /usr/local

ÕâЩÐÐÖÐÃüÁîµÄ˳ÐòºÜÖØÒª£¬ÒòΪDockerΪÁ˼ÓËÙ¾µÏñµÄ¹¹½¨£¬»á»º´æÖмäµÄ¾µÏñ¡£ ×éÖ¯DockerfileµÄ˳Ðòʱ£¬×¢Òâ°Ñ¾­³£±ä»¯µÄÐзÅÔÚÎļþµÄµ×²¿£¬µ±»º´æÖÐÏà¹ØµÄÎļþ¸Ä±äʱ£¬¾µÏñ»áÖØÐÂÔËÐУ¬¼´Ê¹DockerfileÖеÄÐÐûÓз¢Éú±ä»¯Ò²ÊÇÈç´Ë¡£

Dockerfile ÖеÄÃüÁî

Dockerfile Ö§³Ö13¸öÃüÁ ÆäÖÐһЩÃüÁîÓÃÓÚ¹¹½¨¾µÏñ£¬ÁíÍâһЩÓÃÓÚ´Ó¾µÏñÖÐÔËÐÐÈÝÆ÷£¬ÕâÊÇÒ»¸ö¹ØÓÚÃüÁîʲôʱºò±»Óõ½µÄ±í¸ñ:

BUILD ÃüÁ

FROM - оµÏñÊÇ»ùÓÚÄĸö¾µÏñµÄ

MAINTAINER - ¾µÏñά»¤ÕßµÄÐÕÃûºÍÓÊÏ䵨ַ

COPY - ¿½±´ÎļþºÍĿ¼µ½¾µÏñÖÐ

ADD - ͬCOPYÒ»Ñù£¬µ«»á×Ô¶¯´¦ÀíURLºÍ½âѹtarballѹËõ°ü

RUN - ÔÚÈÝÆ÷ÖÐÔËÐÐÒ»¸öÃüÁ ±ÈÈ磺apt-get install

ONBUILD - µ±¹¹½¨Ò»¸ö±»¼Ì³ÐµÄDockerfileʱÔËÐÐÃüÁî

.dockerignore - ²»ÊÇÒ»¸öÃüÁ µ«ËüÄÜ¿ØÖÆÊ²Ã´Îļþ±»¼ÓÈëµ½¹¹½¨µÄÉÏÏÂÎÄÖУ¬¹¹½¨¾µÏñʱӦ¸Ã°üº¬.gitÒÔ¼°ÆäËüµÄ²»ÐèÒªµÄÎļþ¡£

RUN ÃüÁ

CMD - ÔËÐÐÈÝÆ÷ʱµÄĬÈÏÃüÁ¿ÉÒÔ±»ÃüÁîÐвÎÊý¸²¸Ç

ENV - ÉèÖÃÈÝÆ÷ÄڵĻ·¾³±äÁ¿

EXPOSE - ´ÓÈÝÆ÷Öб©Â¶³ö¶Ë¿Ú£¬ ±ØÐëÏÔʽµÄͨ¹ýÔÚÖ÷»úÉϵÄRUNÃüÁî´øÉÏ-p»òÕß-PÀ´±©Â¶¶Ë¿Ú

VOLUME - Ö¸¶¨Ò»¸öÔÚÎļþϵͳ֮ºóµÄ´æ´¢Ä¿Â¼¡£Èç¹û²»ÊÇͨ¹ýdocker run -vÉèÖõģ¬ ÄÇô½«±»´´½¨Îª/var/lib/docker/volumes

ENTRYPOINT - Ö¸¶¨Ò»¸öÃüÁî²»»á±»docker run image cmdÃüÁ¸Ç¡£³£ÓÃÓÚÌṩһ¸öĬÈϵĿÉÖ´ÐгÌÐò²¢Ê¹ÓÃÃüÁî×÷Ϊ²ÎÊý¡£

BUILD, RUNÃüÁî¶¼ÓеÄÃüÁî:

USER - ΪRUN¡¢CMD¡¢ENTRYPOINTÃüÁîÉèÖÃÓû§

WORKDIR - ΪRUN¡¢CMD¡¢ENTRYPOINT¡¢ADD¡¢COPYÃüÁîÉèÖù¤×÷Ŀ¼

ÔËÐеÄÈÝÆ÷

ÈÝÆ÷Æô¶¯ºó£¬½ø³ÌÔÚËü¿ÉÒÔÔËÐеÄÁªºÏÎļþϵͳÖлñµÃÁËеĿÉд²ã¡£

´Ó1.5°æ±¾Æð£¬Ëü»¹¿ÉÒÔÈÃ×î¶¥²ãµÄlayerÉèÖÃΪֻ¶Á£¬Ç¿ÖÆÎÒÃÇΪËùÓÐÎļþÊä³ö£¨ÈçÈÕÖ¾¡¢ÁÙʱÎļþ£©Ê¹ÓÃ¾í¡£

# ÓÃÓÚÓëÈÝÆ÷½»»¥µÄÃüÁî
$ docker create # ´´½¨Ò»¸öÈÝÆ÷£¬µ«²»Æô¶¯Ëü
$ docker run # ´´½¨²¢Æô¶¯Ò»¸öÈÝÆ÷
$ docker stop # Í£Ö¹ÈÝÆ÷
$ docker start # Æô¶¯ÈÝÆ÷
$ docker restart # ÖØÆôÈÝÆ÷
$ docker rm # ɾ³ýÈÝÆ÷
$ docker kill # ¸øÈÝÆ÷·¢ËÍkillÐźÅ
$ docker attach # Á¬½Óµ½ÕýÔÚÔËÐеÄÈÝÆ÷ÖÐ
$ docker wait # ×èÈûÖ±µ½ÈÝÆ÷ֹͣΪֹ
$ docker exec # ÔÚÔËÐеÄÈÝÆ÷ÖÐÖ´ÐÐÒ»ÌõÃüÁî

docker run

ÈçÉÏËùÊö£¬ docker runÊÇÓû§Æô¶¯ÐÂÈÝÆ÷µÄÃüÁ ÕâÀïÊÇһЩͨÓõÄÔËÐÐÈÝÆ÷µÄ·½·¨£º

# ½»»¥Ê½ÔËÐÐÈÝÆ÷
$ docker run -it --rm ubuntu

ÕâÊÇÒ»¸ö¿ÉÒÔÈÃÄãÏñÆÕͨµÄÖն˳ÌÐòÒ»Ñù½»»¥Ê½µÄÔËÐÐÈÝÆ÷µÄ·½·¨£¬ Èç¹ûÄãÏë°Ñ¹ÜµÀÊä³öµ½ÈÝÆ÷ÖУ¬¿ÉÒÔʹÓÃ-tÑ¡Ïî¡£

--interactive (-i) - ½«±ê×¼ÊäÈë·¢Ë͸ø½ø³Ì

-tty (-t) - ¸æËß½ø³ÌÓÐÖÕ¶ËÁ¬½Ó¡£ Õâ¸ö¹¦ÄÜ»áÓ°Ïì³ÌÐòµÄÊä³öºÍËüÈçºÎ´¦ÀíCtrx-CµÈÐźš£

--rm - Í˳öʱɾ³ý¾µÏñ¡£

# ºǫ́ÔËÐÐÈÝÆ÷
$ docker run -d hadoop

docker run -env

# ÔËÐÐÒ»¸öÃüÃûÈÝÆ÷²¢¸øËü´«Ò»Ð©»·¾³±äÁ¿
$ docker run \
--name mydb \
--env MYSQL_USER=db-user \
-e MYSQL_PASSWORD=secret \
--env-file ./mysql.env \
mysql

--name - ¸øÈÝÆ÷ÃüÃû£¬ ·ñÔòËüÊÇÒ»¸öËæ»úÈÝÆ÷

--env £¨-e£©- ÉèÖÃÈÝÆ÷ÖеĻ·¾³±äÁ¿

--env-file - ´Óenv-fileÖÐÒýÈëËùÓл·¾³±äÁ¿£¨Í¬LinuxϵÄsource env-file ¹¦ÄÜ£©

mysql - Ö¸¶¨¾µÏñÃûΪ mysql:lastest

docker run -publish

# ·¢²¼ÈÝÆ÷µÄ80¶Ë¿Úµ½Ö÷»úÉϵÄËæ»ú¶Ë¿Ú
$ docker run -p 80 nginx

# ·¢²¼ÈÝÆ÷¶Ë¿Ú80ºÍÖ÷»úÉϵÄ8080¶Ë¿Ú
$ docker run -p 8080:80 nginx

# ·¢²¼ÈÝÆ÷80¶Ë¿Úµ½Ö÷»ú127.0.0.0.1µÄ8080¶Ë¿Ú
$ docker run -p 127.0.0.1:8080:80 nginx

# ·¢²¼ËùÓÐÈÝÆ÷Öб©Â¶µÄ¶Ë¿Úµ½Ö÷»úµÄËæ»ú¶Ë¿ÚÉÏ
$ docker run -P nginx

nginx ¾µÏñ£¬±ÈÈ籩¶³ö80ºÍ443¶Ë¿Ú¡£

FROM debian:wheezy
MAINTAINER NGINX "docker-maint@nginx.com"

EXPOSE 80 443

docker run --link

# Æô¶¯postgresÈÝÆ÷£¬¸øËüÆðÃûΪmydb
$ docker run --name mydb postgres

# °Ñmydb Á´½Óµ½ myqpp µÄdb
$ docker run --link mydb:db myapp

Á¬½ÓÈÝÆ÷ÐèÒªÉèÖÃÈÝÆ÷µ½±»Á¬½ÓµÄÈÝÆ÷Ö®¼äµÄÍøÂ磬ÓÐÁ½¼þÊÂÒª×ö£º

ͨ¹ýÈÝÆ÷µÄÁ¬½ÓÃû£¬¸üР/etc/hosts ¡£ ÔÚÉÏÃæµÄÀý×ÓÖУ¬Á¬½ÓÃûÊÇdb£¬ ¿ÉÒÔ·½±ãµÄͨ¹ýÃû×ÖdbÀ´·ÃÎÊÈÝÆ÷¡£

Ϊ±©Â¶µÄ¶Ë¿ÚÉèÖû·¾³±äÁ¿¡£Õâ¸öºÃÏñûɶʵ¼ÊÓô¦£¬ÄãÒ²¿ÉÒÔͨ¹ý Ö÷»úÃû:¶Ë¿ÚµÄÐÎʽ·ÃÎʶÔÓ¦µÄ¶Ë¿Ú¡£

docker run limits

»¹¿ÉÒÔͨ¹ýrun limitsÀ´ÏÞÖÆÈÝÆ÷¿ÉÒÔʹÓõÄÖ÷»ú×ÊÔ´

# ÏÞÖÆÄÚ´æ´óС
$ docker run -m 256m yourapp

# ÏÞÖÆ½ø³Ì¿ÉÒÔʹÓõÄcpu·ÝÊý(cpu shares)(×ÜCPU·ÝÊýΪ1024)
$ docker run --cpu-shares 512 mypp

# ¸Ä±äÔËÐнø³ÌµÄÓû§Îªwww£¬¶ø²»ÊÇroot£¨³öÓÚ°²È«¿¼ÂÇ£©
$ docker run -u=www nginx

ÉèÖÃCPU·ÝÊýΪ1024ÖеÄ512·Ý²¢²»Òâζ×Å¿ÉÒÔʹÓÃÒ»°ëµÄCPU×ÊÔ´£¬ÕâÒâζ×ÅÔÚÒ»¸öÎÞÈκÎÏÞÖÆµÄÈÝÆ÷ÖУ¬Ëü×î¶à¿ÉÒÔʹÓÃÒ»°ëµÄ·ÝÊý¡£±ÈÈçÎÒÃÇÓÐÁ½¸öÓÐ1024·ÝµÄÈÝÆ÷£¬ºÍÒ»¸ö512·ÝµÄÈÝÆ÷(1024:1024:512) £¬ÄÇô512·ÝµÄÄǸöÈÝÆ÷£¬¾ÍÖ»Äܵõ½1/5µÄ×ÜCPU·ÝÊý

docker exec container

docker exec ÔÊÐíÎÒÃÇÔÚÒѾ­ÔËÐеÄÈÝÆ÷ÄÚ²¿Ö´ÐÐÃüÁÕâµãÔÚdebugµÄʱºòºÜÓÐÓá£

# ʹÓÃid 6f2c42c0ÔÚÈÝÆ÷ÄÚ²¿ÔËÐÐshell
$ docker exec -it 6f2c42c0 sh

¾í

¾íÌṩÈÝÆ÷ÍâµÄ³Ö¾Ã´æ´¢¡£ ÕâÒâζ×ÅÈç¹ûÄãÌá½»ÁËеľµÏñ£¬Êý¾Ý½«²»»á±»±£´æ¡£

# Start a new nginx container with /var/log as a volume
$ docker run -v /var/log nginx

Èç¹ûĿ¼²»´æÔÚ£¬Ôò»á±»×Ô¶¯´´½¨Îª£º/var/lib/docker/valumes/ec3c543bc..535

ʵ¼ÊµÄĿ¼Ãû¿ÉÒÔͨ¹ýÃüÁdocker inspect container-id ÕÒµ½¡£

# Æô¶¯ÐµÄnginxÈÝÆ÷£¬ÉèÖÃ/var/logΪ¾í£¬²¢Ó³Éäµ½Ö÷»úµÄ/tmpĿ¼ÏÂ
$ docker run -v /tmp:/var/log nginx

»¹¿ÉÒÔʹÓÃ--valumes-fromÑ¡Ïî´Ó±ðµÄÈÝÆ÷ÖйÒÔØ¾í¡£

# Æô¶¯ÈÝÆ÷db
$ docker run -v /var/lib/postgresql/data --name mydb postgres

# Æô¶¯backupÈÝÆ÷£¬´ÓmydbÈÝÆ÷ÖйÒÔØ¾í
$ docker run --volumes-from mydb backup

Docker Registry

Docker HubÊÇDockerµÄ¹Ù·½¾µÏñ²Ö¿â£¬Ö§³Ö˽ÓпâºÍ¹²Óп⣬²Ö¿â¿ÉÒÔ±»±ê¼ÇΪ¹Ù·½²Ö¿â£¬Òâζ×ÅËüÓɸÃÏîÄ¿µÄά»¤Õߣ¨»ò¸úËüÓйصÄÈË£©²ß»®¡£

Docker Hub »¹Ö§³Ö×Ô¶¯»¯¹¹½¨À´×ÔGithubºÍBitbucketµÄÏîÄ¿£¬Èç¹ûÆôÓÃ×Ô¶¯¹¹½¨¹¦ÄÜ£¬ÄÇôÿ´ÎÄãÌá½»´úÂëµ½´úÂë¿â¶¼»á×Ô¶¯¹¹½¨¾µÏñ¡£

¼´Ê¹Äã²»ÏëÓÃ×Ô¶¯¹¹½¨£¬Ä㻹ÊÇ¿ÉÒÔÖ±½Ódocker pushµ½Docker Hub£¬Docker pullÔò»áÀ­È¡¾µÏñÏÂÀ´¡£docker run Ò»¸ö±¾µØ²»´æÔڵľµÏñ£¬Ôò»á×Ô¶¯¿ªÊ¼docker pull²Ù×÷¡£

ÄãÒ²¿ÉÒÔÔÚÈÎÒâµØ·½ÍйܾµÏñ£¬¹Ù·½ÓÐRegistryµÄ¿ªÔ´ÏîÄ¿£¬µ«ÊÇ£¬»¹ÓкܶàBug¡£

´ËÍ⣬Quay¡¢TutumºÍGoogle »¹Ìṩ˽ÓоµÏñÍйܷþÎñ¡£

¼ì²éÈÝÆ÷

¼ì²éÈÝÆ÷µÄÃüÁîÓÐÒ»´ó°Ñ:

$ docker ps      # ÏÔʾÔËÐеÄÈÝÆ÷
$ docker inspect # ÏÔʾÈÝÆ÷ÐÅÏ¢£¨°üÀ¨ipµØÖ·£©
$ docker logs # »ñÈ¡ÈÝÆ÷ÖеÄÈÕÖ¾
$ docker events # »ñÈ¡ÈÝÆ÷ʼþ
$ docker port # ÏÔʾÈÝÆ÷µÄ¹«¿ª¶Ë¿Ú
$ docker top # ÏÔʾÈÝÆ÷ÖÐÔËÐеĽø³Ì
$ docker diff # ²é¿´ÈÝÆ÷ÎļþϵͳÖиıäµÄÎļþ
$ docker stats # ²é¿´¸÷ÖÖγ¶ÈÊý¾Ý¡¢ÄÚ´æ¡¢CPU¡¢ÎļþϵͳµÈ

ÏÂÃæÏêϸ½²Ò»ÏÂdocker ps ºÍdocker inspect£¬ÕâÁ½¸öÃüÁî×î³£ÓÃÁË¡£

# ÁгöËùÓÐÈÝÆ÷£¬°üÀ¨ÒÑÍ£Ö¹µÄ¡£
$ docker ps --all
CONTAINER ID IMAGE COMMAND NAMES
9923ad197b65 busybox:latest "sh" romantic_fermat
fe7f682cf546 debian:jessie "bash" silly_bartik
09c707e2ec07 scratch:latest "ls" suspicious_perlman
b15c5c553202 mongo:2.6.7 "/entrypo some-mongo
fbe1f24d7df8 busybox:latest "true" db_data


# Inspect the container named silly_bartik
# Output is shortened for brevity.
$ docker inspect silly_bartik
1 [{
2 "Args": [
3 "-c",
4 "/usr/local/bin/confd-watch.sh"
5 ],
6 "Config": {
10 "Hostname": "3c012df7bab9",
11 "Image": "andersjanmyr/nginx-confd:development",
12 },
13 "Id": "3c012df7bab977a194199f1",
14 "Image": "d3bd1f07cae1bd624e2e",
15 "NetworkSettings": {
16 "IPAddress": "",
18 "Ports": null
19 },
20 "Volumes": {},
22 }]

¼¼ÇÉ»¨ÕÐ

»ñÈ¡ÈÝÆ÷id¡£Ð´½Å±¾Ê±ºÜÓÐÓá£

# Get the id (-q) of the last (-l) run container
# »ñÈ¡×îºó(-l)Ò»¸öÆô¶¯µÄÈÝÆ÷id(-q)
$ docker ps -l -q
c8044ab1a3d0

docker inspect¿ÉÒÔ´ø¸ñʽ»¯µÄ×Ö·û´®----GoÓïÑÔÄ£°å×÷Ϊ²ÎÊý£¬ÏêϸÃèÊöËùÐèµÄÊý¾Ý¡£Ð´½Å±¾Ê±Í¬Ê±ÓÐÓá£

$ docker inspect -f '{{ .NetworkSettings.IPAddress }}' 6f2c42c05500
172.17.0.11

ʹÓÃdocker execÀ´¸úÔËÐÐÖеÄÈÝÆ÷½øÐн»»¥¡£

# »ñÈ¡ÈÝÆ÷»·¾³±äÁ¿
$ docker exec -it 6f2c42c05500 env

PATH=/usr/local/sbin:/usr...
HOSTNAME=6f2c42c05500
REDIS_1_PORT=tcp://172.17.0.9:6379
REDIS_1_PORT_6379_TCP=tcp://172.17.0.9:6379
...

ͨ¹ý¾íÀ´±ÜÃâÿ´ÎÔËÐÐʱ¶¼Öؽ¨¾µÏñ£¬ ÏÂÃæÊÇÒ»¸öDockerfile£¬Ã¿´Î¹¹½¨Ê±£¬»á¿½±´µ±Ç°Ä¿Â¼µ½ÈÝÆ÷ÖС£

1 FROM dockerfile/nodejs:latest
2
3 MAINTAINER Anders Janmyr "anders@janmyr.com"
4 RUN apt-get update && \
5 apt-get install zlib1g-dev && \
6 npm install -g pm2 && \
7 mkdir -p /srv/app
8
9 WORKDIR /srv/app
10 COPY . /srv/app
11
12 CMD pm2 start app.js -x -i 1 && pm2 logs
13

¹¹½¨²¢ÔËÐоµÏñ:

$ docker build -t myapp .
$ docker run -it --rm myapp

Ϊ±ÜÃâÖØ½¨£¬´´½¨Ò»´ÎÐÔ¾µÏñ²¢ÔÚÔËÐÐʱ¹ÒÔØ±¾µØÄ¿Â¼¡£

°²È«

´ó¼Ò¿ÉÄÜÌý˵¹ýʹÓÃDocker²»ÄÇô°²È«¡£Õâ²»ÊǼٻ°£¬µ«Õâ²»³ÉÎÊÌâ¡£

ĿǰDocker´æÔÚÒÔϰ²È«ÎÊÌ⣺

¾µÏñÇ©Ãûδ±»ÕýÈ·µÄºË×¼¡£

Èç¹ûÄãÔÚÈÝÆ÷ÖÐÓµÓÐrootȨÏÞ£¬ÄÇÄãDZÔÚµÄÓµÓжÔÕæ¸öÖ÷»úµÄrootȨÏÞ¡£

°²È«½â¾ö°ì·¨:

´ÓÄãµÄ˽ÓвֿâÖÐʹÓÃÊÜÐÅÈεľµÏñ

¾¡Á¿²»ÒªÒÔrootÔËÐÐÈÝÆ÷

°ÑÈÝÆ÷ÖеÄrootµ±×÷ÊÇÖ÷»úÉϵÄroot£¿ »¹ÊǰÑÈÝÆ÷µÄ¸ùĿ¼ÉèÖÃΪÈÝÆ÷ÄڵĸùĿ¼ £¿

Èç¹û·þÎñÆ÷ÉÏËùÓеÄÈÝÆ÷¶¼ÊÇÄãµÄ£¬ÄÇÄã²»ÐèÒªµ£ÐÄËûÃÇÖ®¼ä»áÓÐΣÏյĽ»»¥¡£

¡°Ñ¡Ôñ¡±ÈÝÆ÷

ÎÒ¸øÑ¡ÔñÁ½×Ö¼ÓÁËÒýºÅ£¬ ÒòΪĿǰ¸ù±¾Ã»ÓÐÈκαðµÄÑ¡Ôñ£¬ µ«ÊǺܶàÈÝÆ÷°®ºÃÕßÏëÍæÍæ£¬±ÈÈçUbuntuµÄLXD¡¢Î¢ÈíµÄDrawbridge£¬»¹ÓÐRocket¡£

RocketÓÉCoreOS¿ª·¢£¬CoreOSÊÇÒ»¸öºÜ´óµÄÈÝÆ÷ƽ̨¡£ ËûÃÇ¿ª·¢RocketµÄÀíÓÉÊǾõµÃDocker¹«Ë¾ÈÃDocker±äµÃÓ·Ö×£¬²¢ÇÒ»¹ºÍCoreOSÓÐÒµÎñ³åÍ»¡£

ËûÃÇÔÚÕâ¸öеÄÈÝÆ÷ÖУ¬³¢ÊÔÒÆ³ýÄÇЩÒòΪÀúÊ·Ô­Òò¶øÁôÏÂÀ´µÄDocker覴ᣲ¢Í¨¹ýsocket activationÌṩ¼òµ¥µÄÈÝÆ÷ºÍ³¹µ×µÄ°²È«¹¹½¨¡£

񅏏

µ±ÎÒÃǰÑÓ¦ÓóÌÐò²ð¿ªµ½¶à¸ö²»Í¬µÄÈÝÆ÷ÖÐʱ£¬»á²úÉúһЩеÄÎÊÌâ¡£ÔõôÈò»Í¬µÄ²¿·Ö½øÐÐͨÐÅÄØ£¿ ÕâЩÈÝÆ÷ÔÚµ¥¸öÖ÷»úÉÏÔõô°ì£¿ ¶à¸öÖ÷»úÉÏÓÖÊÇÔõô´¦Àí£¿

µ¥¸öÖ÷»úÉÏ£¬Dockerͨ¹ýÁ¬½ÓÀ´½â¾ö±àÅŵÄÎÊÌâ¡£

Ϊ¼ò»¯ÈÝÆ÷µÄÁ´½Ó²Ù×÷£¬DockerÌṩÁËÒ»¸ö½Ðdocker-composeµÄ¹¤¾ß¡££¨ÒÔǰËü½Ðfig, ÓÉÁíÒ»¼Ò¹«Ë¾¿ª·¢£¬È»ºó×î½üDockerÊÕ¹ºÁËËûÃÇ£©

docker-composeÔÚµ¥¸ödocker-compose.ymlÎļþÖÐÉùÃ÷¶à¸öÈÝÆ÷µÄÐÅÏ¢¡£À´¿´Ò»¸öÀý×Ó£¬¹ÜÀíwebºÍredisÁ½¸öÈÝÆ÷µÄÅäÖÃÎļþ£º

1 web:
2 build: .
3 command: python app.py
4 ports:
5 - "5000:5000"
6 volumes:
7 - .:/code
8 links:
9 - redis
10 redis:
11 image: redis

Æô¶¯ÉÏÊöÈÝÆ÷£¬¿ÉÒÔʹÓÃdocker-compose upÃüÁî

$ docker-compose up
Pulling image orchardup/redis...
Building web...
Starting figtest_redis_1...
Starting figtest_web_1...
redis_1 | [8] 02 Jan 18:43:35.576 # Server
started, Redis version 2.8.3
web_1 | * Running on http://0.0.0.0:5000/

Ò²¿ÉÒÔͨ¹ýdetachedģʽ£¨detached mode£©Æô¶¯£º docker-compose up -d£¬È»ºó¿ÉÒÔͨ¹ýdocker-compose ps²é¿´ÈÝÆ÷ÖÐÅÜÁËɶ¶«Î÷:

$ docker-compose up -d
Starting figtest_redis_1...
Starting figtest_web_1...
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------
figtest_redis_1 /usr/local/bin/run Up
figtest_web_1 /bin/sh -c python app.py Up 5000->5000

»¹¿ÉÒÔͬʱÈÃÃüÁîÔÚÒ»¸öÈÝÆ÷»òÕß¶à¸öÈÝÆ÷ÖÐͬʱ¹¤×÷¡£

# ´ÓwebÈÝÆ÷ÖлñÈ¡»·¾³±äÁ¿
$ docker-compose run web env

# À©Õ¹µ½¶à¸öÈÝÆ÷ÖÐ(Scale to multiple containers)
$ docker-compose scale web=3 redis=2

# ´ÓËùÓÐÈÝÆ÷Öзµ»ØÈÕÖ¾ÐÅÏ¢
$ docker-compose logs

´ÓÒÔÉÏÃüÁî¿ÉÒÔ¿´³ö£¬À©Õ¹ºÜÈÝÒ×£¬²»¹ýÓ¦ÓóÌÐò±ØÐëд³ÉÖ§³Ö´¦Àí¶à¸öÈÝÆ÷µÄ·½Ê½¡£ÔÚÈÝÆ÷Í⣬²»Ö§³Ö¸ºÔؾùºâ¡£

DockerÍйÜ

ºÜ¶à¹«Ë¾Ïë×öÔÚÔÆÖÐÍйÜDockerµÄÉúÒ⣬ÈçÏÂͼ¡£

ÕâЩÌṩÉ̳¢ÊÔ½â¾ö²»Í¬µÄÎÊÌ⣬ ´Ó¼òµ¥µÄÍйܵ½×ö"ÔÆ²Ù×÷ϵͳ"¡£ÆäÖÐÓÐÁ½¼Ò±È½ÏÓÐǰ¾°£º

CoreOS

ÈçÉÏͼËùʾ£¬CoreOSÊÇ¿ÉÒÔÔÚCoreOS¼¯ÈºÖÐÍйܶà¸öÈÝÆ÷µÄһϵÁзþÎñµÄ¼¯ºÏ£º

CoreOS Linux·¢ÐаæÊDzüôµÄLinux£¬ÔÚ³õ´ÎÆô¶¯Ê±Ê¹ÓÃ114MBµÄRAM£¬Ã»Óаü¹ÜÀíÆ÷£¬ ʹÓÃDocker»òÕßËü×Ô¼ºµÄRocketÔËÐÐÒ»ÇгÌÐò¡£

CoreOS ʹÓÃDocker£¨»òRocket£©ÔÚÖ÷»úÉϰ²×°Ó¦Óá£

ʹÓÃsystemd×÷Ϊinit·þÎñ£¬ËüµÄÐÔÄܳ¬¼¶ºÃ£¬»¹ÄܺܺõĴ¦ÀíÆô¶¯ÒÀÀµ¹ØÏµ£¬ Ç¿´óµÄÈÕ־ϵͳ£¬»¹Ö§³Ösocket-activation¡£

etcd ÊÇ·Ö²¼Ê½µÄ£¬Ò»ÖÂÐÔ K-V ´æ´¢ÓÃÓÚÅäÖù²ÏíºÍ·þÎñ·¢ÏÖ¡£

fleet£¬¼¯Èº¹ÜÀíÆ÷£¬ÊÇsystemdµÄÀ©Õ¹£¬ÄÜÓë¶ą̀»úÆ÷¹¤×÷£¬²ÉÓÃetcdÀ´¹ÜÀíÅäÖò¢ÔËÐÐÔÚÿһ¸ǫ̈CoreOS·þÎñÆ÷ÉÏ¡£

AWS

DockerÈÝÆ÷ÍйÜÔÚAmazonÓÐÁ½ÖÖ;¾¶£º
Elastic Beanstalk²¿ÊðDockerÈÝÆ÷£¬Ëü¹¤×÷µÄºÜºÃ£¬µ«¾ÍÊÇÌ«ÂýÁË£¬ Ò»´ÎȫеIJ¿ÊðÐèÒªºÃ¼¸·ÖÖÓ£¬¸Ð¾õ¸úÒ»°ãµÄÈÝÆ÷Ãë¼¶Æô¶¯²»´ó¶Ô¾¢¡£
ECS¡¢Elastic Container ServerÊÇAmazonÉÏÓÎÈÝÆ÷¼¯Èº½â¾ö·½°¸£¬ Ŀǰ»¹ÔÚÔ¤ÀÀ°æ3£¬¿´ÆðÀ´ºÜÓÐǰ;£¬¸úAmazonÆäËü·þÎñÒ»Ñù£¬Í¨¹ý¼òµ¥µÄweb serviceµ÷ÓÃÓëËü½»»¥¡£

×ܽá

Docker is here to stay

½â¾öÁËÒÀÀµÎÊÌâ

ÈÝÆ÷¸÷·½Ãæ¶¼ºÜ¿ì

Óм¯Èº½â¾ö·½°¸£¬µ«²»ÄÜÎÞ·ì¶Ô½Ó

   
3038 ´Îä¯ÀÀ       30
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ