使用Docker及Docker-compose部署SpringBoot项目

1.环境准备

Windows下安装Docker需要WSL2及Hyper-v(Windows家庭版没有)

Linux下安装Docker:参考官方文档(Install Docker Engine | Docker Documentation)根据自己的子系统进行安装。

本人由于Windows中的Hyper-v有问题,选择了使用阿里云服务器建立了远程的Linux服务器,并安装了Ubuntu作为子系统。

配置好Docker之后,别忘了设置云服务器的安全组,开放响应的容器端口。

如图:

使用Docker及Docker-compose部署SpringBoot项目_第1张图片

2.DockerFile的使用

1SpringBoot项目在打包成Jar之前要确保其能正确运行

2.打包前要核对配置是否正确,如开发环境和测试环境的切换等

3.DockerFile要在项目根目录下,如图

使用Docker及Docker-compose部署SpringBoot项目_第2张图片

4.DockerFile配置如下

# 基础镜像 开发所使用的Java版本 本项目为Java17
FROM a581957a54d9 ​ 
# 维护者信息 添加信息 
MAINTAINER ac  ​ 
#挂载卷 冒号前为宿主机地址 冒号后为需要挂载的卷 
VOLUME /myconfig/webapp/tmp:/tmp ​ 
# 设置容器时区为当前时区 无需改动 
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone ​ 
# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 根据自己的项目进行修改 
ADD target/dockerdemo.jar app.jar ​ 
# 容器启动执行命令 这个使用指定生效的配置文件用的可以不加 
("--spring.profiles.active=test") 
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] ​
# 声明容器提供服务端口 根据自己的情况修改 
EXPOSE 8080

3.Docker常用容器

1.启动mysql容器

//启动 mysql docker run -d --name=mysql-server -p 3306:3306 -v /home/user/myconfig/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.23

  • -d:以后台模式运行容器。

  • --name:指定容器的名称为mysql-server

  • -p:将宿主机的3306端口映射到容器的3306端口,以便在宿主机上访问MySQL服务。

  • -v:将宿主机的/home/user/myconfig/mysql目录挂载到容器的/var/lib/mysql目录,以便在容器内持久化MySQL数据。

  • -e:设置MySQL的环境变量,这里设置MySQL的root用户密码为123456

  • mysql:8.0.23:指定要运行的MySQL 8.0.23镜像。

2.启动 SpringBoot容器

docker run --name webapp -d -p 8080:8080 -v mywebapp:/var/lib/webapp springboot

  • --name:指定容器的名称为 webapp

  • -d:以后台模式运行容器。

  • -p:将宿主机的 8080 端口映射到容器的 8080 端口,以便在宿主机上访问应用程序。

  • -v:将宿主机的 mywebapp 目录挂载到容器的 /var/lib/webapp 目录,以便在容器内持久化应用程序数据和配置文件。

  • springboot:指定要运行的 Spring Boot Web 应用程序的镜像。

3.启动 redis

docker run -p 6379:6379 --name myredis -v /home/user/myconfig/redis/redis.conf:/etc/redis/redis.conf -v /home/user/myconfig/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

  • -p:将宿主机的 6379 端口映射到容器的 6379 端口,以便在宿主机上访问 Redis 服务。

  • --name:指定容器的名称为 myredis

  • -v:将宿主机的 /home/user/myconfig/redis/redis.conf 文件挂载到容器的 /etc/redis/redis.conf 文件,以便在容器内使用自定义的 Redis 配置文件。

  • -v:将宿主机的 /home/user/myconfig/redis/data 目录挂载到容器的 /data 目录,以便在容器内持久化 Redis 数据。

  • -d:以后台模式运行容器。

  • redis:指定要运行的 Redis 镜像。

  • redis-server /etc/redis/redis.conf:启动 Redis 服务,并使用 /etc/redis/redis.conf 配置文件。

  • --appendonly yes:启用 Redis 的持久化功能,以保证数据不会因为故障而丢失。

4.启动 nginx

docker run -p 80:80 --name nginx -v //home/user/myconfig/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/user/myconfig/nginx/log:/var/log/nginx -v /home/user/myconfig/nginx/html:/usr/share/nginx/html -d nginx

  • -p:将宿主机的 80 端口映射到容器的 80 端口,以便在宿主机上访问 Nginx 服务。

  • --name:指定容器的名称为 nginx

  • -v:将宿主机的 /home/user/myconfig/nginx/nginx.conf 文件挂载到容器的 /etc/nginx/nginx.conf 文件,以便在容器内使用自定义的 Nginx 配置文件。

  • -v:将宿主机的 /home/user/myconfig/nginx/log 目录挂载到容器的 /var/log/nginx 目录,以便在容器内持久化 Nginx 日志文件。

  • -v:将宿主机的 /home/user/myconfig/nginx/html 目录挂载到容器的 /usr/share/nginx/html 目录,以便在容器内持久化 Nginx 静态文件。

  • -d:以后台模式运行容器。

  • nginx:指定要运行的 Nginx 镜像。

4.Docker-compose的使用

我目前使用的配置

version: "3"
services:
        nginx:
            image: nginx
            #restart: on-failure
           container_name: nginx
        ports:     

                 - "80:80"
        volumes:
                - /myconfig/nginx/nginx.conf:/etc/nginx/nginx.conf
                - /myconfig/nginx/log:/var/log/nginx
                - /myconfig/nginx/html:/usr/share/nginx/html
        mysql:
                image: mysql:8.0.23
                # restart: always
                ports:
                        - "3306:3306"
                volumes:
                        - /myconfig/mysql:/var/lib/mysql
                environment:
                        MYSQL_ROOT_PASSWORD: 123456
                container_name: mysql-server
        webapp:
                image: springboot
                # restart: always
               ports:
                        - "8080:8080"
                volumes:
                        - /myconfig/webapp/tmp:/tmp
                        - /myconfig/webapp/upload:/upload
                container_name: webapp
        redis:
                image: redis:latest
                # restart: always
                ports:
                        - "6379:6379"
                volumes:
                        - /myconfig/redis/redis.conf:/etc/redis/redis.conf
                        - /myconfig/redis/data:/data
                        - /myconfig/lib:/myconfig/lib
                command: [ "redis-server", "/etc/redis/redis.conf", "--appendonly", "yes","--requirepass ","myredis123" ]
                container_name: redis-service

 可选择全部启动,或部分启动,如下

使用Docker及Docker-compose部署SpringBoot项目_第3张图片

你可能感兴趣的:(docker,容器,spring,boot)