Docker部署SpringBoot应用的实现步骤

下面是Docker部署SpringBoot应用的实现步骤。

准备工作

  1. 安装Docker和Docker Compose,建议使用Docker官方提供的安装方式。

  2. 编写Spring Boot应用程序。

Spring Boot应用程序打包

  1. 在Spring Boot应用程序的根目录下,使用Maven命令打包应用程序:
mvn clean package -DskipTests
  1. 打包完成后,在target目录下生成一个jar文件,该文件包含了所有的依赖项。

Dockerfile编写

  1. 在Spring Boot应用程序的根目录下,创建一个名为Dockerfile的文件,并加入以下内容:
FROM openjdk:8-jdk-alpine
LABEL author="your name"
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

说明:

  • 第1行:指定了基础镜像为openjdk:8-jdk-alpine,它是一个包含了Java环境的最小化镜像。
  • 第2行:定义了镜像作者的标签。
  • 第3行:增加一个卷(日志文件等可以挂在到此卷上)。
  • 第4行:定义了一个变量JAR_FILE,它依赖于Maven打包后在target目录下生成的jar文件。
  • 第5行:将target/*.jar拷贝到镜像的/app.jar。
  • 第6行:定义了容器启动后的入口点,即执行java -jar命令启动应用程序。

  • 编写docker-compose.yml文件。

version: '3'
services:
  demo:
    image: demo:latest
    container_name: demo
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./logs:/logs
    networks:
      - docker_net
networks:
  docker_net:

说明:

  • 通过image指定了Dockerfile所在目录生成的镜像名称,这个名称是自定义的。
  • container_name指定了容器名称,按照官方建议应该为小写字母或数字组成的名称(这里指定为demo)。
  • ports指定了容器的端口映射,将容器的8080映射到主机的8080端口。
  • volumes指定容器与主机之间共享的目录。
  • networks指定容器使用的网络类型。

构建并启动容器

运行以下命令,构建镜像并启动容器:

docker-compose up -d

构建并启动完容器后,可以访问主机的8080端口测试应用程序是否正常。

示例1:Docker部署Spring Boot应用程序(基于MySQL)

  1. 在docker-compose.yml文件中,增加MySQL的配置。
version: '3'
services:
  demo:
    image: demo:latest
    container_name: demo
    restart: always
    ports:
      - 8080:8080
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=root
    depends_on:
      - mysql
    volumes:
      - ./logs:/logs
    networks:
      - docker_net
  mysql:
    image: mysql:5.7.35
    container_name: mysql
    restart: always
    environment:
      - MYSQL_DATABASE=demo
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - 3306:3306
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - docker_net
networks:
  docker_net:
  1. 使用以下命令构建镜像并启动容器:
docker-compose up -d
  1. 测试Spring Boot应用程序是否正常工作。

示例2:Docker部署Spring Boot应用程序(基于Nginx)

  1. 在docker-compose.yml文件中,增加Nginx的配置。
version: '3'
services:
  demo:
    image: demo:latest
    container_name: demo
    restart: always
    ports:
      - 8080:8080
    depends_on:
      - nginx
    volumes:
      - ./logs:/logs
    networks:
      - docker_net
  nginx:
    image: nginx:1.19.10-alpine
    container_name: nginx
    restart: always
    ports:
      - 80:80
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html
    networks:
      - docker_net
networks:
  docker_net:
  1. 在Spring Boot应用程序的根目录下,创建一个名为nginx的目录,用于存放Nginx的配置文件。
mkdir nginx
  1. 在nginx目录下,创建一个名为nginx.conf的文件,并添加以下内容:
daemon off;
worker_processes 1;
error_log /var/log/nginx/error.log;
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;
  server {
    listen 80;
    server_name localhost;
    location / {
      proxy_pass http://demo:8080/;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-Port $server_port;
     }
  }
}
  1. 在nginx目录下,创建一个名为conf.d的目录,并在该目录下创建一个名为demo.conf的文件,并添加以下内容:
server {
  listen 80;
  server_name localhost;
  root /usr/share/nginx/html;
  index index.html;
  location / {
    try_files $uri $uri/ /index.html =404;
  }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }
}
  1. 在nginx目录下,创建一个名为html的目录,用于存放静态资源。
mkdir html
  1. 将打包后的Spring Boot应用程序复制到html目录下。
cp target/demo-0.0.1-SNAPSHOT.jar nginx/html/app.jar
  1. 使用以下命令启动容器:
docker-compose up -d
  1. 现在可以通过浏览器访问localhost,浏览器应该可以看到Spring Boot应用程序的欢迎页面。

至此,“Docker部署SpringBoot应用的实现步骤”完成。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker部署SpringBoot应用的实现步骤 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • docker报错:denied: requested access to the resource is denied unauthorized: authentication required

    errors:denied: requested access to the resource is deniedunauthorized: authentication required。 解决方案 修改发布的镜像的REPOSITORY为自己的账户名+镜像,比如我的用户名是123456。 docker tag nginx 123456/nginx:1.0 …

    Docker 2023年4月13日
    00
  • docker 介绍

    docker服务介绍: http://gitlab.qiyi.domain/docker/docker/blob/master/docs/userguide_ZH-CN/sample.mdhttp://gitlab.qiyi.domain/docker/docker/blob/master/docs/userguide_ZH-CN/04-usage.md d…

    Docker 2023年4月13日
    00
  • Docker 安装后 报 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 解决办法

    1.看 /etc/docker/daemon.json 的配置 { “registry-mirrors”:[“https://—.mirror.ali—yuncs.com”] }         解决办法 $ systemctl daemon-reload $ sudo service docker restart $ sudo service do…

    Docker 2023年4月12日
    00
  • docker 启动失败

    docker 启动服务失败 场景 在Ubuntu中,将docker切换阿里镜像后,运行如下两条命令:  sudo systemctl daemon-reload sudo systemctl restart docker 在重启docker服务这,报错信息如下:  Job for docker.service failed because the contr…

    Docker 2023年4月11日
    00
  • (九) Docker 容器数据卷(挂载)

    一、容器数据卷   docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System  提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载…

    Docker 2023年4月13日
    00
  • Docker 容器数据卷(挂载)

    一、容器数据卷   docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System  提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载…

    Docker 2023年4月11日
    00
  • docker入门3-docker swarm

    swarm介绍 想要将应用部署在一个集群并运行在多台机器上? 通过将多台机器链接到“Dockerized”集群以实现应用程序运行在多容器,多机器的技术被称为swarm。 一个swarm是一组运行docker的机器,它们加入同一个集群,加入swarm的都被当做一个节点。在集群下,需要一个swarm manager管理所有机器,执行docker命令和同意其他节点…

    Docker 2023年4月16日
    00
  • 在Docker上面安装/启动、运行、挂载MySQL5.7

    下载文档请看:https://hub.docker.com/r/mysql/mysql-server 一.下载镜像 执行命令: docker pull mysql/mysql-server:5.7  查看命令:docker images      运行MySQL后台运行并映射到本地端口命令:docker run -d -p 3306:3306 –name …

    Docker 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部