一个Java应用的容器化之旅
本节把一个简单的 Java Web应用 My Bank进行容器化。 Mybank是一个非常简单和
典型的 Java Web应用。
- 它包含了Java源代码、JSP文件、图片和CSS等静态资源文件。
- My Bank的项目结构是基于 Maven的要求布置的,通过 Maven可以编译和构建Mybank的部署包——WAR包。
- 和其他的应用程序一样, Mybank在开发过程中,它的所有源代码都被上传到了配置管理库进行版本控制。这里所用的配置管理服务器是 Github.
下面开始容器化这个应用。
(1)首先安装源代码工具Git
[root@bastion ~]# yum -y install git
(2)从Github上下载示例的Java应用源代码
[root@bastion ~]# git clone https://github.com/nichochen/mybank-demo-maven.git
(3)准备编译和构建环境。安装应用构建所需的Java开发工具包JDK及构建工具 Maven
[root@bastion ~]# yum -y install maven
(4)通过构建工具编译及构建应用。
[root@bastion ~]# cd mybank-demo-maven/
[root@bastion mybank-demo-maven]# mvn package
构建完毕后,将在 target目录下生成一个WAR包ROOT.war。
[root@bastion mybank-demo-maven]# ls target/
classes maven-status ROOT.war test-classes
maven-archiver ROOT surefire-reports
(5)选择满足应用运行要求的基础容器镜像,或者从基础的操作系统镜像开始安装和构建。为了方便,这里选择 Tomcat7的官方镜像 tomcat:7.0.70-jre7- alpine。一般推荐预先把镜像下载到本地,以方便本地调试。
[root@bastion mybank-demo-maven]# docker pull tomcat
[root@bastion mybank-demo-maven]# docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/tomcat latest 24207ccc9cce 4 days ago 692 MB
(6)编写 Dockerfile。这个例子中我们的逻辑比较简单,就是把构建好的应用部署包拷贝到发布目录。 Dockerfile 7示例如下。
[root@bastion mybank-demo-maven]# mkdir test
[root@bastion mybank-demo-maven]# cd test/
[root@bastion test]# cat Dockerfile
FROM tomcat:latest
ADD ../target/ROOT.war /usr/local/tomcat/webapps/mybank.war
(7)执行 Docker Build构建镜像。把镜像命名为 mybank- tomcat.。在没有指定镜像的tag的请求下,默认的标签为latest。
[root@bastion test]# docker build -t mybank-tomcat .
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
STEP 1: FROM tomcat:latest
STEP 2: ADD ../target/ROOT.war /usr/local/tomcat/webapps/mybank.war
STEP 3: COMMIT mybank-tomcat
5f45d5e7f3b39e7942e56042545731e02e0e9c6e69fd7776083217f1e1f2ebde
构建完毕后,可以看见刚才Docker Build生成的新镜像
[root@bastion test]# docker images | grep mybank-tomcat
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
localhost/mybank-tomcat latest 5f45d5e7f3b3 About a minute ago 693 MB
(8)测试镜像。通过 docker run命令测试新创建的镜像。这里通过参数-p8080:8080把容器的8080端口映射到主机的8080端口,以方便测试。
[root@bastion test]# docker run -it --rm -p 8080:8080 mybank-tomcat
容器启动完毕后,可以通过curl或浏览器测试应用是否工作正常。如果一起正常,通过浏览器访问 My Bank的主页就会看到一只可爱的小猪储蓄罐了。
[lab-user@bastion ~]$ curl http://bastion:8080/mybank/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or g/TR/html4/loose.dtd">
<html>
<head>
<title>欢迎</title>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="title">
```
<div style="float: left;margin-left:20px;">World Bank | 世界银行</div>
<div style="float: right;margin-right:20px;">服务器:
f3f4be7b33d6
/10.88.0.2</div>
</div>
<div class="main">
<img style="margin:50px;" src="images/small_bank.png"><br>
<div class="linkbox"><a href="offices.jsp">--服务网点--</a></div >
</div>
```
</body>
</html>
(9)推送镜像。测试通过后,下一步将把镜像发布到相应的镜像仓库中。先通过 docker tag创建指向目标镜像仓库的镜像名称,然后通过 docker push推送镜像至目标仓库。
docker tag XXX
docker push XXX