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包项目就不行
    • 总结:目前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的配置文件,则需要在容器内直接修改配置文件

  • 将修改后的配置文件拷贝到容器中(之前没做目录映射,如果直接在容器中修改的配置文件,那这步可以忽略)

    • 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容器
posted @   OnlyOnYourself-Lzw  阅读(176)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示