学习Docker的个简***办法就是迅速在工作中应用它,本文作者使用Docker部署了一个Java EE应用,应用非常简单和方便。实践r示需要注意的个简是,由于作者写作时本地网络有问题,应用所以Dockerfile中很多的实践r示资源都没有从网络下载,你再实践时,个简可以尝试修改。学习快乐 :)
本文中,我们将会把Java EE和Docker结合,具体内容如下:
引言
在这里我不再介绍Docker,因为已经有太多的介绍性的文章。写本文之前,我阅读了如下教程:
前提条件
要完成本教程,你需要:
创建Docker镜像
Docker镜像展现/描述了容器本身。由于我的网络带宽有限(手机3G),在这里我使用本机资源创建了一个镜像。因此,这个镜像只有在包含如下文件的目录下构建才能使用:
注意:不推荐在Docker容器中使用本地资源,因为只有当所有文件都存在时镜像才可以正常构建。***的办法是从头安装所有东西并下载必要的文件。
这是Dockerfile的内容:
- FROM ubuntu
- MAINTAINER Rafael Pestano <rmpestano@gmail.com>
- setup WildFly
- COPY wildfly-8.2.0.Final /opt/wildfly
- install example app on wildfy
- COPY car-service.war /opt/wildfly/standalone/deployments/
- setup Java
- RUN mkdir /opt/java
- COPY jdk-8u25-linux-x64.tar.gz /opt/java/
- change dir to Java installation dir
- WORKDIR /opt/java/
- RUN tar -zxf jdk-8u25-linux-x64.tar.gz
- setup environment variables
- RUN update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_25/bin/javac 100
- RUN update-alternatives --install /usr/bin/java java /opt/java/jdk1.8.0_25/bin/java 100
- RUN update-alternatives --display java
- RUN java -version
- Expose the ports we're interested in
- EXPOSE 8080 9990
- Set the default command to run on boot
- This will boot WildFly in the standalone mode and bind to all interface
- CMD ["/opt/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0"]
镜像继承自Ubuntu——一个安装了Ubuntu操作系统的镜像。Docker安装教程中就安装了Ubuntu镜像。
接着,我们将服务器复制到容器的/opt/wildfly目录。COPY是Dockerfile的一个指令。我们可以在这里找到所有命令。
我们随后将应用的war包复制到服务器中:
- COPY car-service.war /opt/wildfly/standalone/deployments/。
然后,我们将Java解压安装到容器的/opt/java目录并设置一些环境变量。***的办法是使用apt-get,不过这要求有互联网接入,而我写作时不具备这个条件。我使用RUN命令来执行java -version,(如果Java正确安装的话)它将在镜像构建时打印版本号。
之后,我使用EXPOSE 8080 9990来告诉Docker容器要暴露的端口号。容器其实是镜像的实例,运行镜像(docker run)时,我们可以指定允许宿主访问的端口。
***,我们指定了默认命令:CMD ["/opt/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0"]。每次容器启动时都会运行这个命令。
构建镜像
在描述完镜像之后,我们需要构建它。在包含Dockerfile的父目录运行以下命令:
- docker -H tcp://127.0.0.1:2375 build -t javaee_sample java_ee/
上述命令的输出如下:
然后我们可以通过列出镜像命令(译者注:docker images命令)来确认刚创建的镜像:docker -H tcp://127.0.0.1:2375 images:
启动容器
使用这一命令启动容器:
- docker -H tcp://127.0.0.1:2375 run -p 8180:8080 javaee_sample
容器启动过程中会输出Wildfly启动日志,这是因为我们将其设置为初始命令(CMD Dockerfile命令):
运行多个容器
我们可以实例化多个容器,因为它们的端口在宿主上不会发生冲突。我将再启动两个容器并将8080端口分别暴露为8280和8380:
- docker -H tcp://127.0.0.1:2375 run -p 8280:8080 javaee_sample
- docker -H tcp://127.0.0.1:2375 run -p 8380:8080 javaee_sample
要列出启动的容器,我们可以使用命令:docker -H tcp://127.0.0.1:2375 ps,这是输出结果:
- rmpestano@rmpestano-ubuntu:~/docker /images$ docker -H tcp://127.0.0.1:2375 ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 7b9079806e69 javaee_sample:latest "/opt/wildfly/bin/st 27 seconds ago Up 27 seconds 9990/tcp, 0.0.0.0:8280->8080/tcp suspicious_lovelace
- d4975e825751 javaee_sample:latest "/opt/wildfly/bin/st 28 seconds ago Up 28 seconds 9990/tcp, 0.0.0.0:8380->8080/tcp loving_hopper
- 96e58eb65126 javaee_sample:latest "/opt/wildfly/bin/st 42 seconds ago Up 42 seconds 9990/tcp, 0.0.0.0:8180->8080/tcp clever_cori
现在我们可以在浏览器中同时访问这三个应用:
你可以通过容器的ID或名字来停止容器:
- docker -H tcp://127.0.0.1:2375 stop suspicious_lovelace
记住,在容器删除时所有数据将消失。请使用Docker卷来持久化数据。
原文链接:http://dockerone.com/article/146
责任编辑:Ophira 来源: dockerone Java EEDockerDocker部署(责任编辑:综合)
沃尔沃纯电 MPV 车型 EM90 官图曝光,11 月 12 日全球首发
前10月全国规模以上工业发电同比增长10.0% 水电同比下降11.9%
消息称苹果几年前就已放弃 Vision Pro 头显的全身追踪功能:因不够可靠
【JVM问题排查】JDK命令行工具详解,这四个工具你都会用吗?
东阿阿胶(000423.SZ)2020年度业绩扭亏为盈至4328.93万元 基本每股收益0.07元
换手机不建议选5000mAh大电池手机,原因主要有三个方面,懂的都懂