用docker 容器 端口映射安装Storm后,原有容器起不来了,是8080端口的原因么

9873人阅读
本文直接讲解如何在Docker容器中实战部署一个Web应用程序,关于Docker相关的概念和如何安装Docker请参考相关资料完成。
第一步:工具准备
演示如何在Docker容器中部署一个Java Web应用程序,需要准备的软件工具包括:jre,tomcat和webapp应用。另外,为了实现在容器启动时自动启动webapp,需要编写一个脚本工具完成该工作。
安装jre,请参考:
安装tomcat,请参考:
如何在tomcat中部署webapp,请参考:
jre1.8.0_31.tar.gz&& // 可以选择其他版本
apache-tomcat-6.0.35.tar.gz // 可以选择其他版本
MyWeb.war // 自己写一个web应用即可,才发现csdn不允许上传附件
start_tomcat.sh
第二步:制作镜像
通过编写Dockerfile的方式制作镜像。
需要在Dockerfile中完成如下几项工作:
(1)安装jre
(2)安装tomcat,并完成在tomcat中部署web应用的基本配置(为实现此功能:在制作镜像之前直接先完成tomcat的基础配置,然后直接拷贝到镜像中即可)。
(3)对外开发8080端口(具体的端口值可以根据实际Tomcat配置参数为准)。
$mkdir docker
$cd docker
$mkdir webapps
$cp jre1.8.0_31.tar.gz .
$tar xzvf jre1.8.0_31.tar.gz
$cp apache-tomcat-6.0.35.tar.gz
$tar xzvf apache-tomcat-6.0.35.tar.gz
$cp MyWeb.war ./webapps/
$vim apache-tomcat-6.0.35/conf/server.xml
编辑tomcat配置文件:server.xml,在&Host&节点中添加如下配置:&Context path=&myweb&docBase=&/webapps/MyWeb.war& reloadable=&false&workDir=&/tomcat_work&/&,配置片段如下所示:
&Host name=&localhost&& appBase=&webapps&
&&&&&unpackWARs=&true& autoDeploy=&true&
&&&&&xmlValidation=&false& xmlNamespaceAware=&false&&
& &!-- SingleSignOn valve, shareauthentication between web applications
&&&&&& Documentation at:/docs/config/valve.html --&
& &Valve className=&org.apache.catalina.authenticator.SingleSignOn&/&
& &!-- Access log processes all example.
&&&&&& Documentation at:/docs/config/valve.html --&
& &ValveclassName=&org.apache.catalina.valves.AccessLogValve&directory=&logs&&
&&&&&&&&prefix=&localhost_access_log.& suffix=&.txt&pattern=&common& resolveHosts=&false&/&
& &Contextpath=&/myweb&docBase=&/webapps/MyWeb.war&reloadable=&false&workDir=&/tomcat_work&/&
$vim start_tomcat.sh
#!/bin/bash
#&&&&&& Start tomcat with docker containerstart.&&
echo &Start Tomcat ...&
# Export java path
export PATH=$PATH:/usr/local/java/bin
# Display container ipaddress
# Start tomcat
bash /usr/local/tomcat/bin/catalina.sh run
注意:启动tomcat时必须通过$TOMCAT_HOME/bin/catalina.sh实现,不能使用$TOMCAT_HOME/bin/startup.sh启动,否则脚本执行后容器立刻就退出了。
编写Dockerfile
#Build java web app container image
/docker/ubuntu:14.04
MAINTAINER chenchanghui&&
#Make java and tomcat install directory
RUN mkdir /usr/local/java
RUN mkdir /usr/local/tomcat
#Copy jre and tomcat into image
ADD jre1.8.0_31 /usr/local/java/
ADD apache-tomcat-6.0.35 /usr/local/tomcat/
ADD start_tomcat.sh start_tomcat.sh
#Expose http port
EXPOSE 8080
$sudo docker build -t=”ubuntu/myweb:tomcat”.
Sendingbuild context to Docker daemon 270.6 MB
Sendingbuild context to Docker daemon
Step 0 :/docker/ubuntu:14.04
&---& b39b81afc8ca
Step 1 :MAINTAINER chenchanghui &&
&---& Running in cd9ba3324dae
&---& ab45c422bdf5
Removingintermediate container cd9ba3324dae
Step 2 :RUN mkdir /usr/local/java
&---& Running in f640de521691
Removingintermediate container f640de521691
Step 3 :RUN mkdir /usr/local/tomcat
&---& Running in de4a392ec89d
&---& 956ac99b8bec
Removingintermediate container de4a392ec89d
Step 4 :ADD jre1.8.0_31 /usr/local/java/
Removingintermediate container b69c147f28fe
Step 5 :ADD apache-tomcat-6.0.35 /usr/local/tomcat/
Removingintermediate container ca5c
Step 6 :ADD start_tomcat.sh start_tomcat.sh
&---& cf61f83dc0b0
Removingintermediate container 3f10c2a9e374
Step 7 :EXPOSE 8080
---&abea02c999a2
Removingintermediate container a3841acba123
Successfullybuilt abea02c999a2
第三部:启动容器
webapp通过数据卷挂在到容器中进行部署,不需要拷贝到镜像中。
$sudo docker run -t -i --name tomcat –v /home/$username/docker/webapps:/webapps/
ubuntu/myweb:tomcat /bin/bash/start_tomcat.sh
Start Tomcat ...
eth0&&&&&Link encap:Ethernet& HWaddr02:42:ac:11:00:0c&
&&&&&&&&&inet addr:172.17.0.12&Bcast:0.0.0.0& Mask:255.255.0.0
Feb 02, :42 PMorg.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Nativelibrary which allows optimal performance in production environments was notfound on the java.library.path:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Feb 02, :42 PMorg.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 onhttp-8080
Feb 02, :42 PMorg.apache.catalina.startup.Catalina load
INFO: Initialization processed in 788 ms
Feb 02, :42 PMorg.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Feb 02, :42 PM org.apache.catalina.core.StandardEnginestart
INFO: Starting Servlet Engine: ApacheTomcat/6.0.35
Feb 02, :42 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directorymanager
Feb 02, :42 PM org.apache.catalina.startup.HostConfigdeployDirectory
INFO: Deploying web application directorydocs
Feb 02, :42 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directoryROOT
Feb 02, :42 PM org.apache.catalina.startup.HostConfigdeployDirectory
INFO: Deploying web application directoryexamples
Feb 02, :43 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directoryhost-manager
Feb 02, :43 PM org.apache.coyote.http11.Http11Protocolstart
INFO: Starting Coyote HTTP/1.1 on http-8080
Feb 02, :43 PMorg.mon.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Feb 02, :43 PMorg.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/27& config=null
Feb 02, :43 PMorg.apache.catalina.startup.Catalina start
INFO: Server startup in 842 ms
如日志所示,Docker容器已经启动,并且其中安装的tomcat已经成功启动。
访问:,Everything is ok!
小技巧:启动容器时带参数-t -i和不带参数的区别:带参数-t -i时可以通过Ctrl+C停止容器运行,不带参数-t -i启动时,停止容器只能通过命令:$sudo docker stop $containerid实现。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:194853次
积分:2346
积分:2346
排名:第13156名
原创:72篇
转载:14篇
评论:26条
(1)(1)(13)(1)(2)(1)(3)(7)(1)(1)(4)(1)(5)(32)(1)(1)(1)(1)(3)(1)(2)(2)(1)966,690 一月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
腾讯万台规模的Docker应用实践
腾讯万台规模的Docker应用实践
日. 估计阅读时间:
欲知区块链、VR、TensorFlow等潮流技术和框架,请锁定
Author Contacted
相关厂商内容
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
通过个性化定制的新闻邮件、RSS Feeds和InfoQ业界邮件通知,保持您对感兴趣的社区内容的时刻关注。
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。如果在docker中部署tomcat,并且部署java应用程序 - 博客频道 - CSDN.NET
分类:docker
1、先说如何在docker中部署tomcat
& & 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7;
& & 第二步:创建Dockerfile,命令如:touch Dockerfile;
& & 第三步:编写Dockerfile,命令如:vim Dockerfile,完成以下命令编写:
& & & & & & & & & &&FROM ubuntu:14.04
& & & & & & & & & & MAINTAINER zhaichong &&
& & & & & & & & & & ENV REFRESHED_AT
& & & & & & & & & & RUN apt-get -yqq update
& & & & & & & & & & RUN apt-get -yqq install tomcat7 default-jdk
& & & & & & & & & & ENV CATALINA_HOME /usr/share/tomcat7
& & & & & & & & & & ENV CATALINA_BASE /var/lib/tomcat7
& & & & & & & & & & ENV CATALINA_PID &/var/run/tomcat7.pid
& & & & & & & & & & ENV CATALINA_SH & /usr/share/tomcat7/bin/catalina.sh
& & & & & & & & & & ENV CATALINA_TMPDIR /tmp/tomcat7-tomcat7-tmp
& & & & & & & & & & RUN mkdir -p $CATALINA_TMPDIR
& & & & & & & & & & VOLUME [&/var/lib/tomcat7/webapps/&]
& & & & & & & & & & EXPOSE
& & & & & & & & & & ENTRYPOINT [&/usr/share/tomcat7/bin/catalina.sh&, &run& ]
& & & & & & & & & & 说明:这里的EXPOSE要把程序中需要使用到的端口都要暴露出去。根据环境变量CATALINA_BASE可以知道VOLUME指定的目录就是tomcat部署war包的目录。
& & & 第四步:生成镜像,命令如:docker build -t &test/test_app . (注意这里有个英文的句号);注意,在这个过程中docker需要下载安装的jdk和tomcat程序所以比较忙,可以通过命令:docker image查看下,返回的数据中第一行有个REPOSITORY和TAG都是&none&的数据行,其中的VIRTUAL_SIZE是阶段性变大的,说明是在下载。
& & & 第五步:运行镜像生成容器,命令如:docker run &--name test_app -d -p
镜像id,如果不知道镜像id是多少就使用命令:docker images查看下,注意这里把EXPOSE出来的端口和宿主主机的端口绑定起来了,以后就可以使用宿主主机的IP地址和这个端口来访问docker容器中的tomcat以及其中的应用程序了。
& & & 第六步:测试:在浏览器地址栏敲:http://宿主主机ip:8080/,好了成功了。
& & & 可以使用命令:docker port 容器id 8080,这个命令查看容器的8080端口和宿主主机端口之间的映射关系,而已看出来现在容器的8080端口映射的是宿主主机的8080端口。
2、再说如何部署我们的应用程序到docker容器的tomcat里?
& & & 大家知道tomcat在容器中,如果要像在宿主主机上那样部署tomcat应用程序肯定是不行的。那么采用什么办法呢?
& & & 第一步:上一个问题中我们已经知道war包是部署在容器的位置是:/var/lib/tomcat7/webapps/,那么这个位置到底在什么地方?使用命令:docker inspect -f &{{.Volumes}}& 容器id,如果不知道容器id,则可以通过:docker ps的方式查看到所有运行的容器,也可以通过docker ps -a的方式查看所有容器,包括运行的和不运行的。
& & & 会得出以下的结果:
& & &&map[/var/lib/tomcat7/webapps:/var/lib/docker/vfs/dir/28d6ddd8aeeff402a843bd57d3b21fcd80eac7df02],在这个map的中括号里,冒号前边的是容器中的目录,冒号后边的对应的宿主主机中的目录,所以我们只需要把我们的war包拷贝到这个地方然后重启tomcat即可。
& & & 这里要注意,由于我们上边写的Dockerfile中默认容器启动时是会启动tomcat的,所以这里只需要重启容器就能让tomcat把我们的容器加载上,命令如:
& & & docker restart 容器id
3、如果要看成tomcat的日志呢?比如查看启动时的日志,则可以使用命令:
& & & &docker logs 容器id,如果要持续观察日志,则是:docker logs -f 容器id,这个时候日志是从头开时读的,如果日志很长会刷屏很久,如果只打算看最新的日志可以采用以下的方式:docker logs --tail 0 -f &容器id
& & & 注意,有的时候我们想在执行docker run命令的时候才指定映射的Volumes,则可以使用如下命令:
docker run --name gboat2_ca -d -p
--link db001:db_ca -v /home/webapp/ca:/var/lib/tomcat7/webapps/ 64de1445c34c,这里一定要注意的是最后的英文冒号前边是宿主主机的文件夹路径,冒号后边是容器中的路径。
achilles12345
排名:第4766名
(3)(12)(10)(1)(3)(14)(5)(1)(0)(13)(10)(4)(2)(5)(5)(1)(5)(3)(6)(0)(3)(4)(5)(7)(5)(1)(3)

我要回帖

更多关于 docker 容器 端口 的文章

 

随机推荐