下面是Docker部署SpringBoot应用的实现步骤。
准备工作
-
安装Docker和Docker Compose,建议使用Docker官方提供的安装方式。
-
编写Spring Boot应用程序。
Spring Boot应用程序打包
- 在Spring Boot应用程序的根目录下,使用Maven命令打包应用程序:
mvn clean package -DskipTests
- 打包完成后,在target目录下生成一个jar文件,该文件包含了所有的依赖项。
Dockerfile编写
- 在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)
- 在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:
- 使用以下命令构建镜像并启动容器:
docker-compose up -d
- 测试Spring Boot应用程序是否正常工作。
示例2:Docker部署Spring Boot应用程序(基于Nginx)
- 在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:
- 在Spring Boot应用程序的根目录下,创建一个名为nginx的目录,用于存放Nginx的配置文件。
mkdir nginx
- 在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;
}
}
}
- 在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;
}
}
- 在nginx目录下,创建一个名为html的目录,用于存放静态资源。
mkdir html
- 将打包后的Spring Boot应用程序复制到html目录下。
cp target/demo-0.0.1-SNAPSHOT.jar nginx/html/app.jar
- 使用以下命令启动容器:
docker-compose up -d
- 现在可以通过浏览器访问localhost,浏览器应该可以看到Spring Boot应用程序的欢迎页面。
至此,“Docker部署SpringBoot应用的实现步骤”完成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker部署SpringBoot应用的实现步骤 - Python技术站