Board logo

标题: CentOS8_在Docker中安装Tomcat+MariaDB [打印本页]

作者: admin    时间: 2023-3-22 10:20     标题: CentOS8_在Docker中安装Tomcat+MariaDB

笺注:Docker的安装可参考 CentOS8_使用Docker安装Python3 查看Docker的版本信息: [root@centos8 ~]# docker -v Docker version 20.10.21, build baeda1f [root@centos8 ~]# [root@centos8 ~]# yum -y install net-tools [root@centos8 ~]# ifconfig docker0: flags=4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:54:d0:7c:2c txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens160: flags=4163 mtu 1500 inet 192.168.168.154 netmask 255.255.255.0 broadcast 192.168.168.255 inet6 fe80::92ab:5fb4:5373:ad53 prefixlen 64 scopeid 0x20 ether 00:0c:29:0e:fa:49 txqueuelen 1000 (Ethernet) RX packets 83976 bytes 125015836 (119.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 28748 bytes 1718121 (1.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos8 ~]# 给Docker创建自定义虚拟网卡,并且指定网段: [root@centos8 ~]# docker network create --subnet=192.168.80.0/24 zhuohua-docker d3552d02aa6da0ee577c754a8e3626b66e4ac8b67e78fa44997124beb1dc71fc [root@centos8 ~]# 备注:给Docker创建自定义虚拟网卡后,容器才能使用固定IP地址; 查看Docker所有的虚拟网卡: [root@centos8 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE ac02a5c5ce9c bridge bridge local ecf4d5fc9a71 host host local f3a83278f2d8 none null local d3552d02aa6d zhuohua-docker bridge local [root@centos8 ~]# 备注: 网卡ID“d3552d02aa6d”是自动生成的; 网卡名“zhuohua-docker”是自定义的; [root@centos8 ~]# ifconfig br-d3552d02aa6d: flags=4099 mtu 1500 inet 192.168.80.1 netmask 255.255.255.0 broadcast 192.168.80.255 ether 02:42:d4:e2:ca:1e txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 docker0: flags=4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:54:d0:7c:2c txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens160: flags=4163 mtu 1500 inet 192.168.168.154 netmask 255.255.255.0 broadcast 192.168.168.255 inet6 fe80::92ab:5fb4:5373:ad53 prefixlen 64 scopeid 0x20 ether 00:0c:29:0e:fa:49 txqueuelen 1000 (Ethernet) RX packets 84119 bytes 125026032 (119.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 28792 bytes 1723441 (1.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos8 ~]# ###### 从公网下载镜像:( 以下是下载Tomcat/8.5的镜像 ) [root@centos8 ~]# docker pull tomcat:8.5 查看宿主机的所有镜像: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat 8.5 37ce4f4ab859 4 days ago 474MB [root@centos8 ~]# 使用镜像“tomcat:8.5”创建并启动容器“Tomcat_1”: [root@centos8 ~]# docker run -itd --name Tomcat_1 -p 80:8080 -v /opt/share:/usr/local/tomcat/webapps --net zhuohua-docker --ip 192.168.80.2 tomcat:8.5 913a9d4f04c0dc83ea183a3ed10f24b6879e9b39e3e542265754733af368e6e5 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 80是宿主机的端口,暴露给外部直接访问;8080是容器的端口。 -v 挂载目录 : 这里是把宿主机的目录/opt/share挂载到容器的目录/usr/local/tomcat/webapps --net zhuohua-docker --ip : 指定容器的固定IP地址(使用虚拟网卡“zhuohua-docker”)。 tomcat:8.5 : 镜像名称:版本号 在宿主机查看正在运行的容器: [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 913a9d4f04c0 tomcat:8.5 "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:80->8080/tcp, :::80->8080/tcp Tomcat_1 [root@centos8 ~]# 注释:宿主机的TCP 80端口,映射到容器“Tomcat_1”的TCP 8080端口。 ### 进入容器“Tomcat_1”: [root@centos8 ~]# docker exec -it Tomcat_1 /bin/bash root@913a9d4f04c0:/usr/local/tomcat# root@913a9d4f04c0:/usr/local/tomcat# pwd /usr/local/tomcat root@913a9d4f04c0:/usr/local/tomcat# 查看容器“Tomcat_1”的系统版本信息: root@913a9d4f04c0:/usr/local/tomcat# cat /etc/issue Ubuntu 22.04.2 LTS \n \l root@913a9d4f04c0:/usr/local/tomcat# uname -a Linux 77fd019138fe 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux root@913a9d4f04c0:/usr/local/tomcat# 测试JDK: root@913a9d4f04c0:/usr/local/tomcat# cd root@913a9d4f04c0:~# root@913a9d4f04c0:~# java -version openjdk version "17.0.6" 2023-01-17 OpenJDK Runtime Environment Temurin-17.0.6+10 (build 17.0.6+10) OpenJDK 64-Bit Server VM Temurin-17.0.6+10 (build 17.0.6+10, mixed mode, sharing) root@913a9d4f04c0:~# Tomcat会自动启动: root@913a9d4f04c0:~# ps -ef |grep java |grep -v grep root 1 0 3 19:18 pts/0 00:00:16 /opt/java/openjdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root@913a9d4f04c0:~# Tomcat默认就是使用TCP 8080端口: root@913a9d4f04c0:~# cat /usr/local/tomcat/conf/server.xml |grep 8080 Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 8080" protocol="HTTP/1.1" port="8080" protocol="HTTP/1.1" root@913a9d4f04c0:~# Tomcat的默认首页文件: root@913a9d4f04c0:~# cat /usr/local/tomcat/conf/web.xml |grep index.* index.html index.htm index.jsp root@913a9d4f04c0:~# ### Docker宿主机的防火墙其实可以不用打开TCP 80端口: [root@centos8 ~]# firewall-cmd --zone=public --list-ports [root@centos8 ~]# ### 在客户端访问容器“Tomcat_1”的Tomcat的默认站点的默认首页文件: http://192.168.168.154/ 图片1.png 解决方法: root@913a9d4f04c0:/usr/local/tomcat# pwd /usr/local/tomcat root@913a9d4f04c0:/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@913a9d4f04c0:/usr/local/tomcat# ls webapps root@913a9d4f04c0:/usr/local/tomcat# root@913a9d4f04c0:/usr/local/tomcat# cp -rfp webapps.dist/* webapps root@913a9d4f04c0:/usr/local/tomcat# root@913a9d4f04c0:/usr/local/tomcat# ls webapps docs examples host-manager manager ROOT root@913a9d4f04c0:/usr/local/tomcat# ls webapps/ROOT/ asf-logo-wide.svg bg-middle.png bg-upper.png index.jsp tomcat.css WEB-INF bg-button.png bg-nav.png favicon.ico RELEASE-NOTES.txt tomcat.svg root@913a9d4f04c0:/usr/local/tomcat# ### 再次,在客户端访问容器“Tomcat_1”的Tomcat的默认站点的默认首页文件: 图片2.png 注释:容器“Tomcat_1”要打开TCP 8080端口。 ### 在宿主机上往容器“Tomcat_1”的Tomcat的默认站点里创建JSP测试页: [root@centos8 ~]# cd /opt/share/ [root@centos8 share]# ls docs examples host-manager manager ROOT [root@centos8 share]# cd ROOT/ [root@centos8 ROOT]# vi time.jsp 写入: <%@ page import="java.util.*"%> <%@ page import="java.sql.*"%> <%@ page contentType="text/html; charset=UTF-8" %> 中文测试页
现在时间: <%=new java.util.Date()%>
root@913a9d4f04c0:~# cat /usr/local/tomcat/webapps/ROOT/time.jsp <%@ page import="java.util.*"%> <%@ page import="java.sql.*"%> <%@ page contentType="text/html; charset=UTF-8" %> 中文测试页
现在时间: <%=new java.util.Date()%>
root@913a9d4f04c0:~# 注释:因为在创建容器“Tomcat_1”的时候,把宿主机的目录/opt/share挂载到容器的目录/usr/local/tomcat/webapps,所以这两个目录里的数据是双向同步的。 Windows客户端远程测试: http://192.168.168.154/time.jsp 图片3.png ###### 从公网下载镜像:( 以下是下载MariaDB10.4的镜像 ) [root@centos8 ~]# docker pull mariadb:10.4 查看宿主机的所有镜像: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat 8.5 37ce4f4ab859 4 days ago 474MB mariadb 10.4 81825cbadf42 4 days ago 385MB [root@centos8 ~]# 使用镜像“mariadb:10.4”创建并启动容器“MariaDB_1”: [root@centos8 ~]# docker run -itd --name MariaDB_1 -e MYSQL_ROOT_PASSWORD=P@ssw0rd --net zhuohua-docker --ip 192.168.80.3 mariadb:10.4 6c1c3a22d51af9672bc9d7eb48ad4b01a22626c51a3b4dc78b3c705a3bbe09c2 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -e 环境配置 : 指定数据库管理员root@localhost的密码为P@ssw0rd --net zhuohua-docker --ip : 指定容器的固定IP地址(使用虚拟网卡“zhuohua-docker”)。 mariadb:10.4 : 镜像名称:版本号 在宿主机查看所有的容器:(无论是否正在运行) [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c1c3a22d51a mariadb:10.4 "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 3306/tcp MariaDB_1 913a9d4f04c0 tomcat:8.5 "catalina.sh run" 25 minutes ago Up 25 minutes 0.0.0.0:80->8080/tcp, :::80->8080/tcp Tomcat_1 [root@centos8 ~]# 注释:容器“MariaDB_1”打开了TCP 3306端口。 ### 进入容器“MariaDB_1”: [root@centos8 ~]# docker exec -it MariaDB_1 /bin/bash root@6c1c3a22d51a:/# 查看容器“MariaDB_1”的系统版本信息: root@6c1c3a22d51a:/# cat /etc/issue Ubuntu 20.04.5 LTS \n \l root@6c1c3a22d51a:/# uname -r 4.18.0-193.el8.x86_64 root@6c1c3a22d51a:/# 查看MariaDB的版本信息: root@6c1c3a22d51a:/# mysql -V mysql Ver 15.1 Distrib 10.4.28-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 root@6c1c3a22d51a:/# MariaDB的主配置文件:(以下是初始状态) root@6c1c3a22d51a:/# find / -name "my.cnf" /etc/mysql/my.cnf find: ‘/proc/1/map_files’: Permission denied root@6c1c3a22d51a:/# root@6c1c3a22d51a:/# cat /etc/mysql/my.cnf |grep -v "^#" |grep -v "^$" [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc_messages_dir = /usr/share/mysql lc_messages = en_US skip-external-locking max_connections = 100 connect_timeout = 5 wait_timeout = 600 max_allowed_packet = 16M thread_cache_size = 128 sort_buffer_size = 4M bulk_insert_buffer_size = 16M tmp_table_size = 32M max_heap_table_size = 32M myisam_recover_options = BACKUP key_buffer_size = 128M table_open_cache = 400 myisam_sort_buffer_size = 512M concurrent_insert = 2 read_buffer_size = 2M read_rnd_buffer_size = 1M query_cache_limit = 128K query_cache_size = 64M slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 10 expire_logs_days = 10 max_binlog_size = 100M default_storage_engine = InnoDB innodb_buffer_pool_size = 256M innodb_log_buffer_size = 8M innodb_file_per_table = 1 innodb_open_files = 400 innodb_io_capacity = 400 innodb_flush_method = O_DIRECT [galera] [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !include /etc/mysql/mariadb.cnf !includedir /etc/mysql/conf.d/ root@6c1c3a22d51a:/# 本地登录MariaDB数据库:(使用的是数据库管理员root@localhost,密码P@ssw0rd) root@6c1c3a22d51a:/# mysql -uroot -p"P@ssw0rd" Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 Server version: 10.4.28-MariaDB-1:10.4.28+maria~ubu2004 mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> 查看数据库里有哪些库:(以下3个库是默认就有的) MariaDB [(none)]> Show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.001 sec) MariaDB [(none)]> 切换到库mysql: MariaDB [(none)]> Use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> 在MariaDB下查看当前使用的是哪个库: MariaDB [mysql]> Select database(); +------------+ | database() | +------------+ | mysql | +------------+ 1 row in set (0.000 sec) MariaDB [mysql]> 查看所有数据库用户及其主机信息:(显示当前库mysql中的表user里的字段“user”、“host”的所有数据) MariaDB [mysql]> Select user,host from user; +-------------+-----------+ | User | Host | +-------------+-----------+ | root | % | | mariadb.sys | localhost | | root | localhost | +-------------+-----------+ 3 rows in set (0.003 sec) MariaDB [mysql]> 创建一个数据库用户并授权: 授权数据库用户zhuohua@'192.168.80.2'(密码168),仅仅在使用IP地址192.168.80.2时可以进行访问,对所有的库有完全控制的权限: MariaDB [(none)]> Grant all on *.* to zhuohua@'192.168.80.2' identified by '168'; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> 显示库mysql中的表user里的所有数据: MariaDB [(none)]> Select user,host from mysql.user; +-------------+--------------+ | User | Host | +-------------+--------------+ | root | % | | zhuohua | 192.168.80.2 | | mariadb.sys | localhost | | root | localhost | +-------------+--------------+ 4 rows in set (0.001 sec) MariaDB [(none)]> 查看数据库用户zhuohua@'192.168.80.2'的权限: MariaDB [(none)]> Show grants for zhuohua@'192.168.80.2'; +----------------------------------------------------------------------------------------------------------------------------+ | Grants for zhuohua@192.168.80.2 | +----------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO `zhuohua`@`192.168.80.2` IDENTIFIED BY PASSWORD '*242E46A1E8D30FE06F7CE37B55BFC25BA981D70C' | +----------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.000 sec) MariaDB [(none)]> ### 在宿主机上往容器“Tomcat_1”的Tomcat的默认站点里创建连接远程MariaDB的JSP测试页: [root@centos8 ~]# cd /opt/share/ [root@centos8 share]# ls docs examples host-manager manager ROOT [root@centos8 share]# cd ROOT/ [root@centos8 ROOT]# vi mm.jsp 写入:
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>   
<%@ page import="java.sql.*"%>   
<%@ page contentType="text/html; charset=UTF-8" %>   
   
   
连接192.168.80.3的库mysql   
   
   
<%   
Connection con = null;   
Statement stmt = null;   
ResultSet rs = null;   
try{   
Class.forName("com.mysql.jdbc.Driver");   
String dbUrl = "jdbc:mysql://192.168.80.3:3306/mysql?useUnicode=true&characterEncoding=UTF-8";   
String dbUser = "zhuohua";   
String dbPwd = "168";   
con = DriverManager.getConnection(dbUrl,dbUser,dbPwd);   
out.print("数据库MariaDB远程连接正常");  
}catch(Exception ex)   
{   
out.print("数据库MariaDB远程连接失败
"+ex.toString()); } %>
Windows客户端远程测试: http://192.168.168.154/mm.jsp 图片4.png 解决方法: [root@centos8 ~]# docker cp mysql-connector-java-8.0.15.jar Tomcat_1:/root [root@centos8 ~]# 再进入容器“Tomcat_1”: [root@centos8 ~]# docker exec -it Tomcat_1 /bin/bash root@913a9d4f04c0:/usr/local/tomcat# root@913a9d4f04c0:/usr/local/tomcat# cd root@913a9d4f04c0:~# pwd /root root@913a9d4f04c0:~# root@913a9d4f04c0:~# ls mysql-connector-java-8.0.15.jar root@913a9d4f04c0:~# root@913a9d4f04c0:~# cp mysql-connector-java-8.0.15.jar /usr/local/tomcat/lib/ root@913a9d4f04c0:~# ll /usr/local/tomcat/lib/mysql-connector-java-8.0.15.jar -rw-r--r--. 1 root root 2134905 Mar 20 20:57 /usr/local/tomcat/lib/mysql-connector-java-8.0.15.jar root@913a9d4f04c0:~# 在宿主机重启容器“Tomcat_1”: [root@centos8 ~]# docker restart Tomcat_1 Tomcat_1 [root@centos8 ~]# Windows客户端再次远程测试: 图片5.png 笺注: Docker宿主机的防火墙其实可以不用打开TCP 3306端口: [root@centos8 ~]# firewall-cmd --zone=public --list-ports [root@centos8 ~]# 但容器“MariaDB_1”要打开TCP 3306端口。 相关文章: CentOS8_在Docker中安装MariaDB CentOS8_在Docker中安装Nagios CentOS8_Tomcat8+JDK1.8+MySQL

图片附件: 图片1.png (2023-3-22 10:26, 79.02 KB) / 下载次数 17
http://blog.zhuohua.store/attachment.php?aid=22203&k=5eb31b0cd5ce7b9bd0f2c4e7cc731e97&t=1715928140&sid=qi09iS



图片附件: 图片2.png (2023-3-22 10:27, 198.94 KB) / 下载次数 17
http://blog.zhuohua.store/attachment.php?aid=22204&k=03bf96a284e4b66757be151a516d08d2&t=1715928140&sid=qi09iS



图片附件: 图片3.png (2023-3-22 10:28, 57.11 KB) / 下载次数 15
http://blog.zhuohua.store/attachment.php?aid=22205&k=64abec89c8d71bb5b7e6d39e4d889646&t=1715928140&sid=qi09iS



图片附件: 图片4.png (2023-3-22 10:33, 47.07 KB) / 下载次数 9
http://blog.zhuohua.store/attachment.php?aid=22206&k=791d603699c2ae623b3a1bfce7dbab0e&t=1715928140&sid=qi09iS



图片附件: 图片5.png (2023-3-22 10:35, 40.88 KB) / 下载次数 6
http://blog.zhuohua.store/attachment.php?aid=22207&k=0b2c4b7006a1b80e78351c6d594a64ae&t=1715928140&sid=qi09iS






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2