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容器
 
                     
                    
                 
                    
                



 
















 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号