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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÓÃDockerÖØÐ¶¨ÒåJavaÐéÄ⻯²¿Êðʵս°¸Àý
 
ÒëÕߣººé¹ú°² À´Ô´£º¼òµ¥Ö®ÃÀ ·¢²¼ÓÚ 2016-1-26
  2202  次浏览      27
 

ÉÏÖÜÏ£ÔÆºÍ´ó¼Ò·ÖÏíÁË¡¶ÓÃDockerÖØÐ¶¨ÒåJavaÐéÄ⻯²¿Ê𣨻ù´¡Æª£©¡·£¬¹À¼ÆÓÐЩС»ï°éÔçÒѰ´ÄͲ»×¡×ż±µÄÐÄÇéÁ˰ɡ£½ñÌìÏ£ÔÆ¾ÍºÍ´ó¼Ò·ÖÏíÔÚdockerÀﲿÊðjavaÓ¦ÓõÄʵս°¸Àý¡£

>>>Dockerfiles

Dockerfile°üº¬ÁËһϵÁÐÖ¸Á¸æËßDockerÈçºÎÈ¥¹¹½¨Ò»¸ö¾µÏñ£¬ËüÖ¸¶¨Á˾µÏñµÄ»ùµã£¬ÒÔ¼°ÅäÖþµÏñµÄÿ¸öϸ½Ú¡£ÒÔÏÂÊÇÒ»¸öDockerfileʾÀý£¬ÊÇCentOS¾µÏñµÄDockerfile¡£

´úÂëÇåµ¥1. CentOS Dockerfile

```sh
FROM scratch
MAINTAINER The CentOS Project - ami_creator
ADD centos-7-20150616_1752-docker.tar.xz /
# Volumes for systemd
# VOLUME ["/run", "/tmp"]
# Environment for systemd
# ENV container=docker
# For systemd usage this changes to /usr/sbin/init
# Keeping it as /bin/bash for compatibility with previous
CMD ["/bin/bash"]
```

´ó²¿·ÖÄÚÈÝÊÇ×¢ÊÍ£¬Ö÷ÒªÓÐËľäÃüÁ

1. <code>FROM scratch</code>£ºËùÓÐDockerfile¶¼Òª´ÓÒ»¸ö»ù´¡¾µÏñ¼Ì³Ð£¬ÔÚÕâ¸öÀý×ÓÖУ¬CentOS¾µÏñÊǼ̳ÐÓÚ"scratch"¾µÏñ£¬Õâ¸ö¾µÏñÊÇËùÓоµÏñµÄ¸ù¡£Õâ¸öÅäÖÃÊǹ̶¨µÄ£¬±íÃ÷ÁËÕâ¸öÊÇDockerµÄ¸ù¾µÏñÖ®Ò»¡£

2. <code>MAINTAINER ...</code>£º<code>MAINTAINER</code>Ö¸ÁîÖ¸Ã÷Á˾µÏñµÄËùÓÐÕߣ¬Õâ¸öÀý×ÓÖÐËùÓÐÕßÊÇCentOS Project¡£

3. <code>ADD centos...tar.xz</code>£º<code>ADD</code>Ö¸Áî¸æËßDocker°ÑÖ¸¶¨ÎļþÉÏ´«µ½¾µÏñÖУ¬Èç¹ûÎļþÊÇѹËõ¹ýµÄ£¬»á°ÑËü½âѹµ½Ö¸¶¨Â·¾¶¡£Õâ¸öÀý×ÓÖУ¬Docker»áÉÏ´«Ò»¸öCentOS²Ù×÷ϵͳµÄGzip°ü£¬²¢½âѹµ½ÏµÍ³µÄ¸ùĿ¼¡£

4. <code>CMD ["/bin/bash"]</code>£º×îºó£¬<code>CMD</code>Ö¸Áî¸æËßDockerÒªÖ´ÐÐʲôÃüÁÕâ¸öÀý×ÓÖУ¬×îºó»á½øÈëBourne Again Shell (bash)ÖÕ¶Ë¡£

ÏÖÔÚÄãÖªµÀDocker´ó¸ÅÊdz¤Ê²Ã´Ñù×ÓÁË£¬½ÓÏÂÀ´ÔÙ¿´¿´Tomcat¹Ù·½µÄDockerfile£¬Í¼2˵Ã÷ÁËÕâ¸öÎļþµÄ¼Ü¹¹¡£

Õâ¸ö¼Ü¹¹Î´±ØÈçÄãÏëÏóÖÐÄÇô¼òµ¥£¬µ«ÎÒÃǽÓÏÂÀ´»áÂýÂýѧϰËü£¬ÆäʵËüÊǷdz£ÓÐÂß¼­µÄ¡£ÉϱßÒѾ­Ìá¹ýËùÓÐDockerfileµÄ¸ùÊÇ<code>scratch</code>£¬½ÓÏÂÀ´Ö¸¶¨µÄÊÇ<code>debian:jessie</code>¾µÏñ£¬Õâ¸ö¹Ù·½¾µÏñÊÇ»ùÓÚ±ê×¼¾µÏñ¹¹½¨µÄ£¬Docker²»ÐèÒªÖØ¸´·¢Ã÷ÂÖ×Ó£¬Ã¿´Î¶¼´´½¨Ò»¸öоµÏñÁË£¬Ö»Òª»ùÓÚÒ»¸öÎȶ¨µÄ¾µÏñÀ´¼ÌÐø¹¹½¨Ð¾µÏñ¼´¿É£¬ÔÚÕâ¸öÀý×ÓÖУ¬<code>debian:jessie</code>ÊÇÒ»¸ö¹Ù·½Debian Linux¾µÏñ£¬¾ÍÏñÉϱߵÄCentOSÒ»Ñù£¬ËüÖ»ÓÐÈýÐÐÖ¸Áî¡£

´úÂëÇåµ¥ 2. debian:jessie Dockerfile

```sh
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]
```

ÔÚÉÏͼÖÐÎÒÃÇ»¹¼ûµ½Óа²×°Á½¸ö¶îÍâµÄ¾µÏñ£¬CURL ºÍ Source Code Management£¬¾µÏñ<code>buildpack-deps:jessie-curl</code>µÄDockerfileÈçÇåµ¥3Ëùʾ¡£

´úÂëÇåµ¥ 3. buildpack-deps:jessie-curl Dockerfile

``sh
FROM debian:jessie
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
wget \
&& rm -rf /var/lib/apt/lists/*
```

Õâ¸öDockerfileÖÐʹÓÃ<code>apt-get</code>È¥°²×°<code>curl</code>ºÍ<code>wget</code>£¬Ê¹Õâ¸ö¾µÏñÄÜ´ÓÆäËû·þÎñÆ÷ÏÂÔØÈí¼þ¡£<code>RUN</code>Ö¸ÁîÈÃDockerÔÚÔËÐеÄʵÀýÖÐÖ´ÐоßÌåµÄÃüÁÕâ¸öÀý×ÓÖУ¬Ëü»á¸üÐÂËùÓпâ(<code>apt-get update</code>)£¬È»ºóÖ´ÐÐ<code>apt-get install</code>È¥°²×°<code>curl</code>ºÍ<code>wget</code>¡£

<code>buildpack-deps:jessie-scp</code>µÄDockerfileÈçÇåµ¥4Ëùʾ.

´úÂëÇåµ¥ 4. buildpack-deps:jessie-scp Dockerfile

```sh
FROM buildpack-deps:jessie-curl
RUN apt-get update && apt-get install -y --no-install-recommends \
bzr \
git \
mercurial \
openssh-client \
subversion \
&& rm -rf /var/lib/apt/lists/*
```

Õâ¸ö[Dockerfile]»á°²×°Ô´Âë¹ÜÀí¹¤¾ß£¬ÀýÈçGit£¬Mercurial, ºÍ Subversion¡£

JavaµÄ[Dockerfile»á¸ü¼Ó¸´ÔÓЩ£¬ÈçÇåµ¥5Ëùʾ¡£

´úÂëÇåµ¥ 5. Java Dockerfile

```sh
FROM buildpack-deps:jessie-scm
# A few problems with compiling Java from source:
# 1. Oracle. Licensing prevents us from redistributing the official JDK.
# 2. Compiling OpenJDK also requires the JDK to be installed, and it gets
# really hairy.

RUN apt-get update && apt-get install -y unzip && rm -rf /var/lib/apt/lists/*
RUN echo 'deb jessie-backports main' > /etc/apt/sources.list.d/jessie-backports.list
# Default to UTF-8 file.encoding
ENV LANG C.UTF-8
ENV JAVA_VERSION 8u66
ENV JAVA_DEBIAN_VERSION 8u66-b01-1~bpo8+1
# see

# and

ENV CA_CERTIFICATES_JAVA_VERSION 20140324
RUN set -x \
&& apt-get update \
&& apt-get install -y \
openjdk-8-jdk="$JAVA_DEBIAN_VERSION" \
ca-certificates-java="$CA_CERTIFICATES_JAVA_VERSION" \
&& rm -rf /var/lib/apt/lists/*
# see CA_CERTIFICATES_JAVA_VERSION notes above
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure
# If you're reading this and have any feedback on how this image could be
# improved, please open an issue or a pull request so we can discuss it!
```

¼òµ¥À´Ëµ£¬Õâ¸öDockerfileʹÓÃÁ˰²È«²ÎÊýÈ¥Ö´ÐÐ<code>apt-get install -y openjdk-8-jdk</code>È¥ÏÂÔØ°²×°Java£¬¶øENVÖ¸ÁîÅäÖÃϵͳµÄ»·¾³±äÁ¿¡£

×îºó£¬Çåµ¥6ÊÇTomcatµÄ[Dockerfile¡£

´úÂëÇåµ¥ 6. Tomcat Dockerfile

```sh
FROM java:7-jre
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
# see

RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \
05AB33110949707C93A279E3D3EFE6B686867BA6 \
07E48665A34DCAFAE522E5E6266191C37C037D42 \
47309207D818FFD8DCD3F83F1931D684307A10A5 \
541FBE7D8F78B25E055DDEE13C370389288584E7 \
61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \
79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \
9BA44C2621385CB966EBA586F72C284D731FABEE \
A27677289986DB50844682F8ACB77FC2E86E29AC \
A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \
DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \
F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \
F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.0.26
ENV TOMCAT_TGZ_URL

RUN set -x \
&& curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \
&& curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \
&& gpg --verify tomcat.tar.gz.asc \
&& tar -xvf tomcat.tar.gz --strip-components=1 \
&& rm bin/*.bat \
&& rm tomcat.tar.gz*
EXPOSE 8080
CMD ["catalina.sh", "run"]
```

ÑϸñÀ´Ëµ£¬TomcatʹÓÃÁËJava 7µÄ¸¸¼¶Dockerfile£¨Ä¬ÈϵÄ×îÐÂJava°æ±¾ÊÇ8£©¡£Õâ¸öDockerfileÉèÖÃÁË<code>CATALINA_HOME</code>ºÍ<code>PATH</code>»·¾³±äÁ¿£¬È»ºóÓÃ<code>mkdir</code>ÃüÁîн¨ÁË<code>CATALINA_HOME</code>Ŀ¼£¬<code>WORKDIR</code>Ö¸Áî°Ñµ±Ç°¹¤×÷·¾¶¸ü¸ÄΪ<code>CATALINA_HOME</code>£¬È»ºó<code>RUN</code>Ö¸ÁîÖ´ÐÐÁËͬһÐÐÖÐһϵÁеÄÃüÁ

1. ÏÂÔØTomcatѹËõ°ü¡£

2. ÏÂÔØÎļþУÑéÂë¡£

3. ÑéÖ¤ÏÂÔØµÄÎļþÕýÈ·¡£

4. ½âѹTomcatѹËõ°ü¡£

5. ɾ³ýËùÓÐÅú´¦ÀíÎļþ£¨ÎÒÃÇÊÇÔÚLinuxÉÏÔËÐУ©¡£

6. ɾ³ýѹËõ°üÎļþ¡£

°ÑÕâЩÃüÁîдÔÚͬһÐУ¬¶ÔÓ¦DockerÀ´Ëµ¾ÍÊÇÒ»ÌõÃüÁ×îºóDocker»á°ÑÖ´ÐеĽá¹û»º´æÆðÀ´£¬DockerÓиö²ßÂÔÊǼì²â¾µÏñºÎʱÐèÒªÖØ½¨£¬ÒÔ¼°ÑéÖ¤¹¹½¨¹ý³ÌÖеÄÖ¸ÁîÊÇ·ñÕýÈ·¡£µ±Ò»ÌõÖ¸Áî»áʹ¾µÏñ¸ü¸Ä£¬Docker»á°Ñÿ¸ö²½µÄ½á¹û»º´æÆðÀ´£¬DockerÄܰÑ×îÉÏÒ»¸öÕýÈ·Ö¸Áî²úÉúµÄ¾µÏñÆô¶¯ÆðÀ´¡£

<code>EXPOSE</code>Ö¸Áî»áÈÃDockerÆô¶¯Ò»¸öÈÝÆ÷ʱ±©Â¶Ö¸¶¨µÄ¶Ë¿Ú£¬ÕýÈç֮ǰÎÒÃÇÆô¶¯Ê±ÄÇÑù£¬ÎÒÃÇÐèÒª¸æËßDockerÄĸöÎïÀí¶Ë¿Ú»á±»Ó³Éäµ½ÈÝÆ÷ÉÏ(<code>-p</code>²ÎÊý)£¬<code>EXPOSE</code>µÄ×÷ÓþÍÊÇÕâ¸ö¶¨ÒåDockerÈÝÆ÷¶Ë¿Ú¡£×îºóDockerfileʹÓÃcatalina.sh½Å±¾Æô¶¯Tomcat¡£

>>>¼òµ¥»Ø¹Ë

ÓÃDockerfile´ÓÍ·¿ªÊ¼¹¹½¨TomcatÊÇÒ»¸öÂþ³¤µÄ¹ý³Ì£¬ÎÒÃÇ×ܽáÒ»ÏÂĿǰΪֹµÄ²½Ö裺

1. °²×°Debian Linux¡£

2. °²×°curlºÍwget¡£

3. °²×°Ô´Âë¹ÜÀí¹¤¾ß¡£

4. ÏÂÔØ²¢°²×°Java¡£

5. ÏÂÔØ²¢°²×°Tomcat¡£

6. ±©Â¶DockerʵÀýµÄ8080¶Ë¿Ú¡£

7. ÓÃcatalina.shÆô¶¯Tomcat¡£

ÏÖÔÚÄãÓ¦¸Ã³ÉΪһ¸öDockerfileר¼ÒÁË£¬ÏÂÒ»²½ÎÒÃǽ«³¢ÊÔ¹¹½¨Ò»¸ö×Ô¶¨ÒåDocker¾µÏñ¡£

>>>²¿Êð×Ô¶¨ÒåÓ¦Óõ½Docker

ÒòΪ±¾ÆªÖ¸ÄÏÖ÷Òª¹Ø×¢µãÊÇÈçºÎÔÚDockerÖв¿ÊðJavaÓ¦Ó㬶ø²»ÊÇÓ¦Óñ¾Éí£¬Îһṹ½¨Ò»¸ö¼òµ¥µÄHello World servlet¡£Äã¿ÉÒÔ´Ó[GitHub]»ñÈ¡µ½Õâ¸öÏîÄ¿£¬Ô´Âë²¢ÎÞÈκÎÌØ±ð£¬Ö»ÊÇÒ»¸öÊä³ö"Hello World!"µÄservlet¡£¸ü¼ÓÓÐȤµÄÊÇÏàÓ¦µÄ[Dockerfile]£¬ÈçÇåµ¥7Ëùʾ¡£

´úÂëÇåµ¥ 7. Hello World servletµÄDockerfile

```sh
FROM tomcat
ADD deploy /usr/local/tomcat/webapps
```

¿ÉÄÜ¿´ÆðÀ´²»´óÒ»Ñù£¬µ«ÄãÓ¦¸ÃÄÜÀí½âÒÔÉÏ´úÂëµÄ×÷ÓÃÊÇ£º

* <code>FROM tomcat</code>Ö¸Ã÷Õâ¸öDockerfileÊÇ»ùÓÚTomcat¾µÏñ¹¹½¨¡£

* <code>ADD deploy </code>¸æËßDocker°Ñ±¾µØÎļþϵͳÖеÄ"deploy"Ŀ¼£¬¸´ÖƵ½Tomcat¾µÏñÖÐµÄ /usr/local/tomcat/webapps·¾¶ ¡£

ÔÚ±¾µØÊ¹ÓÃmavenÃüÁî±àÒëÕâ¸öÏîÄ¿£º

```sh
mvn clean install
```

ÕâÑù½«»áÉú³ÉÒ»¸öwar°ü£¬target/helloworld.war£¬°ÑÕâ¸öÎļþ¸´ÖƵ½ÏîÄ¿µÄdocker/deployĿ¼(ÄãÐèÒªÏÈ´´½¨ºÃ)£¬×îºóÄãҪʹÓÃÉϱߵÄDockerfile¹¹½¨Docker¾µÏñ£¬ÔÚÏîÄ¿µÄdockerĿ¼ÖÐÖ´ÐÐÒÔÏÂÃüÁ

```sh
docker build -t lygado/docker-tomcat .
```

Õâ¸öÃüÁîÈÃDocker´Óµ±Ç°Ä¿Â¼£¨ÓõãºÅ.±íʾ£©¹¹½¨Ò»¸öеľµÏñ£¬²¢ÓÃ"<code>-t</code>"´òÉϱêÇ©<code>lygado/docker-tomcat</code>£¬Õâ¸öÀý×ÓÖУ¬lygadoÊÇÎÒµÄDockerHubÓû§Ãû£¬docker-imageÊǾµÏñÃû³Æ(ÄãÐèÒªÌæ»»³ÉÄã×Ô¼ºµÄÓû§Ãû)¡£²é¿´ÊÇ·ñ¹¹½¨³É¹¦Äã¿ÉÒÔÖ´ÐÐÒÔÏÂÃüÁ

```sh
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
lygado/docker-tomcat latest ccb455fabad9 42 seconds ago 849.5 MB
```

×îºó£¬Äã¿ÉÒÔÓÃÒÔÏÂÃüÁî¼ÓÔØÕâ¸ö¾µÏñ£º

```sh
docker run -d -p 8080:8080 lygado/docker-tomcat
```

Õâ¸öʵÀýÆô¶¯Ö®ºó £¬Äã¿ÉÒÔÓÃÒÔÏÂURL·ÃÎÊ£¨Çë°ÑURLÖеÄIPÌæ»»³ÉÄãÐéÄâ»úµÄIP£©£º

```sh
http://192.168.99.100:8080/helloworld/hello
```

»¹ÊÇÄÇÑù£¬Äã¿ÉÒÔÓÃÈÝÆ÷µÄIDÀ´ÖÕÖ¹Õâ¸öʵÀý¡£

Docker push

Ò»µ©Äã¹¹½¨²¢²âÊÔ¹ýÁËÄãµÄDocker¾µÏñ£¬Äã¿ÉÒÔ°ÑÕâ¸ö¾µÏñÍÆË͵½ÄãDockerHubµÄÕ˺ÅÖУº

```sh
docker push lygado/docker-tomcat
```

ÕâÑù£¬ÄãµÄ¾µÏñ¾ÍÄܱ»È«ÊÀ½ç·ÃÎʵ½ÁË£¬µ±È»£¬ÎªÁËÒþ˽Æð¼û£¬ÄãÒ²¿ÉÒÔÍÆË͵½Ë½ÓеÄDocker²Ö¿â¡£

ÏÂÃæ£¬ÎÒÃǽ«°ÑDocker¼¯³Éµ½Ó¦ÓõĹ¹½¨¹ý³Ì£¬Ä¿±êÊÇÔÚ¹¹½¨Ó¦ÓÃÍê³Éºó£¬»á²ú³öÒ»¸ö°üº¬Ó¦ÓõÄDocker¾µÏñ¡£

>>>°ÑDocker¼¯³Éµ½Maven¹¹½¨¹ý³Ì

ÔÚǰ±ßµÄ²¿·Ö£¬ÎÒÃÇ´´½¨ÁËÒ»¸ö×Ô¶¨ÒåµÄDockerfile£¬²¢°ÑWAR°ü²¿Êðµ½ËüÀï±ß¡£ÕâÑùÒâζ×ŰÑWAR°ü´ÓÏîÄ¿µÄtargetĿ¼£¬¸´ÖƵ½<code>docker/deploy</code>Ŀ¼Ï£¬²¢ÇÒ´ÓÃüÁîÐÐÖÐÔËÐÐdocker¡£ÕⲢû»¨¶àÉÙ¹¦·ò£¬µ«Èç¹ûÄãÐèҪƵ·±µÄ¸Ä¶¯²¢²âÊÔ´úÂ룬Äã»á·¢ÏÖÕâ¸ö¹ý³ÌºÜ·³Ëö¡£¶øÇÒ£¬Èç¹ûÄãÐèÒªÔÚÒ»¸öCI·þÎñÆ÷ÉϹ¹½¨Ó¦Ó㬲¢²ú³öÒ»¸öDocker¾µÏñ£¬ÄÇÄãÐèҪŪÃ÷°×ÔõÑù°ÑDockerºÍCI¹¤¾ßÕûºÏÆðÀ´¡£

ÏÖÔÚÎÒÃdz¢ÊÔÒ»ÖÖ¸üÓÐЧµÄ·½·¨£¬Ê¹ÓÃMavenºÍMaven Docker²å¼þÀ´¹¹½¨Ò»¸öDocker¾µÏñ¡£

ÎÒµÄÓÃÀýÓÐÕâЩ£º

1. ÄÜ´´½¨»ùÓÚTomcatµÄDocker¾µÏñ£¬ÒÔÓÃÓÚ²¿ÊðÎÒµÄÓ¦Óá£

2. ÄÜÔÚ²âÊÔÖÐ×ÔÐй¹½¨¡£

3. ÄÜÕûºÏµ½Ç°ÆÚ¼¯³É²âÊԺͺóÆÚ¼¯³É²âÊÔ¡£

docker-maven-pluginÄÜÂú×ãÕâЩÐèÇ󣬶øÇÒÒ×ÓÚʹÓúÍÀí½â¡£

¹ØÓÚ Maven Docker²å¼þ

Õâ¸ö²å¼þ±¾ÉíÓÐÁ¼ºÃµÄ[Îĵµ]£¬ÕâÀïÌØ±ð˵Ã÷Ò»ÏÂÁ½¸öÖ÷ÒªµÄ×é¼þ£º

1. ÔÚPOM.xmlÖÐÅäÖÃDocker¾µÏñµÄ¹¹½¨ºÍÔËÐС£

2. ÃèÊöÄÄЩÎļþÒª°üº¬ÔÚ¾µÏñÖС£

Çåµ¥8ÊÇPOM.xmlÖвå¼þµÄÅäÖ㬶¨ÒåÁ˾µÏñµÄ¹¹½¨ºÍÔËÐеÄÅäÖá£

´úÂëÇåµ¥ 8. POM ÎļþµÄ build С½Ú£¬ Docker Maven plug-in ÅäÖÃ

```xml
<build>
<finalName>helloworld</finalName>
<plugins>
<plugin>
<groupId>org.jolokia</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.13.4</version>
<configuration>
<dockerHost>tcp://192.168.99.100:2376</dockerHost> <certPath>/Users/shaines/.docker/machine/machines/default</certPath>
<useColor>true</useColor>
<images>
<image>
<name>lygado/tomcat-with-my-app:0.1</name>
<alias>tomcat</alias>
<build>
<from>tomcat</from>
<assembly>
<mode>dir</mode
<basedir>/usr/local/tomcat/webapps</basedir
<descriptor>assembly.xml</descriptor>
</assembly>
</build>
<run>
<ports>
<port>8080:8080</port>
</ports>
</run>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
```

ÕýÈçÄãËù¼û£¬Õâ¸öÅäÖÃÏ൱¼òµ¥£¬°üº¬ÁËÒÔÏÂÔªËØ£º

Plug-in¶¨Òå

<code>groupId</code>, <code>artifactId</code> ºÍ <code>version</code> ÕâЩÐÅÏ¢Ö¸¶¨ÒªÓÃÄĸö²å¼þ¡£

È«¾ÖÉèÖÃ

<code>dockerHost</code>ºÍ<code>certPath</code>ÔªËØ£¬¶¨ÒåÁËDockerÖ÷»úµÄλÖã¬ÕâЩÅäÖûáÓÃÓÚÆô¶¯ÈÝÆ÷£¬ÒÔ¼°Ö¸¶¨DockerÖ¤Êé¡£DockerÖ¤ÊéµÄ·¾¶ÔÚ<code>DOCKER_CERT_PATH</code>»·¾³±äÁ¿ÖÐÄÜ¿´µ½¡£

¾µÏñÉèÖÃ

ÔÚ<code>build</code>ÔªËØÏµÄËùÓÐ<code>image</code>ÔªËØ¶¼¶¨ÒåÔÚ<code>images</code>ÔªËØÏ£¬Ã¿¸ö<code>image</code>ÔªËØ¶¼ÓоµÏñÏà¹ØµÄÅäÖã¬Óë<code>build</code>ºÍ<code>run</code>µÄÅäÖÃÒ»Ñù£¬Ö÷ÒªµÄÅäÖÃÊǾµÏñµÄÃû³Æ£¬ÔÚÕâ¸öÀý×ÓÖУ¬ÊÇÎÒµÄDockerHubÓû§Ãû(<code>lygado</code>)£¬¾µÏñµÄÃû³Æ(<code>tomcat-with-my-app</code>)ºÍ¾µÏñµÄ°æ±¾ºÅ(0.1)¡£ÄãÒ²¿ÉÒÔÓÃMavenµÄÊôÐÔÀ´¶¨ÒåÕâЩֵ¡£

¾µÏñ¹¹½¨ÅäÖÃ

Ò»°ã¹¹½¨¾µÏñʱ£¬ÎÒÃÇ»áʹÓÃ<code>docker build</code>ÃüÁÒÔ¼°Ò»¸öDockerfileÀ´¶¨Òå¹¹½¨¹ý³Ì¡£Maven Docker²å¼þÒ²ÔÊÐíÄãʹÓÃDockerfile£¬µ«ÔÚÀý×ÓÖУ¬ÎÒÃÇʹÓÃÒ»¸öÔËÐÐʱÉú³ÉÔÚÄÚ´æÖеÄDockerfileÀ´¹¹½¨¡£Òò´Ë£¬ÎÒÃÇÔÚ<code>from</code>ÔªËØÖж¨Ò常¼¶¾µÏñ£¬Õâ¸öÀý×ÓÖÐÊÇtomcat£¬È»ºóÔÚ<code>assembly</code>ÖÐ×÷ÆäËûÅäÖá£

ʹÓÃMavenµÄ<code>maven-assembly-plugin</code>£¬¿ÉÒÔ¶¨ÒåÒ»¸öÏîÄ¿µÄÊä³öÄÚÈÝ£¬Ö¸¶¨°üº¬ÒÀÀµ£¬Ä£¿é£¬Îĵµ£¬»òÆäËûÎļþµ½Ò»¸ö¶ÀÁ¢·Ö·¢µÄ°üÖС£<code>docker-maven-plugin</code>¼Ì³ÐÁËÕâ¸ö±ê×¼£¬ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇÑ¡ÔñÁË<code>dir</code>ģʽ£¬Ò²¾ÍÊÇ˵¶¨ÒåÔÚ<code>src/main/docker/assembly.xml</code>ÖеÄÎļþ»á±»¿½±´µ½Docker¾µÏñÖеÄbasedirÖС£ÆäËûģʽ»¹ÓÐ<code>tar</code>£¬<code>tgz</code>ºÍ<code>zip</code>¡£<code>basedir</code>ÔªËØÖж¨ÒåÁË·ÅÖÃÎļþµÄ·¾¶£¬Õâ¸öÀý×ÓÖÐÊÇTomcatµÄwebappsĿ¼¡£

×îºó£¬<code>descriptor</code>ÔªËØÖ¸¶¨ÁË<code>assembly</code>Îļþ£¬Õâ¸öÎļþλÓÚ<code>basedir</code>Öж¨ÒåµÄ<code>src/main/docker</code>ÖС£ÒÔÉÏÊÇÒ»¸öºÜ¼òµ¥µÄÀý×Ó£¬ÎÒ½¨ÒéÄãͨ¶ÁÒ»ÏÂÏà¹ØÎĵµ£¬ÌØ±ðµØ£¬¿ÉÒÔÁ˽â<code>entrypoint</code>ºÍ<code>cmd</code>ÔªËØ£¬ÕâÁ½¸öÔªËØ¿ÉÒÔÖ¸¶¨Æô¶¯Docker¾µÏñµÄÃüÁ<code>env</code>ÔªËØ¿ÉÒÔÖ¸¶¨»·¾³±äÁ¿£¬<code>runCmds</code>ÔªËØÀàËÆDockerfileÖеÄ<code>RUN</code>Ö¸Á<code>workdir</code>ÔªËØ¿ÉÒÔÖ¸¶¨¹¤×÷·¾¶£¬<code>volumes</code>ÔªËØ¿ÉÒÔÖ¸¶¨Òª¹ÒÔØµÄ´ÅÅÌ¾í¡£¼òÑÔÖ®£¬Õâ¸ö²å¼þʵÏÖÁËËùÓÐDockerfileÖÐËùÐèÒªµÄÓï·¨£¬ËùÒÔÇ°ÃæËùÓõ½µÄDockerfileÖ¸Áî¶¼¿ÉÒÔÔÚÕâ¸ö²å¼þÖÐʹÓá£

¾µÏñÔËÐÐÅäÖÃ

Æô¶¯Docker¾µÏñʱ»áÓõ½<code>docker run</code>ÃüÁÄã¿ÉÒÔ´«Ò»Ð©²ÎÊý¸øDocker¡£Õâ¸öÀý×ÓÖУ¬ÎÒÃÇÒªÓÃ<code>docker run -d -p 8080:8080 lygado/tomcat-with-my-app:0.1</code>Õâ¸öÃüÁîÆô¶¯¾µÏñ£¬ËùÒÔÎÒÃÇÖ»ÐèÒªÖ¸¶¨Ò»Ï¶˿ÚÓ³Éä¡£

runÔªËØ¿ÉÒÔÈÃÎÒÃÇÖ¸¶¨ËùÓÐÔËÐÐʱ²ÎÊý£¬ËùÒÔÎÒÃÇÖ¸¶¨Á˰ÑDockerÈÝÆ÷ÖеÄ8080Ó³Éäµ½DockerËÞÖ÷»úµÄ8080¡£ÁíÍ⣬»¹¿ÉÒÔÔÚrunÕâ½ÚÖÐÖ¸¶¨Òª¹ÒÔØµÄ¾í(ʹÓÃ<code>volumes</code>)£¬»òÕßÒªÁ´½ÓÆðÀ´µÄÈÝÆ÷(ʹÓÃ<code>links</code>)¡£<code>docker:start</code>ÔÚ¼¯³É²âÊÔÖкܳ£Óã¬ÔÚrunС½ÚÖУ¬ÎÒÃÇ¿ÉÒÔʹÓÃwait²ÎÊýÀ´Ö¸¶¨Ò»¸öʱ¼äÖÜÆÚ£¬ÕâÑù¾Í¿ÉÒԵȴýµ½Ä³¸öÈÕÖ¾Êä³ö£¬»òÕßÒ»¸öURL¿ÉÓÃʱ£¬²Å¼ÌÐøÖ´ÐÐÏÂÈ¥£¬ÕâÑù¾Í¿ÉÒÔ±£Ö¤ÔÚ¼¯³É²âÊÔ¿ªÊ¼Ç°¾µÏñÒѾ­ÔËÐÐÆðÀ´ÁË¡£

¼ÓÔØÒÀÀµ

<code>src/main/docker/assembly.xml</code>Îļþ¶¨ÒåÁËÄÄЩÎļþÐèÒª¸´ÖƵ½Docker¾µÏñÖУ¬ÈçÇåµ¥9Ëùʾ£º
Çåµ¥ 9. assembly.xml

```xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin /assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<dependencySets>
<dependencySet>
<includes>
<include>com.geekcap.vmturbo:hello-world-servlet-example</include>
</includes>
<outputDirectory>.</outputDirectory>
<outputFileNameMapping>helloworld.war</outputFileNameMapping>
</dependencySet>
</dependencySets>
</assembly>
```

ÔÚÇåµ¥ 9 ÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½°üº¬<code>hello-world-servlet-example</code>ÔÚÄÚµÄÒ»¸öÒÀÀµ¼¯ºÏ£¬ÒÔ¼°¸´ÖƵÄÄ¿±ê·¾¶£¬<code>outputDirectory</code>Õâ¸ö·¾¶ÊÇÏà¶ÔÓÚÇ°ÃæÌáµ½µÄ<code>basedir</code>µÄ£¬Ò²¾ÍÊÇTomcatµÄwebappsĿ¼¡£

Õâ¸ö²å¼þÓÐÒÔϼ¸¸öMaven targets£º

1. docker:build: ¹¹½¨¾µÏñ

2. docker:start: Æô¶¯¾µÏñ

3. docker:stop: Í£Ö¹¾µÏñ

4. docker:push: °Ñ¾µÏñÍÆË͵½¾µÏñ²Ö¿â£¬ÈçDockerHub

5. docker:remove: ±¾µØÉ¾³ý¾µÏñ

6. docker:logs: Êä³öÈÝÆ÷ÈÕÖ¾

¹¹½¨¾µÏñ

Äã¿ÉÒÔ´Ó[GitHub]ÖлñȡԴÂ룬ȻºóÓÃϱߵÄÃüÁî¹¹½¨£º

```sh
mvn clean install
```

ÓÃÒÔÏÂÃüÁî¹¹½¨Docker¾µÏñ£º

```sh
mvn clean package docker:build
```

Ò»µ©¾µÏñ¹¹½¨³É¹¦£¬Äã¿ÉÒÔÔÚ<code>docker images</code>µÄ·µ»Ø½á¹ûÖп´µ½£º

```sh
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
lygado/tomcat-with-my-app 0.1 1d49e6924d19 16 minutes ago 347.7 MB
```

¿ÉÒÔÓÃÒÔÏÂÃüÁîÆô¶¯¾µÏñ£º

```sh
mvn docker:start
```

ÏÖÔÚ¿ÉÒÔÔÚ<code>docker ps</code>Öп´µ½ÒѾ­Æô¶¯ÁË£¬È»ºó¿ÉÒÔͨ¹ýÒÔÏÂURL·ÃÎÊ£º

```sh
http://192.168.99.100:8080/helloworld/hello
```

×îºó£¬¿ÉÒÔÓÃÒÔÏÂÃüÁîÍ£Ö¹ÈÝÆ÷£º

```sh
mvn docker:stop
```

>>>×ܽá

DockerÊÇÒ»ÖÖʹ½ø³ÌÐéÄ⻯µÄÈÝÆ÷¼¼Êõ£¬ËüÌṩÁËһϵÁÐDocker¿Í»§¶ËÃüÁîÀ´µ÷ÓÃDockerÊØ»¤½ø³Ì¡£ÔÚLinuxÉÏ£¬DockerÊØ»¤½ø³Ì¿ÉÒÔÖ±½ÓÔËÐÐÓÚLinux²Ù×÷ϵͳ£¬µ«ÊÇÔÚWindowsºÍMacÉÏ£¬ÐèÒªÓÐÒ»¸öLinuxÐéÄâ»úÀ´ÔËÐÐDockerÊØ»¤½ø³Ì¡£Docker¾µÏñ°üº¬ÁËÒ»¸öÇáÁ¿¼¶µÄ²Ù×÷ϵͳ£¬»¹¶îÍâ°üº¬ÁËÓ¦ÓÃÔËÐеÄÒÀÀµ¿â¡£Docker¾µÏñÓÉDockerfile¶¨Ò壬¿ÉÒÔÔÚDockerfileÖаüº¬Ò»ÏµÁÐÅäÖþµÏñµÄÖ¸Áî¡£

ÔÚÕâ¸ö¿ªÔ´JavaÏîĿָÄÏÖУ¬ÎÒ½éÉÜÁËDockerµÄ»ù´¡£¬½²½âÁËCentOS¡¢Java¡¢TomcatµÈ¾µÏñµÄDockerfileϸ½Ú£¬²¢ÑÝʾÁËÈçºÎÓÃTomcat¾µÏñÀ´¹¹½¨ÐµľµÏñ¡£×îºó£¬ÎÒÃÇʹÓÃdocker-maven-pluginÀ´°ÑDocker¼¯³Éµ½MavenµÄ¹¹½¨¹ý³ÌÖС£Í¨¹ýÕâÑù£¬Ê¹µÃ²âÊÔ¸ü¼Ó¼òµ¥ÁË£¬»¹¿ÉÒ԰ѹ¹½¨¹ý³ÌÅäÖÃÔÚCI·þÎñÆ÷Éϲ¿Êðµ½Éú²ú»·¾³¡£

±¾ÎÄÖеÄʾÀýÓ¦Ó÷dz£¼òµ¥£¬µ«ÊÇÉæ¼°µÄ¹¹½¨²½ÖèͬÑù¿ÉÒÔÓÃÔÚ¸ü¸´ÔӵįóÒµ¼¶Ó¦ÓÃÖС£ºÃºÃÏíÊÜDocker´ø¸øÎÒÃǵÄÀÖȤ°É¡£

   
2202 ´Îä¯ÀÀ       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Åàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ