Docker容器部署Tomcat线上商城
目录
docker容器部署Tomcat线上商城
创建存放目录、并将线上商城应用放在 shangcheng目录下
下载镜像
生成容器并复制配置文件server.xml
编辑
将配置文件server.xml复制到宿主机中
编辑
删除测试的容器
移动文件
mysql
编辑
注入数据
修改商城配置文件
编辑
创建tomcat容器
查看ip
访问成功
web访问
docker容器部署Tomcat线上商城
创建存放目录、并将线上商城应用放在 shangcheng目录下
[root@docker ~]# tree tomcat tomcat ├── conf.d ├── logs └── shangcheng 3 directories, 0 files
下载镜像
[root@docker ~]# docker pull tomcat:8
生成容器并复制配置文件server.xml
[root@docker ~]# docker run -itd --name tomcat --net bridge -v /root/tomcat/shangcheng/:/usr/local/tomcat/webapps/ tomcat:8 b48ca826ee8c659f31e03a082ab7de52db8c7d80434f4c7784a6de2644ac2c4e [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b48ca826ee8c tomcat:8 "catalina.sh run" 4 seconds ago Up 4 seconds 8080/tcp tomcat 88254911b6bc discuz-nginx "/docker-entrypoint.…" 2 days ago Up 2 days 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp nginx e9f96f110319 discuz-php "docker-php-entrypoi…" 2 days ago Up 2 days 9000/tcp php 06d04c907afb mysql:8.0 "docker-entrypoint.s…" 2 days ago Up 2 days 3306/tcp, 33060/tcp mysql [root@docker ~]# docker exec -it b4 bash root@b48ca826ee8c:/usr/local/tomcat# ls bin conf lib logs NOTICE RELEASE-NOTES temp webapps.dist BUILDING.txt CONTRIBUTING.md LICENSE native-jni-lib README.md RUNNING.txt webapps work root@b48ca826ee8c:/usr/local/tomcat# cd conf/ root@b48ca826ee8c:/usr/local/tomcat/conf# ls Catalina context.xml logging.properties tomcat-users.xsd catalina.policy jaspic-providers.xml server.xml web.xml catalina.properties jaspic-providers.xsd tomcat-users.xml root@b48ca826ee8c:/usr/local/tomcat/conf# cat server.xml
将配置文件server.xml复制到宿主机中
[root@docker ~]# tree tomcat/ tomcat/ ├── conf.d │ └── server.xml ├── logs └── shangcheng 3 directories, 1 file
删除测试的容器
[root@docker ~]# docker rm -f b4 b4
移动文件
将线上商城下的 .sql 文件 移动 到 之前mysql挂载的 目录里 ( /opt/discuz/mysql/data/ )
[root@docker ~]# cd tomcat/shangcheng/ROOT/ [root@docker ROOT]# ls 注意事项 biyesheji.sql favicon.ico images.zip js META-INF WEB-INF assets css images index.jsp lib static [root@docker ROOT]# mv biyesheji.sql /opt/discuz/mysql/data/
进入到mysql容器
mysql
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b48ca826ee8c tomcat:8 "catalina.sh run" 3 minutes ago Up 3 minutes 8080/tcp tomcat 88254911b6bc discuz-nginx "/docker-entrypoint.…" 2 days ago Up 2 days 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp nginx e9f96f110319 discuz-php "docker-php-entrypoi…" 2 days ago Up 2 days 9000/tcp php 06d04c907afb mysql:8.0 "docker-entrypoint.s…" 2 days ago Up 2 days 3306/tcp, 33060/tcp mysql [root@docker ~]# docker exec -it 06 bash bash-5.1# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 28 Server version: 8.0.43 MySQL Community Server - GPL Copyright (c) 2000, 2025, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database biyesheji; Query OK, 1 row affected (0.00 sec) mysql> create user 'tomcat'@'%' identified by '123.com'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on biyesheji.* to 'tomcat'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
注入数据
bash-5.1# mv /var/lib/mysql/biyesheji.sql ./ bash-5.1# ls afs boot entrypoint.sh lib mnt root srv usr bin dev etc lib64 opt run sys var biyesheji.sql docker-entrypoint-initdb.d home media proc sbin tmp bash-5.1# mysql -uroot -p'root_password' biyesheji < biyesheji.sql mysql: [Warning] Using a password on the command line interface can be insecure.
修改商城配置文件
(只需再宿主机上修改即可)
#在fore的前面加 / [root@docker ~]# cd tomcat/shangcheng/ROOT/ [root@docker ROOT]# ls 注意事项 biyesheji.sql favicon.ico images.zip js META-INF WEB-INF assets css images index.jsp lib static [root@docker ROOT]# vim index.jsp
#数据库的主机名和创建的用户名和密码 [root@docker tomcat]# cd shangcheng/ROOT/WEB-INF/classes/ [root@docker classes]# vim jdbc.properties
创建tomcat容器
注意:这里为什么要指定网络呢?因为必须跟数据库容器在同一个子网内才能通信,所以指定网络时先查看一下数据库容器的网络是哪一个!!!
[root@docker ~]# docker inspect 06
[root@docker ~]# docker run -itd --name tomcat --network discuz_discuz-network -p 8080:8080 -v /root/tomcat/shangcheng/:/usr/local/tomcat/webapps/ -v /root/tomcat/conf.d/server.xml:/usr/local/tomcat/conf/server.xml -v /root/tomcat/log/:/usr/local/tomcat/logs/ --restart=always tomcat:8 abf36428eeb8f50fd060aec049f919c8eed987984be4e29e554b6a80ee1d0905 # --name指定容器名,--network 指定网络名,-p指定端口映射,-v指定宿主机目录挂载到容器目录,--restart=always设置容器的重启策略。always: 如果容器因任何原因退出(即使是手动停止的),Docker 守护进程(服务)都会自动重启这个容器。每次宿主机重启后,Docker 服务启动时也会自动重启这个容器。这是确保关键服务持续运行最常用的策略。
查看ip
[root@docker ~]# docker inspect ab
与数据库同属一个子网
访问成功
[root@docker ~]# curl 172.18.0.5:8080/biyesheji/fore/foreIndex/ [root@docker ~]# curl 192.168.158.150:8080/biyesheji/fore/foreIndex/