本章实践的主要目标是开发一个简单的web应用,打包部署到Docker的tomcat容器中去; 并且使用Mavan的自动部署到Docker 完成简单的自动化部署,完成后实现镜像文件打包到hub.docker.com;
第一步:安装tomcat8 镜像;
查询一下tomcat8镜像文件:
docker search tomcat8
docker pull tomcat:8.0.51
来快速体验一下镜像的效果,执行命令:
docker run -it --rm -p 8888:8080 tomcat:8.0.51
–rm参数表示container结束时,Docker会自动清理其所产生的数据。
可以看到tomcat启动的日志全部打印在终端了,
因为我们用-p 8888:8080将容器的8080端口映射到当前电脑的8888端口,所以打开当前电脑的浏览器,输入:localhost:8888,可以看到熟悉的 Tomcat页面:
http://192.168.1.102:8888/
接下来我们开发一个最简单的spring mvc应用,然后部署到docker的tomcat容器中试试,创建maven工程:
通过mavean 建立简单的WEB项目;
现在我们把文件部署到tomcat上去,先建一个目录,例如我建了这个目录:/usr/docker/server/tomcat_1,然后把docker-0.0.1-SNAPSHOT.war 文件复制到这个目录下,再在控制台执行以下命令:
再在控制台执行以下命令:
docker run --name docker-tomcat -p 8888:8080 -d -v /usr/docker/server/tomcat:/usr/local/tomcat/webapps tomcat:8.0.51
这时候再打开浏览器,输入
http://192.168.1.102:8888/docker-0.0.1-SNAPSHOT
此时,我们今天测试tomcat部署的目的已经达到了,接下来再试试提交镜像,在容器中输入exit 退出容器,再执行”docker stop docker-tomcat”停止容器,然后执行以下命令把容器作为镜像保存在本地:
docker commit -a "dockertony1" -m "from tomcat 8.0.51,with a demo webapp" docker-tomcat dockertony1/docker-tomcat:0.0.1
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
执行完毕后,输入docker images,可以看到新增的镜像:
接下来我们试着把本地镜像提交到hub.docker.com去(前提是已经在这个网站上注册过),输入命令docker login,接下来按照提示输入用户名和密码,执行一下命令提交镜像:
docker push dockertony1/docker-tomcat:0.0.1
有点费时,需要等待:
在执行过程中, tag的名字斜线前面部分dockertony1 不是本人的用户名,会出现一下问题:
denied: requested access to the resource is denied : docker
在上传过程中可能会遇到"net/http: TLS handshake timeout":没办法,因为国外仓库速度较慢,则会报错“net/http: TLS handshake timeout”。
解决方式如下:
https://www.cnblogs.com/wozixiaoyao/p/6059780.html
但是我的网络一致不行;一般公司都会搭建自己的私有镜像仓库,后续会补上;
等上传成功后,再去hub.docker.com上看看吧,就可以在自己的仓库下面已经可以看到刚刚提交的镜像了:
使用maven插件自动部署web应用至Docker容器的tomcat
配置maven
在pom.xml加入
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat8-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://192.168.1.102:8888/manager/text</url> <server>tomcat</server> <username>deploy</username> <password>deploy</password> </configuration> </plugin> </plugins> </build>
在maven的settings.xml加入
<server> <id>tomcat</id> <username>deploy</username> <password>deploy</password> </server>
在tomcat-users.xml加入以下内容
<role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="deploy" password="deploy" roles="manager-gui, manager-script"/>
容器的文件是不能修改的,所以我才用虚拟卷的形式来修改tomcat文件;
docker run --name docker-tomcat -p 8888:8080 -d -v /usr/docker/server/tomcat:/usr/local/tomcat/webapps -v /usr/docker/server/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml tomcat:8.0.51 将web应用部署至容器里运行的tomcat
mvn tomcat7:deploy
可能会出现的问题:
在maven dploy :Cannot invoke Tomcat manager: Connection reset by peer:
这是因为tomcat 容器上了manager 项目,把这个加上去就行了
查看原文:http://www.dczou.com/viemall/795.html
Docker下的web开发和Tomcat部署
最新推荐文章于 2023-10-26 14:10:14 发布