03-Docker 软件安装(MySQL、Tomcat、Nginx、Redis)
三、Docker 软件安装
PS:这下面的软件安装过程中,做端口映射的时候,想要外部能够成功访问容器,前提是必须防火墙开启端口,或者关闭防火墙
3.1、Docker安装MySQL容器
3.1.1、拉取镜像
- 本次以MySQL5.7的镜像为例
docker pull centos/mysql-57-centos7
- 之前拉取过,这里就不演示了;直接执行命令即可
3.1.2、创建MySQL容器
-
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
-p
: 代表端口映射,格式为宿主机映射端口:容器运行端口
-e
:代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的远程登陆密码(如果是在容器中使用root登录的话,那么其密码为空)
-
具体操作
-
#把本地的mysqld服务停止,否则没法使用3306端口去做映射(看个人在本地是否有安装mysql,如果没有安装可以省略下面两个步骤) systemctl status mysqld systemctl stop mysqld systemctl diable mysqld # 创建mysql5.7容器 docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7 -
-
3.1.3、操作MySQL容器
-
执行如下命令
-
# 进入MySQL5.7容器 docker exec -it mysql5.7 /bin/bash # 容器进入MySQL是不要输入密码的,也不能输入密码 mysql -u root -p
-
-
3.1.4、远程登录MySQL容器
- 远程登录MySQL,使用SQLyog在Windows中进行远程登录在docker容器中的mysql
3.2、Docker安装Tomcat容器
3.2.1、拉取镜像
- 拉取Tomcat镜像
docker pull tomcat:8.5.71-jdk11-temurin-focal
- PS:这里最好不要下tomcat最新版本,也就是
docker pull tomcat:latest
,因为本人亲自试过了这个版本,是tomcat10.几,然后本地的war包上传到Linux后,tomcat一直显示404错误((╯▔皿▔)╯,就是这个原因我调了整整一个上午!!!),百度查询了很多资料都没有很明显指出这个问题,所以还是建议直接下tomcat8.5.x的版本,最稳定- 网上有的说是本地打包的JDK和服务器的JDK版本不一样导致的
- 但是我本地的是JDK8,Tomcat容器的是JDK11,秉着高兼容低,我想应该也不是JDK的问题
- 也有的说是Tomcat10中使用的包名更改了,jakarta.servlet和javax.servlet不一致导致的错误(我想大概率是这个原因)
- 归根到底,还是SpringBoot项目打包部署到Tomcat容器的时候的版本兼容问题,切换Tomcat镜像的版本即可
- 不过我试了一下,原生的tomcat的web项目的war包,直接部署到tomcat10也是可以直接访问的;SpringBoot的war包项目就不行
- 网上有的说是本地打包的JDK和服务器的JDK版本不一样导致的
- 总结:目前Tomcat10是一个大坑!!!建议换成Tomcat8或者Tomcat9
- 之前拉取过了,这里也不演示了
3.2.2、创建Tomcat容器
- 创建Tomcat容器,并挂载webapps目录
docker run -di --name=mytomcat -p 8080:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5.71-jdk11-temurin-focal
- 该图中的命令最后面
tomcat
改成tomcat:8.5.71-jdk11-temurin-focal
- 该图中的命令最后面
- 直接测试访问地址:宿主机IP地址:8080,查看是否正常启动tomcat应用
- 说明:404的原因是该容器创建的时候,webapps目录下没有原生的ROOT文件夹,导致其没有原生Tomcat的首页
- 给原生Tomcat应用的webapps目录下添加
ROOT
文件夹,再次访问8080端口
3.2.3、部署Web应用
导入工程
- 创建一个SpringBoot工程,或者Web工程都可以;本次在这里使用的是之前SpringBoot整合MyBatis的例子;可以根据个人需求更改,只是作为测试,无关紧要
导入数据库
- 创建springboot_db数据库,再创建tb_user表(PS:在MySQL容器中创建)
查看MySQL容器的ip地址
修改工程的配置文件
-
修改工程的application.yml文件中的数据库连接池信息,使用宿主机的ip和端口也可以,如果使用的是容器的ip和端口,前提是两个容器必须在同一个宿主机下
-
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.222.135:3306/springdb?useSSL=false # 这里用的是Linux的IP地址和端口 username: root password: root mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 输出日志 map-underscore-to-camel-case: true # 开启下划线与小驼峰映射 type-aliases-package: com.coolman.domain # 开启实体类别名扫描 mapper-locations: #定义mapper文件所在的路径,如果你没有指定mapper文件所在路径,那么就一定要与接口同一个包 - classpath:mappers/*.xml
修改工程的pom文件
-
<!--第一步,指定打war包--> <packaging>war</packaging> <!--第二步,打包排除内嵌tomcat--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!--第三步,指定springboot项目打包插件--> <build> <finalName>ROOT</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
编写WebServletInitializer类
-
相当于原生JavaWeb项目的web.xml文件,打包部署到tomcat服务器上必须要有这个文件
-
package com.coolman.config; import com.coolman.MybatisApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.ServletContextInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class WebServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { builder.sources(MybatisApplication.class); return builder; } }
打包项目
- 进入项目pom文件命令行下,执行打包命令
mvn package -Dmaven.test.skip=true
将项目上传到容器的webapps目录下
- 上传ROOT.war到/root/tomcat/webapps目录下
3.2.4、浏览器访问SpringBoot应用
- 浏览器访问:192.168.222.135:8080/user/findAll
3.3、Docker安装Nginx容器
3.3.1、拉取Nginx镜像
- 命令
docker pull nginx
- 之前拉取过了,这里也不演示了;直接拉取即可
3.3.2、创建Nginx容器
- 命令
docker run -di --name=mynginx -p 80:80 nginx
3.3.3、测试访问
- 在浏览器上访问
3.3.4、配置反向代理
-
官方的nginx镜像,配置文件在nginx.conf 在
/etc/nginx/
目录下-
-
因为容器的IP地址是动态的,个人设置的Linux服务器的IP是静态的,所以配置nginx的时候,选择的是Linux的IP地址(因为创建容器的时候做了端口映射,不会有什么影响)
-
修改nginx.conf文件,添加如下内容
-
找到本地原生nignx的配置文件
-
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; gzip on; server { listen 80; server_name 127.0.0.1; location / { proxy_pass #; } } } -
添加如下内容
-
server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://你linux的ip地址:8080; } }
-
-
如果本地没有nignx的配置文件,则需要在容器内直接修改配置文件
- 需要下载
vim
指令,不过下载的时候会出现一些错误,需要更新apt-get
指令和切换下载源 - 具体在容器中下载vim,可以参考该CSDN博客:E: Unable to locate package vim 的解决方案---docker 镜像下安装Vim_mameng1998的博客-CSDN博客
- 需要下载
-
-
将修改后的配置文件拷贝到容器中(之前没做目录映射,如果直接在容器中修改的配置文件,那这步可以忽略)
docker cp nginx.conf mynginx:/etc/nginx/nginx.conf
-
重新启动容器
docker restart mynginx
-
访问nignx(宿主机IP地址/user/findAll)
3.4、Docker安装Redis容器
3.4.1、拉取Redis镜像
- 命令
docker pull redis
- 之前拉取过,这里也不演示了
3.4.2、创建Redis容器
- 命令
docker run -di --name=myredis -p 6379:6379 redis
3.4.3、内部操作Redis容器
- 进入Redis容器
docker exec -it myredis /bin/bash
- 进入redis安装目录
cd /usr/local/bin
- 连接redis
./redis-cli
3.4.4、外部操作Redis容器
- 使用Another Redis Desktop Manager访问Redis容器
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器