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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÓÃDockerºÍVagrant¹¹½¨¼ò½à¸ßЧ¿ª·¢»·¾³
 
ÒëÕߣº³Â½Ü À´Ô´£º51CTO ·¢²¼ÓÚ 2015-04-03
  3366  次浏览      27
 

DockerºÍVagrant¾­³£±»ÈÏΪÊÇÁ½ÖÖÏà»¥Ìæ´úµÄ¹¤¾ß£¬ÆäʵËüÃÇ¿ÉÒÔ½áºÏʹÓ㬹¹½¨¸ôÀëµÄ¡¢¿ÉÖØ¸´µÄ¿ª·¢»·¾³¡£ÎÒÃǽ«Ö¤Ã÷¸Ã»·¾³¿ÉÒÔ¹¹½¨Ò»¸öDockerÈÝÆ÷ÒԱ㿪·¢JavaÓ¦ÓóÌÐò£¬²¢³ä·ÖÀûÓÃVagrantµÄÇ¿´ó¹¦ÄÜ£¬ÒÔ½â¾öһЩÏÖʵµ±ÖеÄʵ¼ÊÎÊÌâ¡£

ÕâÆª²©¿ÍµÄµÚÒ»²¿·Ö̽ÌÖÁË¿ª·¢»·¾³µÄ³£¼ûȱÏÝ¡¢¼òµ¥Docker»·¾³µÄ¹¹½¨ÒÔ¼°Vagrant+DockerÅäÖþßÓеÄÓŵ㡣µ«ÊÇÈç¹ûÄãÏë¾Í¿ªÊ¼Ê¹ÓÃDockerºÍVagrant£¬²»·ÁÖ±½ÓÌøµ½±¾ÎĵÄÕâ¸öÕ½ڣºÊ¹ÓÃVagrant£¬ÈÃDockerÈÝÆ÷Ò×ÓÚÒÆÖ²¡£

¿ª·¢»·¾³ÓÐʲôÎÊÌâ?

Òª»¨ºÜ³¤µÄʱ¼äÀ´¹¹½¨

еĿª·¢ÈËÔ±Òª»¨¶à³¤Ê±¼ä²ÅÄܹ¹½¨ºÃµ±Ç°ÏîÄ¿µÄ¿ª·¢»·¾³?´ð°¸È¡¾öÓÚÖî¶àÒòËØ(ÏîĿʱ¼ä¡¢´ÓʸÃÏîÄ¿µÄ¿ª·¢ÈËÔ±ÊýÁ¿µÈ)£¬µ«ÖÁÉÙÐèÒª°ëÌìʱ¼ä²¢²»º±¼û¡£

ºÙ!ÆäʵӦ¸Ã±ÈÕâ¿ìµÃ¶à£º²é¿´½Å±¾£¬Ö´Ðнű¾¡£¾ÍÊÇÕâÑù¡£ÕâÁ½¸ö²½ÖèÓ¦¸Ã×ãÒÔ¹¹½¨ÄãµÄ»·¾³£¬²¢×¼±¸ËæÊ±¿ª·¢¡£

Ëü¿ÉÄÜÓë²âÊÔ»·¾³ºÍÉú²ú»·¾³´ó²»Ò»Ñù

ÄãÓÐûÓÐÒò¹¹½¨µÄ»·¾³ÔÚ»úÆ÷ÉÏδͨ¹ý¶øÌø¹ý×Ô¶¯»¯²âÊÔ?»òÕ߸üÔã¸âµÄÊÇ£¬¼´Ê¹¸ü¸ÄµÄÄÚÈÝÔÚ»úÆ÷ÉÏ˳Àû±àÒ룬µ«ÊÇÔÚ³ÖÐøÕûºÏ(CI)·þÎñÆ÷ÉÏÀÏÊÇʧ°Ü£¬ÄãÓÐûÓвé¹ýÎÊÌâµÄ¸ùÔ´³öÔÚÄÄÀï?

ÈκÎÉÔÓв»Í¬£¬¾Í»áµ¼ÖÂÒâÁϲ»µ½µÄÐÐΪ¡£Óеķ½·¨¿ÉÄܼܺòµ¥£¬±ÈÈçÊÔÒ»ÊÔ¿ò¼ÜµÄÉÏÒ»¸ö°æ±¾£¬»òÕ߸ÄÓò»Í¬µÄÏîÄ¿¡£

²éÃ÷ʲôµ¼ÖÂÄãµÄϵͳ³öÏÖ²»Í¬ÐÐΪÊÇÿ¸ö¿ª·¢ÈËÔ±¶¼Ó¦¸Ã±ÜÃâµÄ·³ÈËÈÎÎñ¡£

ÐéÄâ»úºÍDocker

Òò¶ø£¬¿ª·¢»·¾³Ó¦¸Ã¾ßÓÐÁ½¸öÌØµã£º

¸ôÀ룺Ä㲻ϣÍûÔÚ²âÊÔij¸öй¤¾ß»ò²»Í¬ÏîĿʱŪµÃÒ»ÍÅÔã¡£

¿ÉÖØ¸´£ºÍ¬Ò»¸ö»·¾³Ó¦¸ÃÔÚÿ¸öÍŶӳÉÔ±µÄ»úÆ÷¡¢³ÖÐøÕûºÏ·þÎñÆ÷ºÍÉú²ú·þÎñÆ÷É϶¼Ò»Ôٿɸ´ÖÆ¡£

ÐéÄâ»ú»·¾³È·±£ÁËÕâÐ©ÌØÐÔ£¬¿ÉÊǵäÐ͵ÄÐéÄâ»úºÜºÄ·Ñ×ÊÔ´¡£¿ª·¢ÈËÔ±ÐèҪÿ¸ô¼¸·ÖÖÓ±àÂë/¹¹½¨/²âÊÔ£¬²»»á½ÓÊÜÐéÄ⻯´øÀ´µÄ¿ªÏú¡£

Õâʱºò£¬DockerÏԵôóÓаïÖú¡£Ïà±ÈµäÐ͵ÄÐéÄâ»ú£¬ÆäÇáÐÍÈÝÆ÷¼«Æä¿ìËÙ£¬¶øÇÒÔÚ¿ª·¢ÈËÔ±µ±Öм«ÊÜ»¶Ó­¡£ÏÂÃæÊÇÀ´×ÔDocker²©¿ÍµÄÒ»¶ÎÕªÒª£¬½âÊÍÁËÕâÖֳɹ¦µÄÔ­Òò£º

ÔÚÎÊÊÀºóµÄÍ·12¸öÔÂÄÚ£¬DockerÔÚ³õ´´ÆóÒµºÍÔçÆÚ²ÉÓÃÕßµ±ÖÐѸËÙÁ÷ÐÐÆðÀ´£¬ËûÃÇÖØÊÓ¸ÃÆ½Ì¨µÄÕâÒ»¹¦ÄÜ£¬¼´¿ÉÒÔ½«Ó¦ÓóÌÐò¿ª·¢¹ÜÀíµÄÎÊÌâÓë»ù´¡ÉèÊ©Ìá ¹©¡¢ÅäÖúÍÔËÓªµÄÎÊÌâ·ÖÀ뿪À´¡£DockerΪÕâЩÔçÆÚÓû§ÌṩÁËÒ»ÖÖÐÂÓ±µÄ¡¢¸üѸËٵķ½·¨£¬¿ÉÒÔ¹¹½¨·Ö²¼Ê½Ó¦ÓóÌÐò£¬ÁíÍâÌṩÁËÒ»ÖÖ¡°±àдһ´Îµ½´¦ÔË ÐС±µÄ²¿ÊðÑ¡Ôñ£¬²¿Êð¶ÔÏó´Ó±Ê¼Ç±¾µçÄÔ¡¢Âã»ú¡¢ÐéÄâ»úµ½Ë½ÓÐÔÆ/¹«ÓÐÔÆ£¬²»Ò»¶ø×ã¡£

ʹÓÃDockerÀ´ÅäÖõġ¢¿ÉÖØ¸´µÄ¿ª·¢»·¾³

ΪÁ˾ÙÀý˵Ã÷£¬ÎÒÃǽ«¹¹½¨Ò»¸ö¹¹½¨²¢²âÊÔVert.x HTTP·þÎñÆ÷µÄDockerÈÝÆ÷¡£

Vert.xÊÇÒ»ÖÖÇáÐÍÓ¦ÓóÌÐò¿ò¼Ü£¬¹ÄÀøÐ¡ÐÍ¡¢¶ÀÁ¢Î¢·þÎñµÄ¼Ü¹¹¡£Î¢·þÎñ¡°¾ÍÊÇÒ»ÖÖСÇɵĶÀÁ¢Ê½¿ÉÖ´ÐгÌÐò£¬¿ÉÓëÆäËûµÄ¶ÀÁ¢Ê½¿ÉÖ´ÐгÌÐò½øÐйµÍ¨¡±(Uncle Bob£¬http://blog.cleancoder.com/uncle-bob/2014/09/19/MicroServicesAndJars.html)¡£ÎÒÃÇÈÏΪ£¬ËüÔÚDockerÈÝÆ÷ÖÐÔÙºÏÊʲ»¹ýÁË£¬Õâ¾ÍÊÇΪʲôÎÒÃÇÔÚ´ËÑ¡ÔñËü×÷ΪÀý×Ó¡£

ÒªÊÇÄã֮ǰ»¹Ã»Óа²×°¹ýDocker£¬ÏȰ²×°Ëü¡£Äã¿ÉÒÔ²ÎÔĹٷ½Îĵµ(https://docs.docker.com/installation/)£¬»òÕßʹÓÃget docker script(https://get.docker.io)À´°²×°Ëü¡£ÎÒÃǼÙÉèÔÚ±¾Õ½ÚÖУ¬ÎÒÃÇÔÚLinuxÉÏÔËÐС£¼´Ê¹DockerÒ²¿ÉÒÔ°²×°µ½WindowsºÍMacÉÏ(½èÖúboot2docker)£¬ÎÒÃÇ»áÔÚÏÂÒ»ÕÂÖп´µ½ÈçºÎʹÓÃVagrantÀ´°²×°¡¢ÎªÊ²Ã´VagrantÊÇÒ»ÖÖ¸üºÃµÄÑ¡Ôñ¡£

DockerÎļþ(Dockerfile)

ΪÁËÃèÊöÈÝÆ÷£¬ÎÒÃÇÐèÒªÒ»¸öDockerÎļþ£º

FROM ubuntu:14.04

# °²×°¿ª·¢¹¤¾ß£ºjdkºÍgitµÈ

RUN apt-get update 
2.
3.RUN apt-get install -y openjdk-7-jdk git wget

# jdk7ÊÇĬÈÏJDK

RUN ln -fs /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /etc/alternatives/java 

# °²×°vertx

RUN \ 
2.
3.mkdir -p /usr/local/vertx && cd /usr/local/vertx && \
4.
5.wget http://dl.bintray.com/vertx/downloads/vert.x-2.1.2.tar.gz -qO - | tar -xz

# ½«vertxÌí¼Óµ½Â·¾¶

ENV PATH /usr/local/vertx/vert.x-2.1.2/bin:$PATH 
2.
3.RUN mkdir -p /usr/local/src
4.
5.WORKDIR /usr/local/src
6.
7.CMD ["bash"]

DockerÎļþȷʵ¼òµ¥Ö±¹Û£¬µ±ÄãÐèÒª¸üÉîÈëµØÍÚ¾òʱ£¬ÓÐÒ»·Ý³öÉ«µÄÔÚÏ߲ο¼ÊÖ²á(https://docs.docker.com/reference/builder/)¡£

FROM ubuntu:14.04¶¨ÒåÁËÎÒÃÇÒÀÀµµÄ»ù±¾Ó³Ïñ¡£Äã¿ÉÒÔÔÚdockerÖÐÐÄ(registry.hub.docker.co)ÕÒµ½Docker»ù±¾Ó³ÏñµÄÍêÕûÁÐ±í¡£¾ÍÕâ¸öÀý×Ó¶øÑÔ£¬ÎÒÃÇʹÓÃÁËdockerÍŶӹ¹½¨DockerËùÓõĻù±¾Ó³Ïñ¡£

ºóÃæ¼¸ÐÐÃèÊöÁ˽«Ó¦Óõ½»ù±¾Ó³ÏñÉϵĸ͝£º

ʹÓÃapt-get°²×°¿ª·¢¹¤¾ß£ºopenjdk¡¢git¡¢wget

ÏÂÔØºÍ°²×°vertx

½«vertx¶þ½øÖÆÎļþ¼ÐÌí¼Óµ½Â·¾¶

´´½¨Îļþ¼Ð/usr/local/src£¬²¢ÈÃËü³ÉΪĬÈϵŤ×÷Ŀ¼

Ò»µ©ÎÒÃÇ¿½±´ÁËDockerÎļþ£¬¾Í¿ÉÒÔ¹¹½¨DockerÓ³Ïñ£º

$ sudo docker build -t=vertxdev . 

»ñµÃÔ´´úÂë

ÎÒÃǸչ¹½¨µÄÓ³ÏñÒѰ²×°ÁËgit¡£ÎÒÃÇ¿ÉÒÔÓÃËü´ÓGithub»ñȡԴ´úÂ룺

$ sudo docker run -t --rm -v /src/vertx/:/usr/local/src vertxdev git clone https://github.com/vert-x/vertx-examples.git 

Çë×¢Ò⣺gitÔÚÈÝÆ÷ÀïÃæÔËÐУ¬Ô´´úÂëÒò¶øÔÚÈÝÆ÷ÀïÃæ´«ËÍ(È·ÇеÄλÖÃÊÇÔÚÎļþ¼Ð/usr/local/src)¡£ÎªÁËÈôúÂë¾ßÓгÖÐøÐÔ£¬¼´Ê¹ÔÚÈÝÆ÷Í£Ö¹ºÍɾ³ýÖ®ºó£¬ÎÒÃÇÒ²¿ÉÒÔʹÓñêÖ¾-v /src/vertx/:/usr/local/src£¬½«ÈÝÆ÷µÄÎļþ¼Ð/usr/local/src°ó¶¨¹ÒÔØµ½Ö÷»úÎļþ¼Ð/src/vertx¡£Ò»µ©git cloneÃüÁîÍê³ÉÁËÖ´ÐУ¬--rm¡±¾ÍÏú»ÙÈÝÆ÷¡£

¹¹½¨²¢ÔËÐÐÓ¦ÓóÌÐò

ÓÉÓÚÔ´´úÂëÒÑ»ñÈ¡£¬ÎÒÃǽ«Æô¶¯ÐµÄÈÝÆ÷£¬Õâ¸öÈÝÆ÷¸ºÔð¹¹½¨²¢ÔËÐÐvertxʾÀý£ºHelloWorldServer¡£Òª×¢Ò⣺vertx runͬʱ¸ºÔðvertxÓ¦ÓóÌÐòµÄ¹¹½¨ºÍÖ´ÐС£

$ sudo docker run -d -v /src/vertx/:/usr/local/src -p 8080:8080 vertxdev 
vertx run vertx-examples/src/raw/java/httphelloworld/HelloWorldServer.java 

Óëǰһ¸öÈÝÆ÷Ïà·´£¬Õâ¸öÈÝÆ÷ÔÚÍ£Ö¹ºó²»»á±»Ïú»Ù£¬±©Â¶¶Ë¿Ú8080(-p 8080:8080)£¬ÔÚºǫ́ÔËÐÐ(-d)¡£ÈôÏë¿´Ò»¿´vertx runµÄÊä³ö½á¹û£º

$ sudo docker logs 
2.
3.Succeeded in deploying verticle

²»·ÁʹÓÃcurl£¬´ÓÖ÷»ú¶Ë²âÊÔÓ¦ÓóÌÐò£º

$ curl localhost:8080 
2.
3.Hello World

Õâ¸ö¼òµ¥Àý×ÓÓ¦¸Ã×ãÒÔÌåÏÖ³öÔËÐÐDockerÈÝÆ÷Óжà¿ìËÙ¡£ÔÚDockerÈÝÆ÷ÀïÃæÔËÐÐgit cloneºÍvertx runµÄ¿ªÏú¿ÉºöÂÔ²»¼Æ¡£

µ«¹¹½¨µÄÕâ¸ö»·¾³ºÜ»ù±¾¡£ÔÚÏÖʵ»·¾³ÖУ¬´¿DockerÅäÖôæÔÚһЩ²»×㣬¶øVagrant¾ÍÓÐÖúÓÚ¿Ë·þÕâЩ²»×ã¡£

Docker + Vagrant

Docker(ÆäʵÊÇ×÷ΪDockerÄ£¿éµÄlibcontainer)ÈÔÐèÒªLinuxÄÚºË3.8»ò¸ü¸ß°æ±¾ºÍx86_64¼Ü¹¹¡£ÕâÔÚ´ó´óÏÞ¶¨ÁËDockerÄܹ»Ô­ÉúÔËÐÐÔÚÆäÖеĻ·¾³¡£

VagrantÊÇÒ»ÖÖ¿ªÔ´Èí¼þ£¬ËüΪ¿çÖÚ¶à²Ù×÷ϵͳ¹¹½¨¿ÉÖØ¸´µÄ¿ª·¢»·¾³ÌṩÁËÒ»ÖÖ·½·¨¡£VagrantʹÓÃÌṩÕß(provider)À´Æô¶¯¸ôÀëµÄÐéÄâ»·¾³¡£Ä¬ÈϵÄÌṩÕßÊÇVirtualbox;×Ôv1.6ÒÔÀ´£¬»ùÓÚdockerµÄ¿ª·¢»·¾³Ò²µÃµ½Ö§³Ö¡£Ïà±È°ïÖúDockerÔÚ·ÇLinuxƽ̨ÉÏÔËÐÐµÄÆäËû¹¤¾ß(±ÈÈçboot2docker)£¬Vagrant¾ßÓÐÒ»Ð©ÖØ´óÓŵ㣺

ÅäÖÃÒ»´Î£¬¼´¿Éµ½´¦ÔËÐУºVagrant¾ÍÊÇÔ­ÉúÖ§³ÖDockerµÄϵͳÉϵÄDocker·â×°Æ÷£¬Í¬Ê±Ëü¿ÉÆô¶¯¡°Ö÷»úÐéÄâ»ú¡±£¬ÒÔ±ãÔÚ²»Ö§³ÖËüµÄϵͳÉÏÔËÐÐÈÝÆ÷¡£Óû§Ã»±ØÒª²ÙÐÄDockerÊDz»Êǵõ½Ô­ÉúÖ§³Ö£ºÍ¬Ò»¸öÅäÖÿÉÊÊÓÃÓÚÿһ¸ö²Ù×÷ϵͳ¡£

DockerÖ÷»ú²¢²»¾ÖÏÞÓÚboot2docker(Tiny Core LinuxµÄVirtualboxÓ³Ïñ)£¬µ«Debian¡¢Ubuntu¡¢CoreOS¼°ÆäËûLinux·¢ÐаæÒ²µÃµ½Ö§³Ö¡£¶øÇÒ¿ÉÒÔÔÚ±ÈVirtualbox¸üÎȶ¨µÄÐéÄâ»ú¹ÜÀíÆ÷(±ÈÈçVMware)ÉÏÔËÐС£

Vagrant¿ÉÒÔ±àÅÅDockerÈÝÆ÷£ºÍ¬Ê±ÔËÐжà¸öÈÝÆ÷£¬²¢ÇÒ°ÑËüÃÇÁªÏµÆðÀ´¡£

ÔÚLinux¼°ÆäËû²Ù×÷ϵͳÉÏʹÓÃVagrantÔËÐÐDocker

ÔÚÏÂÃæÈý¸öÕ½ÚÖУ¬ÎÒÃǽ«Ì½ÌÖÕâÿһ¸öÒªµã¡£

ʹÓÃvagrant£¬ÈÃDockerÈÝÆ÷Ò×ÓÚÒÆÖ²

Vagrant¿ÉÖ§³ÖDocker£¬¼È×÷ΪÌṩÕߣ¬ÓÖ×÷ΪÅäÖÃÕß¡£µ«ÊÇΪÁËÈÃËü¿ÉÒÔÔÚWindowsºÍMacÉÏ×Ô¶¯´´½¨DockerÖ÷»úÐéÄâ»ú£¬Ó¦¸Ã½«ËüÓÃ×÷ÌṩÕß¡£

ÎÒÃǽ«Öظ´Ê¹ÓÃÎÒÃÇÔÚÉÏÃæ¼ûµ½µÄͬһ¸öDockerÎļþ¡£ÓëÉÏÃæÒ»Ñù£¬ÎÒÃǽ«ÔËÐÐÁ½¸öDockerÈÝÆ÷£¬ÒÔ±ãÖ´ÐÐgit cloneºÍvertx run¡£²»¹ý½«¸Ä¶øÊ¹ÓÃVagrantÃüÁ¶ø²»ÊÇDockerÃüÁî¡£

°²×°Vagrant(https://www.vagrantup.com/downloads)ºÍVirtualbox(https://www.virtualbox.org/wiki/Downloads)£¬ÒÔ±ãÄܹ»ÔËÐÐʾÀý¡£

Vagrantfile

VagrantfileÃèÊöÁËVagrantÉ豸¡£ÎÒÃǽ«Ê¹ÓÃÏÂÁÐÄÚÈÝ£º

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker' 
2.
3.Vagrant.configure("2") do |config|
4.
5.config.vm.define "vertxdev" do |a|
6.
7.a.vm.provider "docker" do |d|
8.
9.d.build_dir = "."
10.
11.d.build_args = ["-t=vertxdev"]
12.
13.d.ports = ["8080:8080"]
14.
15.d.name = "vertxdev"
16.
17.d.remains_running = true
18.
19.d.cmd = ["vertx", "run", "vertx-examples/src/raw/java/httphelloworld/HelloWorldServer.java"]
20.
21.d.volumes = ["/src/vertx/:/usr/local/src"]
22.
23.end
24.
25.end
26.
27.end

ENV'VAGRANT_DEFAULT_PROVIDER' = 'docker' ÈÃÎÒÃDz»±ØÔÚÿ¸öVagrantÃüÁîÖÐÖ¸¶¨ÌṩÕßÊÇDocker(ĬÈÏÌṩÕßÊÇVirtualbox)¡£¸ÃÎļþµÄÆäÓಿ·ÖÓµÓÐVagrant¹¹½¨DockerÓ³ÏñºÍÔËÐÐÈÝÆ÷ËùÓõÄÑ¡Ïî¡£ÏëÁ˽â¸ü¶àÐÅÏ¢£¬Çë²ÎÔÄVagrantfilehttps://docs.vagrantup.com/v2/vagra...(https://docs.vagrantup.com/v2/vagrantfile/index.html)ºÍDockerÌṩÕß(https://docs.vagrantup.com/v2/docker/configuration.html)˵Ã÷Îĵµ¡£

»ñµÃÔ´´úÂë

Ò»µ©ÎÒÃǽ«Vagrantfile¿½±´µ½DockerfileÎļþ¼ÐÖУ¬ÎÒÃÇ¿ÉÒÔÔËÐÐgit clone£¬ÒÔ»ñȡԴ´úÂ룺

$ vagrant docker-run vertxdev -- git clone https://github.com/vert-x/vertx-examples.git 

Óë֮ǰһÑù£¬git cloneÍê³ÉÖ´Ðкó£¬ÈÝÆ÷½«±»Ïú»Ù¡£Çë×¢Ò⣺ÎÒÃÇ»¹Ã»Óй¹½¨Ó³Ïñ£¬Vagrant×Ô¶¯¹¹½¨ÁËÓ³Ïñ¡£¼õÉÙÁËÊÖ¶¯²½Öè¡£

¹¹½¨²¢ÔËÐÐÓ¦ÓóÌÐò

ÎÒÃÇÄܹ»¹¹½¨²¢ÔËÐÐHTTP Hello World·þÎñÆ÷£º

$ vagrant up 

Ôڵײ㣬Vagrant½«Ö´ÐÐdocker run£¬Æô¶¯ÈÝÆ÷µÄÃüÁîÓÉd.cmdÑ¡ÏîÖ¸¶¨¡£

Ïë»ñµÃvertx runÃüÁîµÄÊä³ö½á¹û£º

$ vagrant docker-logs 
2.
3.==> vertxdev: Succeeded in deploying verticle

²âÊÔ

ÔÚLinuxƽ̨ÉÏ£¬Ö»ÒªÔËÐУº

$ curl localhost:8080 
2.
3.Hello World

ÔÚWindowsºÍMacÉÏ£¬¶Ë¿Ú8080²¢²»´ÓDockerÖ÷»úÐéÄâ»ú±»×ª·¢µ½Ö÷vagrantÖ÷»ú(²»¹ýDockerÈÝÆ÷¶Ë¿Ú±»×ª·¢µ½DockerÖ÷»ú)¡£Òò¶ø£¬ÎÒÃÇÐèҪͨ¹ýssh½øÈëµ½DockerÖ÷»úÐéÄâ»ú£¬ÒÔ±ãÁ¬½ÓÖÁHTTP·þÎñÆ÷¡£²»·Á¼ìË÷VagrantĬÈÏDockerÖ÷»úµÄID£º

$ vagrant global-status 
2.
3.id name provider state directory
4.
5.----------------------
6.
7.c62a174 default virtualbox running /Users/mariolet/.vagrant.d/data/docker-host

Ò»µ©¼ìË÷µ½¸ÃÉ豸£¬ÎÒÃÇ¿ÉÒÔ²âÊÔHTTP·þÎñÆ÷ÁË£º

$ vagrant ssh c62a174 -c "curl localhost:8080" 
2.
3.Hello World

ÄãÓÐ˵¹ýһģһÑùÂð?ÈçºÎ¶¨ÖÆDockerÖ÷»ú?

ÔÚ²»Ö§³ÖÈÝÆ÷µÄƽ̨ÉÏ£¬Ä¬ÈÏÇé¿öÏ£¬VagrantÆô¶¯Ò»¸öTiny Core Linux(boot2docker)DockerÖ÷»ú¡£Èç¹ûÎÒÃǵijÖÐøÕûºÏ»·¾³¡¢ÊÔÔËÐл·¾³»òÉú²ú»·¾³²»ÔËÐÐboot2docker£¬ÎÒÃÇ»áÔÚÕâЩ»·¾³µÄÅäÖÃÖ®¼äÓÐÒ»¸öȱ¿Ú¡£Õâʵ¼ÊÉÏÊÇÉú²ú»·¾³È±ÏݵĸùÔ´£¬²»¿ÉÄÜÔÚ¿ª·¢»·¾³Öз¢ÏÖ¡£²»·ÁÊÔ׎â¾öÕâ¸öÎÊÌâ¡£

²»Í¬»·¾³ÉϵIJ»Í¬DockerÖ÷»ú£ºÊµ¼ÊÉÏÎ¥·´°²È«

ÈçÉÏËù¼û£¬VagrantµÄÖ÷Òª±ãÀûÖ®Ò»ÊÇ£¬ËüÈÃÎÒÃÇ¿ÉÒÔÖ¸¶¨×Ô¶¨ÒåµÄDockerÖ÷»ú¡£»»¾ä»°Ëµ£¬ÎÒÃDz¢²»±»boot2dockerºÍTiny Core LinuxËùÊø¸¿¡£

DockerÖ÷»úÐéÄâ»úVagrantfile

ÎÒÃǽ«Ê¹ÓÃÒ»¸öеÄVagrantfileÀ´¶¨ÒåDockerÖ÷»úÐéÄâ»ú¡£ÏÂÃæÕâ¸öÎļþ»ùÓÚUbuntu Server 14.04 LTS£º

Vagrant.configure("2") do |config| 
2.
3.config.vm.provision "docker"
4.
5.# ÏÂÃæÕâÒ»ÐÐÖÕ½áËùÓÐsshÁ¬½Ó£¬Òò´Ë
6.
7.# Vagrant½«±»ÆÈÖØÐÂÁ¬½Ó¡£
8.
9.# ÄÇÊÇÔÚPATHÖÐÓµÓÐdockerÃüÁîµÄÌæ´ú°ì·¨
10.
11.config.vm.provision "shell", inline:
12.
13."ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"
14.
15.config.vm.define "dockerhost"
16.
17.config.vm.box = "ubuntu/trusty64"
18.
19.config.vm.network "forwarded_port",
20.
21.guest: 8080, host: 8080
22.
23.config.vm.provider :virtualbox do |vb|
24.
25.vb.name = "dockerhost"
26.
27.end
28.
29.end

½«Ëü±£´æµ½Ô­Ê¼µÄVagrantfileÎļþ¼Ð£¬Ãû³ÆÎªDockerHostVagrantfile¡£

ÔÚ×Ô¶¨ÒåµÄDockerÖ÷»úÖÐÔËÐÐDockerÈÝÆ÷

ÏÂÒ»²½Ö¸¶¨Ê¹ÓÃÕâ¸öеÄÐéÄâ»ú×÷ΪDockerÖ÷»ú£¬¶ø²»ÊÇĬÈÏÖ÷»ú£¬Òò¶ø½«ÏÂÃæÐµÄÁ½ÐÐÌí¼Óµ½a.vm.provider´úÂë¶Î£º

config.vm.define "vertxdev" do |a| 
2.
3.a.vm.provider "docker" do |d|
4.
5.[...]
6.
7.d.vagrant_machine = "dockerhost"
8.
9.d.vagrant_vagrantfile = "./DockerHostVagrantfile"
10.
11.end
12.
13.end

Çë×¢Ò⣺ÅäÖÃ×Ô¶¨ÒåµÄDockerÖ÷»úÓÐÁíÒ»¸öºÃ´¦£ºÎÒÃÇÏÖÔÚ¿ÉÒÔÖ¸¶¨×Ô¶¨ÒåµÄת·¢¶Ë¿Ú£º

config.vm.network "forwarded_port", 
2.
3.guest: 8080, host: 8080

Òò¶ø£¬ÎÒÃÇÄܹ»´ÓÖ÷Ö÷»ú²Ù×÷ϵͳÀïÃæ·ÃÎÊvertx HTTP·þÎñÆ÷£º

²»Í¬»·¾³ÉÏͬÑùµÄDockerÖ÷»úºÍ¶Ë¿Úת·¢

µ±È»£¬Ö÷»úÐéÄâ»ú²¢²»¾ÖÏÞÓÚUbuntu¡£¿ÉÒÔÔÚVagrantÔÆ(https://vagrantcloud.com)ÉÏ·¢ÏÖ¸ü¶àµÄvagrantÉ豸¡£ÖµµÃ¹Ø×¢µÄÖ§³ÖDockerµÄÉ豸ÓÐboot2docker(ԭʼ°æºÍ¸ÄÁ¼°æ)ºÍCoresOS¡£

ʹÓÃVagrant±àÅÅDockerÈÝÆ÷

¾ÍÔÚ²»¾Ãǰ£¬ÎÒÃÇ»¹Ã¿´ÎÖ»ÄÜÔËÐÐÒ»¸öDockerÈÝÆ÷¡£È»¶øÔÚÏÖʵÉú»îÖУ¬ÎÒÃÇÈ´³£³£ÐèҪͬʱÔËÐжà¸öÈÝÆ÷£ºÊý¾Ý¿â¡¢http¡¢WebÈÝÆ÷µÈ¶¼ÔÚµ¥¶ÀµÄÈÝÆ÷ÖÐÔËÐС£

ÎÒÃÇÔÚ±¾Õ½ڽ«Ì½ÌÖʹÓÃVagrant¡°¶à»úÆ÷¡±»·¾³(https://docs.vagrantup.com/v2/multi-machine/)£¬Í¬Ê±Ö´Ðжà¸ödockerÈÝÆ÷¡£È»¶ø£¬ÎÒÃDz»»á¿¼ÂÇDockerÈÝÆ÷·Ö²¼ÔÚ²»Í¬µÄDockerÖ÷»úÕâÒ»³¡¾°£ºËùÓÐÈÝÆ÷¶¼ÔÚͬһ¸öÖ÷»úÀïÃæÔËÐС£

ÔËÐжà¸öÈÝÆ÷

¶à¸öÈÝÆ÷

×÷ΪµÚÒ»¸öÀý×Ó£¬ÎÒÃǽ«Ê¹ÓÃVert.x Event Bus Point to PointÕâ¸öÀý×Ó¡£ÎÒÃÇÀûÓÃÁËÔÚÎÄÕ¿ªÍ·¶¨ÒåµÄͬһ¸öDockerÎļþ£¬²¢ÇÒÔÚеÄVagrantfileÎļþÀïÃæÅäÖÃÁËÁ½¸öDockerÈÝÆ÷£º¡°vertxreceiver¡±ºÍ¡°vertxsender¡±£º

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker' 
2.
3.DOCKER_HOST_NAME = "dockerhost"
4.
5.DOCKER_HOST_VAGRANTFILE = "./DockerHostVagrantfile"
6.
7.Vagrant.configure("2") do |config|
8.
9.config.vm.define "vertxreceiver" do |a|
10.
11.a.vm.provider "docker" do |d|
12.
13.d.build_dir = "."
14.
15.d.build_args = ["-t=vertxreceiver"]
16.
17.d.name = "vertxreceiver"
18.
19.d.remains_running = true
20.
21.d.cmd = ["vertx", "run", "vertx-examples/src/raw/java/eventbus_pointtopoint/Receiver.java","-cluster"]
22.
23.d.volumes = ["/src/vertx/:/usr/local/src"]
24.
25.d.vagrant_machine = "#{DOCKER_HOST_NAME}"
26.
27.d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}"
28.
29.end
30.
31.end
32.
33.config.vm.define "vertxsender" do |a|
34.
35.a.vm.provider "docker" do |d|
36.
37.d.build_dir = "."
38.
39.d.build_args = ["-t=vertxsender"]
40.
41.d.name = "vertxsender"
42.
43.d.remains_running = true
44.
45.d.cmd = ["vertx", "run", "vertx-examples/src/raw/java/eventbus_pointtopoint/Sender.java","-cluster"]
46.
47.d.volumes = ["/src/vertx/:/usr/local/src"]
48.
49.d.vagrant_machine = "#{DOCKER_HOST_NAME}"
50.
51.d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}"
52.
53.end
54.
55.end
56.
57.end

¶ÔÕâÁ½¸ödockerÈÝÆ÷¶øÑÔ£¬vagrant_mahchine¼´DockerÖ÷»úÐéÄâ»úµÄIDÊÇdockerhost¡£VagrantÒª×ã¹»ÖÇÄÜ»¯£¬²ÅÄÜÖØ¸´Ê¹ÓÃdockerhostµÄͬһ¸öʵÀýÀ´ÔËÐÐÁ½¸öÈÝÆ÷¡£

ÏëÆô¶¯vertxsenderºÍvertxreceiver£¬°ÑVagrantfile»»³ÉÕâÒ»¸öÎļþ£¬²¢ÔËÐÐvagrant up£º

$ vagrant up 
2.
3....
4.
5.$ vagrant docker-logs
6.
7.==> vertxsender: Starting clustering...
8.
9.==> vertxsender: No cluster-host specified so using address 172.17.0.18
10.
11.==> vertxsender: Succeeded in deploying verticle
12.
13.==> vertxreceiver: Starting clustering...
14.
15.==> vertxreceiver: No cluster-host specified so using address 172.17.0.19
16.
17.==> vertxreceiver: Succeeded in deploying verticle
18.
19.==> vertxreceiver: Received message: ping!
20.
21.==> vertxsender: Received reply: pong
22.
23.==> vertxreceiver: Received message: ping!
24.
25.==> vertxreceiver: Received message: ping!
26.
27.==> vertxsender: Received reply: pong
28.
29.==> vertxsender: Received reply: pong
30.
31....

¼´Ê¹vertxsenderºÍvertxreceiver¸ù±¾²»ÖªµÀ±Ë´ËµÄÖ÷»úÃûºÍIPµØÖ·£¬vertx eventbusЭÒéÈ´ÓÐÒ»Ïî·¢ÏÖ¹¦ÄÜ£¬ÒÔ±ãÁ¬½Ó·¢ËÍ·½ºÍ½ÓÊÕ·½¡£¶ÔÓÚûÓÐÀàËÆ¹¦ÄܵÄÓ¦ÓóÌÐò¶øÑÔ£¬DockerÌṩÁËÈÝÆ÷Á¬½ÓÑ¡Ïî¡£

Á¬½ÓÈÝÆ÷

ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇÏÈÔËÐÐDockerÈÝÆ÷(vertxdev)£¬ËüÆô¶¯ÎÒÃÇ֮ǰ¿´µ½µÄÄǸöHelloWorld Web·þÎñÆ÷¡£È»ºó£¬µÚ¶þ¸öÈÝÆ÷(vertxdev-client)½«Ê¹ÓÃwgetÖ´ÐÐHTTPÇëÇó£º

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker' 
2.
3.Vagrant.configure("2") do |config|
4.
5.config.vm.define "vertxdev" do |a|
6.
7.a.vm.provider "docker" do |d|
8.
9.d.image = "vertxdev:latest"
10.
11.d.ports = ["8080:8080"]
12.
13.d.name = "vertxdev"
14.
15.d.remains_running = true
16.
17.d.cmd = ["vertx", "run", "vertx-examples/src/raw/java/httphelloworld/HelloWorldServer.java"]
18.
19.d.volumes = ["/src/vertx/:/usr/local/src"]
20.
21.d.vagrant_machine = "dockerhost"
22.
23.d.vagrant_vagrantfile = "./DockerHostVagrantfile"
24.
25.end
26.
27.end
28.
29.config.vm.define "vertxdev-client" do |a|
30.
31.a.vm.provider "docker" do |d|
32.
33.d.image = "vertxdev:latest"
34.
35.d.name = "vertxdev-client"
36.
37.d.link("vertxdev:vertxdev")
38.
39.d.remains_running = false
40.
41.d.cmd = ["wget","-qO", "-","--save-headers","http://vertxdev:8080"]
42.
43.d.vagrant_machine = "dockerhost"
44.
45.d.vagrant_vagrantfile = "./DockerHostVagrantfile"
46.
47.end
48.
49.end
50.
51.end

Õâ¸öÐÂVagrantfileÎļþµÄÖØÒª²¿·ÖÊÇÕâÒ»ÐÐd.link("vertxdev:vertxdev")¡£ÓÉÓÚÕâÒ»ÐУ¬vertxdev-client¾ÍÄܹ»½âÎöÖ÷»úÃûvertxdev£¬Òò¶øÊ¹ÓÃÃüÁîwget -qO - --save-headers http://vertxdev:8080£¬´¦ÀíHTTPÇëÇó¡£

ÏëÔËÐÐÈÝÆ÷£¬°ÑVagrantfile»»³ÉÕâ¸öÐÂÎļþ£¬²¢ÔËÐÐvagrant up.¡£--no-parallelÑ¡ÏîÈ·±£vertxdevÈÝÆ÷ÔÚvertxdev-client֮ǰÆô¶¯¡£

$ vagrant up --no-parallel 

²»·Á¿´Ò»ÏÂÈÕÖ¾£¬ÒÔ֤ʵ·¢ÉúµÄÇé¿ö£º

$ vagrant docker-logs 
2.
3.==> vertxdev: Succeeded in deploying verticle
4.
5.==> vertxdev-client: HTTP/1.1 200 OK
6.
7.==> vertxdev-client: Content-Type: text/plain
8.
9.==> vertxdev-client: Content-Length: 11
10.
11.==> vertxdev-client:
12.
13.==> vertxdev-client: Hello World

»ï¼Æ£¬ÎÒµÄIDEÔÚÄÄÀï?

ËäÈ»¼¯³É¿ª·¢»·¾³(IDE)ÊÇ¿ª·¢»·¾³µÄÒ»¸öÖØÒª²¿·Ö£¬µ«ÎÒÃÇ»¹Ã»ÓÐÌÖÂÛËü¡£ÄÇÊÇÓÉÓÚͼÐλ¯Ó¦ÓóÌÐò²¢²»Í¨³£ÔÚDockerÈÝÆ÷ÀïÃæÔËÐС£Eclipse»òIntelliJµÈIDEÔÚÖ÷Ö÷»úÖÐͨ³£ºÜÊʺϣ¬Ô´´úÂëÔÚÖ÷»úºÍÈÝÆ÷Ö®¼äʹÓÃDocker¾íÀ´¹²Ïí¡£Õâ¾ÍÊDZ¾Õ½ÚËù½éÉܵÄÄÚÈÝ¡£

VagrantËæ´øsynced_folderÑ¡ÏÒÔ±ãÔÚdockerÈÝÆ÷ºÍÖ÷Ö÷»úÖ®¼ä¹²ÏíÎļþ¼Ð£º

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker' 
2.
3.Vagrant.configure("2") do |config|
4.
5.config.vm.synced_folder ".", "/usr/local/src"
6.
7.config.vm.define "vertxdev-src" do |a|
8.
9.a.vm.provider "docker" do |d|
10.
11.d.build_dir = "."
12.
13.d.build_args = ["-t=vertxdev"]
14.
15.d.ports = ["8080:8080"]
16.
17.d.name = "vertxdev-src"
18.
19.d.remains_running = true
20.
21.d.cmd = ["vertx", "run", "vertx-examples/src/raw/java/httphelloworld/HelloWorldServer.java"]
22.
23.d.vagrant_machine = "dockerhost"
24.
25.d.vagrant_vagrantfile = "./DockerHostVagrantfile"
26.
27.end
28.
29.end
30.
31.end

ÔÚÕâ¸öÀý×ÓÖУ¬vertxdev-srcÎļþ¼Ð/usr/local/src½«ÓëÖ÷Ö÷»úVagrantfileÎļþ¼Ð(.)ͬ²½¡£Çë×¢Ò⣺Vagrant¸ºÔðΪÎÒÃǹ¹½¨Docker¾í¡£

Ò»µ©ÎÒÃǰÑVagrantfile»»³ÉÕâÒ»¸öÎļþ£¬¾Í¿ÉÒÔÔËÐÐgit clone£¬ÔÙ´ÎʹÓÃvertxdev-srcÈÝÆ÷£º

$ vagrant docker-run vertxdev-src -- git clone https://github.com/vert-x/vertx-examples.git 

Ò»µ©¿Ë¡Íê±Ï£¬Ô´´úÂ뽫ͬʱ³öÏÖÔÚÈÝÆ÷ºÍÖ÷Ö÷»ú¡£Òò¶ø£¬ÎÒÃÇ¿ÉÒÔÖ±½Ó·ÃÎÊ£¬»¹¿ÉÒԱ༭Îļþ£º

$ cd vertx-examples/src/raw/java/httphelloworld/ 
2.
3.$ sed -i '' 's/Hello World/I m in a docker container and I feel good/' HelloWorldServer.java

Ïë²âÊÔ¸ÃÓ¦ÓóÌÐò£¬ÔËÐÐvagrant up£º

$ cd - 
2.
3.$ vagrant up
4.
5.$ curl localhost:8080
6.
7.I m in a docker container and I feel good

½áÊøÓï

Èç¹ûÄãÔÚ´¦ÀíһϵÁв»Í¬µÄƽ̨£ºÒ»Ð©Æ½Ì¨Ö§³ÖDocker£¬ÁíһЩ²»Ö§³Ö£¬ÄÇôʹÓÃVagrantÀ´¿ØÖÆDockerÈÝÆ÷ºÜÓÐÓá£ÔÚÕâÖÖ³¡¾°Ï£¬Ê¹ÓÃVagrant¿ÉÒÔÈù¹½¨»·¾³µÄ¹ý³ÌÔÚ²»Í¬Æ½Ì¨ÉϾßÓÐÒ»ÖÂÐÔ¡£

×÷ΪVagrantµÄÌæ´ú·½°¸£¬Fig(http://www.fig.sh)ÎÞÒÉÖµµÃ¹Ø×¢¡£Docker¹ÍÓÃFigµÄÖ÷Òª¿ª·¢ÈËÔ±£¬´óÁ¦Ö§³ÖËü£¬½«ÆäÊÓ×÷Ò»ÖÖ¹¹½¨»ùÓÚDockerµÄ¿ª·¢»·¾³µÄ³öÉ«¹¤¾ß¡£

   
3366 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

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

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

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

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

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

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