• docker部署SpringBoot项目


    1. docker环境

    1.1 docker安装

    #CentOS 6
    rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum update -y
    yum -y install docker-io
    service docker start
    chkconfig docker on
    
    #CentOS 7、Debian、Ubuntu
    curl -sSL https://get.docker.com/ | sh
    systemctl start docker
    systemctl enable docker.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    1.2 docker Web管理工具

    #创建文件夹
    mkdir -p /docker/portainer/{data,public}
    
    #中文汉化
    #注意安装前不要导入汉化包,否则无法注册。
    https://www.quchao.net/Portainer-CN.html
    
    # 运行
    docker run -d -p 9000:9000 --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --privileged=true \
    portainer/portainer-ce
    
    # 初始化登录地址
    http://192.168.80.250:9000
    
    admin
    111111111111  (12位)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1.3 docker网络

    1.3.1 网络说明

    首先,我们需要创建一个自定义的网络,这样我们才可以使用Docker为容器分配固定IP。可以使用下面的命令来创建自定义网络:
    如果只使用docker network create pub_network创建网络,则容器启动时,会自动分配动态的IP地址和网关。

    docker network create --subnet=192.168.0.0/16 pub_network
    
    • 1

    这个命令将创建名为“mynet”的网络,并指定它的子网为“192.168.0.0/16”。
    接下来,我们需要为需要分配固定IP的容器指定IP地址。可以使用下面的命令来启动一个容器,并为它分配固定IP:

    docker run --name=ubuntu --net=pub_network --ip=192.168.0.101 -itd ubuntu:latest
    
    • 1

    这个命令将启动一个名为“ubuntu”的容器,并将它加入到自定义网络“mynet”中。同时,它还为这个容器分配了固定IP地址“192.168.0.101”。
    现在,我们可以验证容器的IP地址是否生效。可以使用下面的命令来查看容器的IP地址:

    docker inspect ubuntu | grep IPAddress
    
    • 1

    这个命令将输出包含容器IP地址的行,从而验证我们刚才为容器分配的固定IP地址是否生效了。
    最后,需要注意的是,我们可以为同一个网络中的多个容器分配不同的IP地址,但IP地址必须在同一个子网中。

    #将容器1添加到my_network网络中
    docker network connect my_network container1
    #从网络中删除容器1
    docker network disconnect my_network container1
    #使用Bridge模式进行网络配置
    docker run -it --name my_container --net bridge
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.3.2 创建指定网关的网络

    docker network create --subnet=192.168.10.0/255 pub_network
    
    • 1

    2. docker安装软件

    2.1 安装nginx

    docker pull nginx
    
    #挂载启动
    docker run -it -d \
    --name=nginx \
    --network=pub_network \
    -p 80:80 \
    -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /docker/nginx/html:/usr/share/nginx/html \
    -v /docker/nginx/logs:/var/log/nginx \
    --privileged nginx
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.2 安装redis

    docker pull redis
    
    
    #配置下面内容
    # 文件路径:/docker/redis/redis.conf
    port 6379
    bind * 
    daemonize no
    pidfile /docker/redis/redis.pid
    appendonly yes
    
    
    # 启动
    
    docker run \
    --network=pub_network \
    --name redis \
    -v /docker/redis/data:/data \
    -v /docker/redis/redis.conf:/etc/redis/redis.conf \
    -d redis \
    redis-server /etc/redis/redis.conf \
    --appendonly yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.3 安装mysql

    docker pull mysql:5.7
    
    #配置
    #文件 /docker/mysql/conf/my.cnf
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    
    # 启动容器
    docker run --name mysql \
    -p 3306:3306 \
    --network=pub_network \
    -v /docker/mysql/log:/var/log/mysql \
    -v /docker/mysql/data:/var/lib/mysql \
    -v /docker/mysql/conf/my.cnf:/etc/my.cnf \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql:5.7
    
    
    #进入容器内部
    docker exec -it mysql bash
    mysql -uroot -proot
    
    #给root开远程权限
    grant all privileges on *.* to root@"%" identified by "root";
    flush privileges;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    2.4 部署springboot程序

    2.4.1 编写dockerfile

    文件名称固定是Dockerfile,不能随意改变,文件内容如下:

    FROM openjdk:8  
    # 第一行必须是FROM。。。,不能把这行注释移动到第一行。
    # 如果镜像没有,则会自动下载
    
    # 作者
    MAINTAINER 硅谷工具人
    
    # VOLUME 指向了一个/tmp的目录,由于 SpringBoot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。
    # 这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
    VOLUME /tmp
    
    # 将应用的配置文件也拷贝到镜像中。使用下面的ADD也可以
    # COPY *.jar /app.jar  
    
    # 将本地JAR包打包到容器中,并重命名(erp.jar是重命名后的jar)
    ADD ruoyi-admin.jar erp.jar
    
    # 声明需要暴露的端口,在Dockerfile中声明了那些端口是需要开放的,
    # 在构建容器时通过-p可以随机映射端口,如果EXPOSE没有指定端口,那么使用-p参数无效。
    # 本配置只是声明,一般我们需要在构建docker容器时使用-p(小写的p)指定开放的端口。
    EXPOSE 8080  
    
    #docker启动时,运行的命令,这里容器启动时直接运行jar服务。
    ENTRYPOINT ["java","-jar","/erp.jar"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    注意点:
    1、文件名必须是Dockerfile,大小写不能修改
    2、maven项目先打包,然后将打包好的jar包和Dockerfile文件上传到服务器,并且放到相同的目录。
    3、如果有外置配置文件application.yml,也需要放到上面相同的目录。

    2.4.2 构建镜像

    docker build -t erp:1.0 .
    
    #查看构建的镜像
    docker images
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.4.3 启动镜像

    docker run --network=pub_network --name erp -d  erp:1.0
    
    • 1
  • 相关阅读:
    NSDT编辑器实现数字孪生
    1、回文数
    【云原生 | 20】Docker资源限制详解
    kubernetes API Server 看这篇试试
    FIR和IIR对比以及群延时和相位延时 网站
    MMDetection安装流程与测试
    诊所病例信息管理系统(Java+Web+SSH+MYSQL)
    Java中如何判断字符串输入[hello,world]是不是字符串数组参数
    02.6 概率
    图神经网络 —— GNN通用计算管道
  • 原文地址:https://blog.csdn.net/wang6733284/article/details/132713845