博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

docker整合tomcat+nginx

Posted on 2020-02-16 10:18  sunnynic  阅读(634)  评论(0编辑  收藏  举报

说明:测试域名为nic1.com,在服务器/etc/hosts以及本地电脑hosts文件设置好解析。

1、拉取tomcat及nginx镜像

[root@Server1 ~]# docker pull tomcat:9.0.26

[root@Server1 ~]# docker pull nginx

2、运行临时容器

考虑到数据的持久化,需要把容器中相关目录挂载到本地盘,因此先临时运行容器,拷贝出所需目录。此处临时容器名称分别为tomcat-test及nginx-test

[root@Server1 ~]# docker run -d --name tomcat-test tomcat:9.0.26

[root@Server1 ~]# docker run -d --name nginx-test nginx 

[root@Server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47dba8844f41 nginx "nginx -g 'daemon of…" 9 hours ago Up 44 seconds 80/tcp nginx-test
4388ad13d9fb tomcat:9.0.26 "catalina.sh run" 2 days ago Up 2 days 8080/tcp tomcat-test

3、容器运行及数据持久化

tomcat持久化

实际生成环境当中,我们用的比较多的为tomcat配置文件、日志及webapps(用于存放war包)。因此需要进行持久化的目录为conf、logs、webapps。进入容器后默认所在路径为/usr/local/tomcat,且tomcat文件都在该目录下。

运行临时容器

[root@Server1 ~]# docker exec -it tomcat-test bash

root@4388ad13d9fb:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work

拷贝出临时容器中conf文件到本地/data/tomcat目录下

[root@Server1 ~]# docker cp tomcat-test:/usr/local/tomcat/conf /data/tomcat/conf

[root@Server1 ~]# ls /data/tomcat/conf/
Catalina catalina.policy catalina.properties context.xml jaspic-providers.xml jaspic-providers.xsd logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml

运行正式容器,对容器中的conf、logs、webapps目录进行持久化挂载

[root@Server1 ~]# docker run -d --name tomcat-server -p 8080:8080 -v /data/tomcat/conf:/usr/local/tomcat/conf -v /data/tomcat/logs:/usr/local/tomcat/logs -v /data/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9.0.26

[root@Server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98ba15bf63dc tomcat:9.0.26 "catalina.sh run" 10 hours ago Up 4 hours 0.0.0.0:8080->8080/tcp tomcat-server

通过服务器http://nic1.com:8080端口,测试可以正常访问。

 

nginx持久化

运行临时nginx容器

[root@Server1 ~]# docker run -d --name nginx-test nginx

[root@Server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47dba8844f41 nginx "nginx -g 'daemon of…" 10 hours ago Up 53 minutes 80/tcp nginx-test

进入该临时容器,默认所在路径为 /,  nginx配置文件位于 /etc/nginx,静态页位于 /usr/share/nginx/html,拷贝出这两个配置目录

[root@Server1 ~]# docker exec -it nginx-test bash
root@47dba8844f41:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@47dba8844f41:/# ls /etc/nginx/
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
root@47dba8844f41:/# ls /usr/share/nginx/html/
50x.html index.html

拷贝临时容器的配置文件到本地盘/data/nginx目录,拷贝临时容器的站点文件到本地盘的/data/www目录,并运行正式容器

[root@Server1 ~]# docker cp nginx-test:/etc/nginx /data/nginx
[root@Server1 ~]# docker cp nginx-test:/usr/share/nginx/html /data/www
[root@Server1 ~]# docker run -d -p 80:80 --name nginx-server -v /data/nginx:/etc/nginx -v /usr/local/nginx:/data/www nginx

通过http://nic1.com,测试可以正常访问到nginx默认页。

 

4、Nginx+Tomcat整合

通过nginx反代tomcat,避免通过ip+端口或者域名+端口的形式访问。

1)配置nginx虚拟主机。根据前面所示,容器中的配置目录挂载到本地的/data/nginx目录,因此到/data/nginx/conf.d目录,添加虚拟主机。

简要配置如下

[root@Server1 ~]# cd /data/nginx/conf.d/
[root@Server1 conf.d]# cat nic1.conf
server{
  listen 80;
  server_name nic1.com;

  location / {
    proxy_pass http://172.18.0.4:8080;
  }
}

说明此处反代的IP是172.18.0.4 tomcat容器的IP,此处不能反代127.0.0.1:8080,否则无法访问到tomcat容器,会报错nginx 502,容器的IP通过docker inspect tomcat-server|grep "IPAddress" 查看

[root@Server1 ~]# docker inspect tomcat-server|grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "172.18.0.4",
"IPAddress": "172.18.0.4",