¼ò½é£ºÔÆÔÉú¼¼ÊõÕ»ÊÇÏÂÒ»´úÓ¦ÓÃתÐ͵ıØÈ»Ñ¡Ôñ£¬Ëü°üº¬ÁË΢·þÎñ¼Ü¹¹£¬DevOpsºÍÈÝÆ÷¼¼Êõ¡£¶ÔÓÚ΢·þÎñ¼Ü¹¹À´Ëµ£¬Ó¦ÓÃÊÇ¡°µÚÒ»¹«Ãñ¡±£¬ËûÖð½¥²ÏʳÔÀ´µ×²ãÈí¼þ»òÕßÓ²¼þµÄ¹¦ÄÜ£¬ÀýÈç·þÎñ×¢²áÓë·¢ÏÖÒÔ¼°¸ºÔؾùºâ£»¶ø¶ÔÓÚÈÝÆ÷ƽ̨À´Ëµ£¬ÈÝÆ÷ÊÇ¡°µÚÒ»¹«Ãñ¡±£¬ËûÌṩÁËÈÝÆ÷×¢²áÓë·¢Ïֺ͸ºÔؾùºâ£¬Í¬Ê±ÈÝÆ÷¼¼Êõ½«Ó¦ÓúÍÍâÃæµÄÊÀ½ç×öÁ˸ôÀ룬ÕâÑùºÜ¶àÓ¦ÓÃÔËÐеļÙÉè¾Í»áʧЧ¡£Äǵ±Î¢·þÎñÓ¦ÓÃÔËÐÐÔÚÈÝÆ÷ÖеÄʱºò£¬ÎÒÃÇ»áÓöµ½ÄÄЩ³£¼ûÎÊÌ⣿ÎÒÃÇÓÖ¸ÃÈçºÎ½â¾öÄØ£¿
ÆóÒµÓ¦ÓÃÔÚÏò΢·þÎñ¼Ü¹¹×ªÐ͵Ĺý³ÌÖУ¬Î¢·þÎñÈçºÎ»®·ÖÊÇ×î»ù±¾µÄÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýÒµÎñ¼Ü¹¹µÄÊáÀíÀ´Àí½âÒµÎñ£¬²¢Í¬Ê±Ê¹ÓÃÁìÓòÉè¼ÆµÄ·½·¨½øÐÐ΢·þÎñµÄÉè¼Æ¡£Æä´Î£¬ÎÒÃÇÐèÒª×öϵͳÉè¼Æ£¬ÏµÍ³Éè¼Æ»á¸ü¹Ø×¢ÐÔÄÜ¡¢¿ÉÓÃÐÔ¡¢¿ÉÀ©Õ¹ÐԺͰ²È«ÐԵȣ»µ±È»£¬ÎÒÃÇ»¹ÐèÒª×ö½Ó¿ÚÉè¼Æ£¬¶¨Òå΢·þÎñÖ®¼äµÄÆõÔ¼¡£
JavaÔÚÆóÒµÖб»¹ã·ºÓ¦Ó㬵±Ç°£¬Ñ¡ÔñSpring Cloud×÷Ϊ΢·þÎñ¿ª·¢¿ò¼Ü³ÉΪһ¸ö¹ã·ºµÄÇ÷ÊÆ¡£Î¢·þÎñ¼Ü¹¹µÄ¸´ÔÓÐÔÐèÒªÈÝÆ÷¼¼ÊõÀ´Ö§³Å£¬Ó¦ÓÃÐèÒªÈÝÆ÷»¯£¬²¢Ê¹ÓÃCaaSƽ̨À´Ö§³Å΢·þÎñϵͳµÄÔËÐС£
±¾ÎÄ̽ÌÖµÄÖ÷ÌâÊÇÀ´×ÔÓÚÆóÒµ¼¶JavaÓ¦ÓÃÔÚÈÝÆ÷»¯¹ý³ÌÖÐÓöµ½µÄ»ù´¡ÎÊÌ⣨Óë¼ÆËãºÍÍøÂçÏà¹Ø£©£¬Ï£ÍûÒÔС¼û´ó̽ÌÖ΢·þÎñתÐ͹ý³ÌÖÐÓöµ½µÄÌôÕ½¡£
ÈÝÆ÷ÄÚ´æÏÞÖÆÎÊÌâ
ÈÃÎÒÃÇÀ´¿´Ò»´Îʹʣ¬Çé¿öÈçÏ£ºµ±Ò»¸öJavaÓ¦ÓÃÔÚÈÝÆ÷ÖÐÖ´ÐеÄʱºò£¬Ä³Ð©Çé¿öÏ»áÈÝÆ÷»áĪÃûÆäÃîÍ˳ö¡£
1.DockfileÈçÏ£º
FROM airdock/oracle-jdk:latest
MAINTAINER Grissom Wang <grissom.wang@daocloud.io>
ENV TIME_ZONE Asia/Shanghai
RUN echo "$TIME_ZONE" > /etc/timezone
WORKDIR /app
RUN apt-get update
COPY myapp.jar /app/ myapp.jar
EXPOSE 8080
CMD [ "java", "-jar", "myapp.jar"
] |
2.ÔËÐÐÃüÁî
docker run ¨Cit
¨Cm=100M ¨Cmemory-swap=100M grissom/myapp:latest |
3.ÈÕÖ¾·ÖÎö
Ö´ÐÐdocker logs container_id£¬³öÏÖÁËjava.lang.OutOfMemoryError¡£
4.ÎÊÌâ³õ²½·ÖÎö
ÒòΪÎÒÃÇÔÚÖ´ÐÐÈÝÆ÷µÄʱºò£¬¶ÔÄÚ´æ×öÁËÏÞÖÆ£¬Í¬Ê±ÔÚJavaÆô¶¯²ÎÊýÖØ£¬Ã»ÓжÔÄÚ´æÊ¹ÓÃ×öÏÞÖÆ£¬ÊDz»ÊÇÕâ¸öÔÒòµ¼ÖÂÁËÈÝÆ÷±»¸ÉµôÄØ£¿
µ±ÎÒÃÇÖ´ÐÐûÓÐÈκβÎÊýÉèÖã¨ÈçÉÏÃæµÄmyapp£©µÄ Java Ó¦ÓóÌÐòʱ£¬JVM »á×Ô¶¯µ÷Õû¼¸¸ö²ÎÊý£¬ÒÔ±ãÔÚÖ´Ðл·¾³ÖоßÓÐ×î¼ÑÐÔÄÜ£¬µ«ÊÇÔÚʹÓùý³ÌÖÐÎÒÃÇÖð²½·¢ÏÖ£¬Èç¹ûÈÃ
JVM ergonomics (¼´JVMÈËÌ幤³Ìѧ£¬ÓÃÓÚ×Ô¶¯Ñ¡ÔñºÍÐÐΪµ÷Õû)¶ÔÀ¬»øÊÕ¼¯Æ÷¡¢¶Ñ´óСºÍÔËÐбàÒëÆ÷ʹÓÃĬÈÏÉèÖÃÖµ£¬ÔËÐÐÔÚÈÝÆ÷ÖеÄ
Java ½ø³Ì»áÓëÎÒÃǵÄÔ¤ÆÚ±íÏÖÑÏÖØ²»·û£¨³ýÁËÉÏËßµÄÎÊÌ⣩¡£
Ê×ÏÈÎÒÃÇÀ´×öÒ»¸öʵÑ飺
1.ÔÚÎÒ±¾»ú£¨Mac£©ÉÏÖ´ÐÐdocker infoÃüÁî
Server Version:
17.06.0-ce
Kernel Version: 4.9.31-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.952GiB
Name: moby |
2.Ö´ÐÐdocker run -it -m=100M ¨Cmemory-swap=100M debian
cat /proc/meminfo
MemTotal: 2047048
kB = 2G
MemFree: 609416 kB = 600M
MemAvailable: 1604928 kB = 1.6G |
ËäÈ»ÎÒÃÇÆô¶¯ÈÝÆ÷µÄʱºò£¬Ö¸¶¨ÁËÈÝÆ÷µÄÄÚ´æÏÞÖÆ£¬µ«ÊÇ´ÓÈÝÆ÷ÄÚ²¿¿´µ½µÄÄÚ´æÐÅÏ¢ºÍÖ÷»úÉϵÄÄÚ´æÐÅÏ¢¼¸ºõÒ»Ö¡£
Òò´ËÎÒÃÇÕÒµ½ÔÒòÁË£ºdocker switches£¨-m£¬-memoryºÍ-memory-swap£©
ÔÚ½ø³Ì³¬¹ýÏÞÖÆµÄÇé¿öÏ£¬»áָʾ Linux ÄÚºËɱËÀ¸Ã½ø³Ì¡£µ« JVM ÊÇÍêÈ«²»ÖªµÀÏÞÖÆ£¬Òò´Ë»áºÜÓпÉÄܳ¬³öÏÞÖÆ¡£ÔÚ½ø³Ì³¬¹ýÏÞÖÆµÄʱºò£¬ÈÝÆ÷½ø³Ì¾Í±»É±µôÁË£¡
½â¾öÎÊÌâµÄÒ»ÖÖ˼·¾ÍÊÇʹÓÃJVM²ÎÊýÀ´ÏÞÖÆÄÚ´æµÄʹÓã¬Õâ¸öÐèÒª¸ù¾ÝJVMÄÚ´æ²ÎÊýµÄ¶¨ÒåÀ´×öÇÉÃîµÄÉèÖ㬵«ÊÇÐÒÔ˵ÄÊÇ´ÓJava
SE 8u131ºÍJDK 9¿ªÊ¼£¬Java SE¿ªÊ¼Ö§³ÖDocker CPUºÍÄÚ´æÏÞÖÆ¡£
¾ßÌåʵÏÖÂß¼ÈçÏ£º Èç¹û-XX£ºParalllelGCThreads»ò-XX£ºCICompilerCountδָ¶¨ÎªÃüÁîÐÐÑ¡ÏÔòJVM½«Docker
CPUÏÞÖÆÓ¦ÓÃÓÚJVMÔÚϵͳÉÏ¿´µ½µÄCPUÊý¡£È»ºóJVM½«µ÷ÕûGCÏ̺߳ÍJIT±àÒëÆ÷Ï̵߳ÄÊýÁ¿£¬¾ÍÏñËüÔÚÂã»úϵͳÉÏÔËÐÐÒ»Ñù£¬ÆäCPUÊýÁ¿ÉèÖÃΪDocker
CPUÏÞÖÆ¡£Èç¹û-XX£ºParallelGCThreads»ò-XX£ºCICompilerCountÖ¸¶¨ÎªJVMÃüÁîÐÐÑ¡Ï²¢ÇÒÖ¸¶¨ÁËDocker
CPUÏÞÖÆ£¬ÔòJVM½«Ê¹ÓÃ-XX£ºParallelGCThreadsºÍ-XX£ºCICompilerCountÖµ¡£
¶ÔÓÚDockerÄÚ´æÏÞÖÆ¡¢×î´óJava¶ÑµÄÉèÖû¹ÓÐһЩ¹¤×÷Òª×ö¡£ÒªÔÚûÓÐͨ¹ý-XmxÉèÖÃ×î´óJava¶ÑµÄÇé¿öϸæÖªJVMҪעÒâDockerÄÚ´æÏÞÖÆ£¬ÐèÒªÁ½¸öJVMÃüÁîÐÐÑ¡Ï
-XX£º+ UnlockExperimentalVMOptions
-XX£º+ UseCGroupMemoryLimitForHeap¡£ |
-XX£º+ UnlockExperimentalVMOptionsÊDZØÐèµÄ£¬ÒòΪÔÚ½«À´°æ±¾ÖУ¬DockerÄÚ´æÏÞÖÆµÄ͸Ã÷±êʶÊÇÄ¿±ê¡£µ±Ê¹ÓÃÕâÁ½¸öJVMÃüÁîÐÐÑ¡Ï²¢ÇÒδָ¶¨-Xmxʱ£¬JVM½«²é¿´Linux
cgroupÅäÖã¬ÕâÊÇDockerÈÝÆ÷ÓÃÓÚÉèÖÃÄÚ´æÏÞÖÆµÄ·½Ê½£¬ÒÔ͸Ã÷µØÖ¸¶¨×î´óJava¶Ñ´óС¡£ DockerÈÝÆ÷ҲʹÓÃCgroupsÅäÖÃÀ´Ö´ÐÐCPUÏÞÖÆ¡£
·þÎñ×¢²áÓë·¢ÏÖ
ÔÚ΢·þÎñµÄ³¡¾°ÖУ¬ÔËÐеÄ΢·þÎñʵÀý½«»á´ïµ½³É°ÙÉÏǧ¸ö£¬Í¬Ê±Î¢·þÎñʵÀý´æÔÚʧЧ£¬²¢ÔÚÆäËû»úÆ÷ÉÏÆô¶¯ÒÔ±£Ö¤·þÎñ¿ÉÓÃÐԵij¡¾°£¬Òò´ËÓÃIP×÷Ϊ΢·þÎñ·ÃÎʵĵØÖ·»á´æÔÚÐèÒª¾³£¸üеÄÐèÇó¡£
·þÎñ×¢²áÓë·¢ÏÖ¾ÍÓ¦ÓöøÉú£¬µ±Î¢·þÎñÆô¶¯µÄʱºò£¬Ëü»á½«×Ô¼ºµÄ·ÃÎÊEndpointÐÅÏ¢×¢²áµ½×¢²áÖÐÐÄ£¬ÒԱ㵱±ðµÄ·þÎñÐèÒªµ÷ÓõÄʱºò£¬Äܹ»´Ó×¢²áÖÐÐÄ»ñµÃÕýÈ·µÄEndpoint¡£
Èç¹ûÓÃJava¼¼ÊõÕ»¿ª·¢Î¢·þÎñÓ¦Óã¬Spring Cloud£¨https://spring.io/£©½«»áÊÇ´ó¼ÒÊ×Ñ¡µÄ΢·þÎñ¿ª·¢¿ò¼Ü¡£Spring
Cloud Service Discovery¾ÍÌṩÁËÕâÑùµÄÄÜÁ¦£¬Ëüµ×²ã¿ÉÒÔʹÓÃEureka£¨Netflix£©£¬ZooKeeper£¬ETCD¡£ÕâÀïÎÒÃÇÒÔʹÓÃSpring
Cloud EurekaΪÀý£¨Ê¹ÓÃSpring Cloud EurekaµÄÎĵµ¿ÉÒԲο¼http://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.3.1.RELEASE/£©¡£
ÔÚ±¾»úÔËÐÐÈçÏÂÃüÁ
java -jar target/discovery-client-demo-0.0.1-SNAPSHOT.jar |
¸ÃÓ¦ÓûὫ×Ô¼ºµÄÐÅÏ¢×¢²áµ½±¾µØEureka¡£ÎÒÃÇ¿ÉÒÔͨ¹ý´ò¿ªEurekaµÄDashboard£¬¿´µ½ÈçÏÂÐÅÏ¢£º

ͼ 1 ÎïÀí»úÉÏÔËÐÐEureka Client
ÎÒÃÇ¿ÉÒÔ¿´µ½Ó¦ÓõÄÈçÏÂÐÅÏ¢£º
Ãû³Æ£ºdiscovery-client-demo
IP: 10.8.0.67
Port: 9090 |
µ«ÊÇÎÒÃÇÔÚÈÝÆ÷»¯³¡¾°ÖУ¬Óöµ½ÁËÎÊÌâ¡£DockerfileÈçÏ£º
FROM airdock/oracle-jdk:latest
MAINTAINER Grissom Wang <grissom.wang@daocloud.io>
ENV TIME_ZONE Asia/Shanghai
RUN echo " $TIME_ZONE" > /etc/timezone
WORKDIR /app
RUN apt-get update
COPY target/discover y-client-demo-0.0.1 -SNAPSHOT.jar
/app/discovery-client-demo.jar
EXPOSE 8080
CMD [ "java", "-jar", "discovery-client-demo.jar"
] |
¼ÙÉèÎÒÃÇÏÖÔÚÔÚ±¾»úʹÓÃDocker runÃüÁîÖ´ÐÐÈÝÆ÷»¯discovery-client-demo£¬ÃüÁîÐÐÈçÏ£º
docker run -d
--name discovery-client-demo1 -e eureka.client.serviceUrl.defaultZone =http://10.8.0.67:8761/eureka/
-e spring.application.name =grissom -p 8080:8080
discovery -client-demo:latest
docker run -d --name discovery -client-demo2 -e
eureka.instance.prefer-ip -address =true ¨Ce eureka.client.serviceUrl.defaultZone =http://10.8.0.67:8761/eureka/
-e spring.application.name =grissom2 -p 8081:8080
discovery-client-demo:latest |
ǰºóÁ½¸öÈÝÆ÷µÄÇø±ðÔÚÓÚ£¬µÚ¶þ¸öָʾӦÓÃ×¢²áµÄʹÓÃIP£¬¶øÄ¬ÈÏÊÇHostname¡£
´ò¿ªEurekaµÄDashboard£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÈçÏÂÐÅÏ¢£º

ͼ 2 ÈÝÆ÷ÖÐÔËÐÐEureka Client
µ÷ÓÃEurekaµÄApps½Ó¿Ú£¬ÎÒÃÇ¿ÉÒÔ¿´µ½¸ü¼ÓÏêϸµÄÐÅÏ¢£º

ͼ 3 ×¢²áÓ¦ÓõÄÏêϸÐÅÏ¢
Õâ¸öʱºòÎÒÃÇ·¢ÏÖÁËÎÊÌ⣬Á½¸öÓ¦ÓÃ×¢²áµÄÐÅÏ¢ÖУ¬Hostname, IPºÍ¶Ë¿Ú¶¼Ê¹ÓÃÁËÈÝÆ÷ÄÚ²¿µÄÖ÷»úÃû£¬IPºÍ¶Ë¿Ú£¨Èç8080£©¡£Õâ¾ÍÒâζ×ÅÔÚPort-MappingµÄ³¡¾°Ï£¬Ó¦ÓÃ×¢²áµ½EurekaµÄʱºò£¬×¢²áÐÅÏ¢ÎÞ·¨±»µÚÈý·½Ó¦ÓÃʹÓá£
½â¾öÕâ¸öÎÊÌâµÄµÚÒ»¸ö˼·ÈçÏ£º

ͼ 4 ¶ÔEureka½øÐÐÀ©Õ¹
ÎÒÃǶÔEureka½øÐÐÀ©Õ¹£¬¶ÔËùÓпͻ§¶Ë¹ýÀ´µÄÇëÇó½øÐÐÀ¹½Ø£¬È»ºó´ÓDocker DaemonÖÐÄõ½ÕýÈ·µÄÍⲿ·ÃÎÊÐÅÏ¢À´½øÐÐÌæ»»£¬´Ó¶øÈ·±£×¢²áµ½EurekaÖеÄÐÅÏ¢ÊÇÍⲿÄܹ»·ÃÎʵġ£
¸Ã·½°¸ÐèÒª×öµÄ¹¤×÷£º
ÐèҪͬʱ¶ÔEureka ClientºÍServer¸ÄÔ죬Äܹ»ÔÚClientÉϱ¨µÄÐÅÏ¢ÖмÓÈëcontainer
IDµÈÐÅÏ¢¡£
Eureka·þÎñ¶ËÐèÒª¼ÓÈëÒ»¸ö¹ýÂËÆ÷£¬ÐèÒª¶ÔËùÓеÄ×¢²áÇëÇó½øÐд¦Àí£¬¸ù¾Ýcontainer
ID½«ÄÚ²¿hostname£¬IPºÍ¶Ë¿Ú¸ÄΪÍⲿ¿ÉÒÔ·ÃÎʵÄIPºÍ¶Ë¿Ú¡£
¸Ã·½°¸µÄÌôÕ½£º
ÒòΪֻÓÐÈÝÆ÷±»´´½¨ºó²ÅÓÐID£¬ÎÞ·¨ÔÚÆô¶¯²ÎÊýÖÐÖ¸¶¨£¬Òò´ËÓ¦ÓÃÔÚÈÝÆ÷Æô¶¯µÄʱºò£¬ÎÞ·¨Äõ½ÈÝÆ÷µÄID¡£
¶ÔÓÚEureka ServerºÍClientµÄ¸ÄÔ죬ÎÞ·¨¹±Ï×»ØÉçÇø£¬Òò´ËÐèÒª×Ô¼ºÎ¬»¤°æ±¾£¬´æÔÚ¼«´óµÄ·çÏÕ¡£
AWSµÄEC2 ÌṩÁËʵÀýÔªÊý¾ÝºÍÓû§Êý¾ÝµÄAPI£¬Ëü¿ÉÒÔͨ¹ýREST APIµÄ·½Ê½¹©ÔËÐÐÔÚEC2ÄÚ²¿µÄÓ¦ÓÃʹÓá£APIÐÎʽÈçÏ£º
http://169.254.169.254/latest/meta-data/
ÆäÖÐIPµØÖ·Êǹ̶¨µÄÒ»¸öIPµØÖ·¡£
Òò´ËÎÒÃÇÒ²¿ÉÒÔÌṩһ¸öÀàËÆµÄÔªÊý¾ÝºÍÓû§Êý¾ÝAPI£¬¹©ÈÝÆ÷ÄÚ²¿µÄÓ¦Óõ÷Óá£Í¬Ê±ÎªÁ˼õÉÙ¶ÔÓ¦ÓõÄÇÖÈ룬ÎÒÃÇ¿ÉÒÔÔÚÓ¦ÓÃÆô¶¯Ö®Ç°Ö´ÐÐÒ»¸ö½Å±¾À´»ñÈ¡ÏàÓ¦µÄÐÅÏ¢£¬²¢ÉèÖõ½»·¾³±äÁ¿ÖУ¬¹©Ó¦ÓÃÆô¶¯ºó¶ÁÈ¡²¢Ê¹Óã¬Á÷³ÌÈçÏ£º

ͼ 5 ·½°¸Á÷³Ì
×ܽá
±¾ÎÄ×ܽáÁËʹÓÃJava¿ª·¢µÄÆóÒµ¼¶Ó¦ÓÃÔÚÏò΢·þÎñ¼Ü¹¹Ó¦ÓÃתÐ͹ý³ÌÖУ¬ÔÚÈÝÆ÷»¯ÔËÐйý³ÌÖÐÓöµ½µÄ³£¼ûÎÊÌâ¡¢ÔÒò·ÖÎö¼°½â¾ö·½·¨¡£×ܽáÏÂÀ´£¬ÓÉÓÚÈÝÆ÷¼¼ÊõµÄÄÚÔÚÌØÐÔ£¬ÎÒÃÇÐèÒª¶ÔÓ¦ÓÃ×öһЩ¸ÄÔ죬ͬʱÏàÓ¦µÄ¹¤¾ßÈçJVMÒ²ÐèÒª¶ÔÈÝÆ÷ÓиüºÃµÄ±¾µØÖ§³Ö¡£ |