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½«Ö´ÐÐ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µÄ¿ª·¢»·¾³µÄ³öÉ«¹¤¾ß¡£
|