本文主要介绍如何利用Docker来运行一个Web应用程序。因为博主是以Java为主,所以来讲一讲我们最熟悉的SpringMVC应用程序是如何在Docker中跑起来的。首先要检查一下我们需要的东西:
这三大件就是我们整个应用能启动成功运行的基础。
安装环境 我们需要为这个应用建立一个镜像,首先创建一个目录用于存放Dockerfile以及Tomcat和JDK等环境。
1 $ sudo mkdir centos_tomcat
进入centos_tomcat
目录,下载我们必须的一些环境(Docker的安装就不演示了,默认看这篇文章的你已经安装好了Docker~):
1 2 3 4 5 6 7 $ cd centos_tomcat $ wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.23/bin/apache-tomcat-8.5.23.tar.gz $ wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz $ tar -zxvf apache-tomcat-8.5.23.tar.gz $ tar -zxvf jdk-8u144-linux-x64.tar.gz $ ls apache-tomcat-8.5.23 jdk1.8.0_144
好了,目前这两个环境已经准备好了,我们现在需要准备一下Dockerfile和启动脚本。
编写启动脚本 将启动脚本的命名定为run.sh
,(貌似大家都在用这个名字,如果你觉得不对,可以随便改哈~),脚本如下:
1 2 3 #!/bin/bash /usr/sbin/sshd -D & exec ${CATALINA_HOME} /bin/catalina.sh run
注意到上面脚本中第一行为/usr/sbin/sshd -D &
,这是因为我们将需要这个容器提供SSH连接服务,也就是说,我们会继承上一篇博客实现的SSH镜像。这里的&
符号表示以后台服务启动。
编写Dockerfile 关于SpringMVC项目如何的创建以及打包不在本文的讨论范围之内,如果你不明白的话可以查找相关的文章参考一下。我们已经创建好了一个应用叫SpringDocker
,使用Maven进行构建,打成了一个war包。
我们的基础镜像是sshd_centos
,脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 FROM sshd_centos MAINTAINER qinjiangbo<[email protected] > ENV CATALINA_HOME /tomcat ENV JAVA_HOME /jdk ADD apache-tomcat-8.5.23 /tomcat ADD jdk1.8.0_144 /jdk ADD SpringDocker.war /tomcat/webapps ADD run.sh /usr/local /sbin/run.sh RUN chmod 755 /usr/local /sbin/run.sh RUN chmod 755 /tomcat/bin/*.sh EXPOSE 8080 CMD ["/usr/local/sbin/run.sh" ]
脚本写好了以后需要执行构建命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 $ docker build -t tomcat_centos . Sending build context to Docker daemon 396.5MB Step 1/12 : FROM sshd_centos ---> f0560ea85754 Step 2/12 : MAINTAINER qinjiangbo<[email protected] > ---> Running in 3d71c2c9cf98 ---> f0460a80934d Removing intermediate container 3d71c2c9cf98 Step 3/12 : ENV CATALINA_HOME /tomcat ---> Running in f5c8cd1f054d ---> 39e81d6b6091 Removing intermediate container f5c8cd1f054d Step 4/12 : ENV JAVA_HOME /jdk ---> Running in 4b4b8e85e787 ---> 5573f336885e Removing intermediate container 4b4b8e85e787 Step 5/12 : ADD apache-tomcat-8.5.23 /tomcat ---> fb62c6291978 Step 6/12 : ADD jdk1.8.0_144 /jdk ---> 19b628cc8a47 Step 7/12 : ADD SpringDocker.war /tomcat/webapps ---> e635cb335ec9 Step 8/12 : ADD run.sh /usr/local /sbin/run.sh ---> 632faa035eea Step 9/12 : RUN chmod 755 /usr/local /sbin/run.sh ---> Running in ce1d588035eb ---> bf74faf09c94 Removing intermediate container ce1d588035eb Step 10/12 : RUN chmod 755 /tomcat/bin/*.sh ---> Running in e80f74764da3 ---> cc700674e693 Removing intermediate container e80f74764da3 Step 11/12 : EXPOSE 8080 ---> Running in 8f472a55cb02 ---> 954525411f30 Removing intermediate container 8f472a55cb02 Step 12/12 : CMD /usr/local /sbin/run.sh ---> Running in 81ed01144c89 ---> 6712f0870a5b Removing intermediate container 81ed01144c89 Successfully built 6712f0870a5b Successfully tagged tomcat_centos:latest
注意到构建命令的最后还有一个.
哈,表示当前目录,否则的话需要指定全路径的。使用docker images
来查看我们已有的镜像:
1 2 3 4 5 6 7 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat_centos latest 6712f0870a5b 29 seconds ago 615MB sshd_centos latest f0560ea85754 2 days ago 221MB nginx latest 1e5ab59102ce 4 days ago 108MB gitlab/gitlab-ce latest 453d64ae84c7 8 days ago 1.28GB centos latest 196e0ce0c9fb 4 weeks ago 197MB
可以看到镜像已经构建完成。接下来就是运行我们的SpringMVC应用。
运行应用 查看当前目录:
1 2 3 $ ls Dockerfile apache-tomcat-8.5.23 run.sh SpringDocker.war jdk1.8.0_144
启动容器来运行应用:
1 2 3 4 5 $ docker run -d -p 8080:8080 -p 22:22 tomcat_centos 203eafc6d2e0935ca77690a6decf1edc772281354f86295dd82028ca50c461a5 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 203eafc6d2e0 tomcat_centos "/usr/local/sbin/r..." 6 seconds ago Up 8 seconds 0.0.0.0:22->22/tcp, 0.0.0.0:8080->8080/tcp flamboyant_carson
输入http://localhost:8080/SpringDocker/
查看一下页面效果: 运行成功!