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

本文介绍了如何在Windows和Linux环境下安装Docker,以及在遇到Hyper-v问题时如何转向使用阿里云服务器。接着,讲解了DockerFile的创建和配置,用于构建SpringBoot应用的镜像,并展示了Docker常用容器的启动命令,包括MySQL、SpringBoot、Redis和Nginx。最后,提到了Docker-compose的使用,用于管理多个容器的配置和服务。
摘要由CSDN通过智能技术生成

1.环境准备

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

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

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

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

如图:

2.DockerFile的使用

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

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

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

4.DockerFile配置如下

# 基础镜像 开发所使用的Java版本 本项目为Java17
FROM a581957a54d9 ​ 
# 维护者信息 添加信息 
MAINTAINER ac <miaoganmiao@gmail.com> ​ 
#挂载卷 冒号前为宿主机地址 冒号后为需要挂载的卷 
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

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

  • 14
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速部署分布式应用。通过 Docker Compose,我们可以定义和运行多个 Docker 容器,并通过一个 YAML 文件来配置需要的服务。 下面是使用 Docker Compose 部署 Spring Boot 项目的简单步骤: 1. 编写 Dockerfile 在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件,并添加以下内容: ``` FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE ADD ${JAR_FILE} app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 2. 编写 docker-compose.yml 文件 在 Spring Boot 项目的根目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容: ``` version: '3' services: app: image: your-image-name build: context: . dockerfile: Dockerfile ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=prod restart: always ``` 其中,your-image-name 是自定义的镜像名称,需要在构建镜像时使用。 3. 构建镜像 在 Spring Boot 项目的根目录下执行以下命令,构建镜像: ``` docker build -t your-image-name . ``` 4. 启动容器Spring Boot 项目的根目录下执行以下命令,启动容器: ``` docker-compose up -d ``` 5. 查看容器状态 执行以下命令查看容器状态: ``` docker-compose ps ``` 至此,你已经成功使用 Docker Compose 部署Spring Boot 项目。如果需要停止容器,可以执行以下命令: ``` docker-compose stop ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值