Docker Compose一键摆设Spring Boot + Vue项目

打印 上一主题 下一主题

主题 829|帖子 829|积分 2487

目录
条件条件
概述
Compose简介
Compose文件
Compose情况
Compose命令
资助命令
关键命令
Compose摆设项目
初始化情况
查看代码文件
sql数据准备
nginx配置文件准备
创建 compose.yaml
一键启动compose多个容器
浏览器访问虚拟机ip:80(可省略默认的80端口)
查看Compose运行的容器
查看容器日志
关闭并删除Compose开启的容器



条件条件


  • 熟悉Docker、Spring Boot 、Vue基本知识
  • 熟悉yaml文件基本知识,可参考:YAML 入门教程
  • 把握Docker摆设Spring Boot + Vue项目方法,可参考:Docker摆设Spring Boot + Vue项目

概述

本文在平凡的 Docker摆设Spring Boot + Vue项目 的基础上举行。摆设若依前后端分离版项目为例,重点在于怎样使用Docker Compose的方式加快项目摆设过程。

此前使用Docker摆设一个Spring Boot + Vue项目,包含了4个容器:


  • MySQL
  • Redis
  • Java后端
  • Nginx前端
而轻微复杂的项目,还会有各种各样的别的中央件,必要摆设的容器远不止4个。如果还像之前那样手动的逐一摆设,就太贫苦了。
而Docker Compose就可以资助我们实现 多个相互关联的Docker容器的快速摆设

Compose简介

Docker Compose 是一个用于定义和运行多容器应用步伐的工具,是实现精简且高效的开发与摆设体验的关键所在。
它简化了对整个应用步伐栈的控制,能够通过一个易于明白的 YAML 配置文件轻松管理服务、网络和存储卷。然后,只需一条命令,就能依据配置文件创建并启动所有服务。
Docker Compose 可在所有情况中工作,包括生产、预发布、开发、测试情况以及持续集成(CI)工作流程。它还具备用于管理应用步伐整个生命周期的命令,好比:


  • 启动、克制和重建服务。
  • 查看正在运行服务的状态。
  • 流式输出正在运行服务的日志内容。
  • 在某个服务上运行一次性命令。
通过使用 Docker Compose,使用一个名为 Compose 文件的 YAML 配置文件来配置应用步伐的各项服务,然后使用 Compose 命令行界面(CLI)依据该配置文件创建并启动所有服务。
Compose 文件(即 compose.yaml 文件)在定义多容器应用步伐方面遵照了 Compose 规范所提供的规则。

Compose文件

Compose 文件的默认路径是位于工作目录下的 compose.yaml(首选)或 compose.yml。为了与早期版本兼容,Compose 也支持 docker-compose.yaml 和 docker-compose.yml。如果这两种文件都存在,Compose 会优先使用规范的 compose.yaml 文件。
你可以使用片段和扩展来保持 Compose 文件的高效性和易于维护性。
多个 Compose 文件可以合并在一起以定义应用步伐模型。YAML 文件的组合是通过根据你设置的 Compose 文件次序来追加或覆盖 YAML 元向来实现的。简单属性和映射会被最高次序的 Compose 文件覆盖,列表则通过追加来合并。当要合并的互补文件存放在其他文件夹时,相对路径会基于第一个 Compose 文件的父文件夹来解析。由于一些 Compose 文件元素既可以表示为单个字符串也可以表示为复杂对象,所以合并操作适用于展开情势。
如果想复用其他 Compose 文件,或者将应用步伐模型的部分内容提取到单独的 Compose 文件中,也可以使用 “include”。如果你的 Compose 应用步伐依靠于由不同团队管理的另一个应用步伐,或者必要与他人共享,这将非常有效。


Compose情况

安装docker时已经附带安装了docker-compose-plugin插件,所以无需另外安装docker compose



使用如下命令查询compose版本,看到版本号,说明docker compose正常可用
  1. [root@localhost ~]# docker compose version
  2. Docker Compose version v2.29.7
复制代码
Compose命令

通过 “docker compose” 命令及其子命令与 Docker Compose 应用步伐举行交互。可以管理在 compose.yaml 文件中定义的多容器应用步伐的生命周期。这些命令能够轻松地启动、克制和配置应用步伐。
资助命令

docker compose资助命令
  1. [root@localhost ~]# docker compose --help
  2. Usage:  docker compose [OPTIONS] COMMAND
  3. Define and run multi-container applications with Docker
  4. Options:
  5.      --all-resources              Include all resources, even those not used by services
  6.      --ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
  7.      --compatibility              Run compose in backward compatibility mode
  8.      --dry-run                    Execute command in dry run mode
  9.      --env-file stringArray       Specify an alternate environment file
  10.   -f, --file stringArray           Compose configuration files
  11.      --parallel int               Control max parallelism, -1 for unlimited (default -1)
  12.      --profile stringArray        Specify a profile to enable
  13.      --progress string            Set type of progress output (auto, tty, plain, json, quiet) (default "auto")
  14.      --project-directory string   Specify an alternate working directory
  15.                                   (default: the path of the, first specified, Compose file)
  16.   -p, --project-name string        Project name
  17. Commands:
  18.   attach      Attach local standard input, output, and error streams to a service's running container
  19.   build       Build or rebuild services
  20.   config      Parse, resolve and render compose file in canonical format
  21.   cp          Copy files/folders between a service container and the local filesystem
  22.   create      Creates containers for a service
  23.   down        Stop and remove containers, networks
  24.   events      Receive real time events from containers
  25.   exec        Execute a command in a running container
  26.   images      List images used by the created containers
  27.   kill        Force stop service containers
  28.   logs        View output from containers
  29.   ls          List running compose projects
  30.   pause       Pause services
  31.   port        Print the public port for a port binding
  32.   ps          List containers
  33.   pull        Pull service images
  34.   push        Push service images
  35.   restart     Restart service containers
  36.   rm          Removes stopped service containers
  37.   run         Run a one-off command on a service
  38.   scale       Scale services
  39.   start       Start services
  40.   stats       Display a live stream of container(s) resource usage statistics
  41.   stop        Stop services
  42.   top         Display the running processes
  43.   unpause     Unpause services
  44.   up          Create and start containers
  45.   version     Show the Docker Compose version information
  46.   wait        Block until containers of all (or specified) services stop.
  47.   watch       Watch build context for service and rebuild/refresh containers when files are updated
  48. Run 'docker compose COMMAND --help' for more information on a command.
复制代码
查看某个命令的资助,例如,docker compose up命令资助如下
  1. [root@localhost ~]# docker compose up --help
  2. Usage:  docker compose up [OPTIONS] [SERVICE...]
  3. Create and start containers
  4. Options:
  5.      --abort-on-container-exit      Stops all containers if any container was stopped. Incompatible with -d
  6.      --abort-on-container-failure   Stops all containers if any container exited with failure. Incompatible with -d
  7.      --always-recreate-deps         Recreate dependent containers. Incompatible with --no-recreate.
  8.      --attach stringArray           Restrict attaching to the specified services. Incompatible with --attach-dependencies.
  9.      --attach-dependencies          Automatically attach to log output of dependent services
  10.      --build                        Build images before starting containers
  11.   -d, --detach                       Detached mode: Run containers in the background
  12.      --dry-run                      Execute command in dry run mode
  13.      --exit-code-from string        Return the exit code of the selected service container. Implies --abort-on-container-exit
  14.      --force-recreate               Recreate containers even if their configuration and image haven't changed
  15.      --menu                         Enable interactive shortcuts when running attached. Incompatible with --detach. Can
  16.                                     also be enable/disable by setting COMPOSE_MENU environment var.
  17.      --no-attach stringArray        Do not attach (stream logs) to the specified services
  18.      --no-build                     Don't build an image, even if it's policy
  19.      --no-color                     Produce monochrome output
  20.      --no-deps                      Don't start linked services
  21.      --no-log-prefix                Don't print prefix in logs
  22.      --no-recreate                  If containers already exist, don't recreate them. Incompatible with --force-recreate.
  23.      --no-start                     Don't start the services after creating them
  24.      --pull string                  Pull image before running ("always"|"missing"|"never") (default "policy")
  25.      --quiet-pull                   Pull without printing progress information
  26.      --remove-orphans               Remove containers for services not defined in the Compose file
  27.   -V, --renew-anon-volumes           Recreate anonymous volumes instead of retrieving data from the previous containers
  28.      --scale scale                  Scale SERVICE to NUM instances. Overrides the scale setting in the Compose file if
  29.                                     present.
  30.   -t, --timeout int                  Use this timeout in seconds for container shutdown when attached or when containers
  31.                                     are already running
  32.      --timestamps                   Show timestamps
  33.      --wait                         Wait for services to be running|healthy. Implies detached mode.
  34.      --wait-timeout int             Maximum duration to wait for the project to be running|healthy
  35.   -w, --watch                        Watch source code and rebuild/refresh containers when files are updated.
复制代码
关键命令

启动在 compose.yaml 文件中定义的所有容器服务:
  1. docker compose up
复制代码
克制并移除正在运行的容器服务:
  1. docker compose down
复制代码
监控正在运行的容器的输出并调试问题,通过以下命令查看日志:
  1. docker compose logs
复制代码
列出所有容器服务及其当前状态:
  1. docker compose ps
复制代码

Compose摆设项目

此前docker命令一个一个容器手动摆设步调如下:
  1. # 1.创建网络
  2. [root@localhost ~]# docker network create rynet
  3. # 2.启动mysql容器
  4. docker run -d -p 3306:3306 \
  5. -v /app/myconf:/etc/mysql/conf.d \
  6. -v /app/mydata:/var/lib/mysql \
  7. -e MYSQL_ROOT_PASSWORD=password \
  8. --network rynet \
  9. --name mysqldb \
  10. mysql:8.0.39-debian
  11. # 3.运行sql文件,得到初始数据
  12. # 4.运行redis容器
  13. docker run -d -p 6379:6379 \
  14. --name myredis \
  15. -v /app/redis/conf:/usr/local/etc/redis \
  16. -v /app/redis/data:/data \
  17. --network rynet \
  18. redis
  19. # 5.构建后端镜像
  20. # 5.1Dockerfile内容
  21. FROM openjdk:8
  22. LABEL author=liang
  23. COPY ruoyi-admin.jar /ruoyi-admin.jar
  24. EXPOSE 8080
  25. ENTRYPOINT ["java","-jar","/ruoyi-admin.jar"]
  26. # 5.2构建镜像
  27. [root@localhost ruoyi]# docker build -t ruoyiadmin:v1 .
  28. # 6.运行后端容器
  29. docker run -d -p 8080:8080 \
  30. --name backend \
  31. --network rynet \
  32. -v /app/admindata/uploadPath:/ruoyi/uploadPath \
  33. ruoyiadmin:v1
  34. # 7.运行前端容器
  35. docker run -d -p 80:80 \
  36. -v /root/dist:/usr/share/nginx/html \
  37. -v ryngconf:/etc/nginx \
  38. --name rynginx \
  39. --network rynet \
  40. nginx
复制代码
下面把这些步调同一写在一个 compose.yaml文件中,然后使用一条命令启动这些容器,克制手动一步一步运行各个容器的贫苦,简化摆设流程。compose.yaml内容(还可进一步优化,本文后面会提供优化后的yaml内容)如下:
  1. services:
  2.   mysql:
  3.     image: mysql
  4.     container_name: mysqldb
  5.     ports:
  6.       - "3306:3306"
  7.     environment:
  8.       TZ: Asia/Shanghai
  9.       MYSQL_ROOT_PASSWORD: password
  10.     volumes:
  11.       - "/app/compose/mysql/myconf:/etc/mysql/conf.d"
  12.       - "/app/compose/mysql/mydata:/var/lib/mysql"
  13.       - "/app/compose/mysql/myinit:/docker-entrypoint-initdb.d" # 初始化sql文件所在目录绑定挂载
  14.     networks:
  15.       - rynet
  16.   redis:
  17.     image: redis
  18.     container_name: myredis
  19.     volumes:
  20.       - "/app/compose/redis/conf:/usr/local/etc/redis"
  21.       - "/app/compose/redis/data:/data"
  22.     networks:
  23.       - rynet
  24.   javabackend:
  25.     build:
  26.       context: ./ruoyi
  27.       dockerfile: Dockerfile
  28.     container_name: backend
  29.     image: ruoyiadmin:v2 # 指定镜像名
  30.     ports:
  31.       - "8080:8080" # 暴露端口
  32.     volumes:
  33.       - /app/admindata/uploadPath:/ruoyi/uploadPath # 上传目录绑定挂载
  34.     networks:
  35.       - rynet
  36.     depends_on:
  37.       - mysql
  38.       - redis
  39.   nginx:
  40.     image: nginx
  41.     container_name: nginx
  42.     ports:
  43.       - "80:80"
  44.     volumes:
  45.       - "/root/nginx.conf:/etc/nginx/nginx.conf" # 绑定挂载配置文件,提前准备
  46.       - "/root/dist:/usr/share/nginx/html"
  47.     depends_on:
  48.       - javabackend
  49.     networks:
  50.       - rynet
  51. networks:
  52.   rynet:
复制代码
看到compose.yaml文件定义了4个容器。读者可自行对比compose文件定义的容器和docker run命令运行容器的对应关系。

初始化情况

  1. # 删除容器
  2. [root@localhost ~]# docker rm -f $(docker ps -qa)
  3. fcb5469c0776
  4. 88c2f4a4496f
  5. 74eeb57c4038
  6. 08776c3691f7
  7. 3655375bda89
  8. ce27bf664148
  9. 2f92612fd555
  10. f16e0185235f
  11. 5d0a2242ac54
  12. [root@localhost ~]# docker ps
  13. CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  14. [root@localhost ~]# docker ps -a
  15. CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  16. # 删除未使用的网络
  17. [root@localhost ~]# docker network prune
  18. # 删除相关镜像
  19. [root@localhost ~]# docker images
  20. REPOSITORY           TAG             IMAGE ID       CREATED         SIZE
  21. ruoyiadmin           v1              6de9305df65c   2 hours ago     610MB
  22. ruoyifront           v1              35c81e6d0f0b   25 hours ago    194MB
  23. test/mychangenginx   v1              16689c99df42   3 days ago      188MB
  24. ubuntu               latest          b1e9cef3f297   5 weeks ago     78.1MB
  25. nginx                latest          39286ab8a5e1   6 weeks ago     188MB
  26. redis                latest          7e49ed81b42b   2 months ago    117MB
  27. mysql                latest          c757d623b190   2 months ago    586MB
  28. mysql                8.0.39-debian   3c716403fbe7   2 months ago    611MB
  29. hello-world          latest          d2c94e258dcb   17 months ago   13.3kB
  30. [root@localhost ~]# docker rmi 6de 35c 166
  31. [root@localhost ~]# docker images
  32. REPOSITORY    TAG             IMAGE ID       CREATED         SIZE
  33. ubuntu        latest          b1e9cef3f297   5 weeks ago     78.1MB
  34. nginx         latest          39286ab8a5e1   6 weeks ago     188MB
  35. redis         latest          7e49ed81b42b   2 months ago    117MB
  36. mysql         latest          c757d623b190   2 months ago    586MB
  37. mysql         8.0.39-debian   3c716403fbe7   2 months ago    611MB
  38. hello-world   latest          d2c94e258dcb   17 months ago   13.3kB
复制代码
查看代码文件

在完成  Docker摆设Spring Boot + Vue项目 后,就会有前后端的代码文件,通过如下命令查看代码文件,确保如下这些文件存在。
  1. # 查看代码文件
  2. [root@localhost ~]# ls
  3. ruoyi    dist   ...
  4. # 查看前端文件
  5. [root@localhost ~]# ls dist
  6. favicon.ico  html  index.html  index.html.gz  robots.txt  static
  7. # 查看到后端文件
  8. [root@localhost ~]# ls ruoyi
  9. Dockerfile  ruoyi-admin.jar
复制代码

sql数据准备

将mysql数据初始化文件 ry_20240629.sql,上传到指定目录,例如:/app/compose/mysql/myinit/
  1. [root@localhost ~]# mkdir -p /app/compose/mysql/myinit
  2. [root@localhost ~]# ls /app/compose/mysql/myinit/
  3. ry_20240629.sql
复制代码


nginx配置文件准备

  1. [root@localhost ~]# vi nginx.conf
复制代码
nginx.conf内容如下:
  1. user  nginx;
  2. worker_processes  auto;
  3. error_log  /var/log/nginx/error.log notice;
  4. pid        /var/run/nginx.pid;
  5. events {
  6.     worker_connections  1024;
  7. }
  8. http {
  9.     include       mime.types;
  10.     default_type  application/octet-stream;
  11.     sendfile        on;
  12.     keepalive_timeout  65;
  13.     server {
  14.         listen       80;
  15.         server_name  localhost;
  16.       location / {
  17.          root   /usr/share/nginx/html;
  18.          try_files $uri $uri/ /index.html;
  19.          index  index.html index.htm;
  20.         }
  21.       location /prod-api/{
  22.          proxy_set_header Host $http_host;
  23.          proxy_set_header X-Real-IP $remote_addr;
  24.          proxy_set_header REMOTE-HOST $remote_addr;
  25.          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  26.          proxy_pass http://backend:8080/;
  27.       }
  28.         error_page   500 502 503 504  /50x.html;
  29.         location = /50x.html {
  30.             root   html;
  31.         }
  32.     }
  33. }
复制代码
  1.location / {内里的root 配置前端代码文件所在的目录
  2.location /prod-api/{内里配置了前端请求带有/prod-api/开头的路径,将请求转发到对应的后端地址,这里配置的后端服务地址为http://backend:8080/,例如:localhost:80/prod-api/getAllUser请求转发到http://backend:8080/getAllUser
  创建 compose.yaml

  1. [root@localhost ~]# vi compose.yaml
复制代码
优化后的compose.yaml文件内容如下:
  1. services:
  2.   mysqldb:
  3.     image: mysql:8.0.39-debian
  4.     container_name: mysqldb
  5.     ports:
  6.       - "3306:3306"
  7.     environment:
  8.       TZ: Asia/Shanghai
  9.       MYSQL_ROOT_PASSWORD: password
  10.       MYSQL_DATABASE: ryvue
  11.       LANG: C.UTF-8
  12.     command:
  13.       --character-set-server=utf8mb4
  14.       --collation-server=utf8mb4_general_ci
  15.     volumes:
  16.       - "/app/compose/mysql/myconf:/etc/mysql/conf.d"
  17.       - "/app/compose/mysql/mydata:/var/lib/mysql"
  18.       - "/app/compose/mysql/myinit:/docker-entrypoint-initdb.d" # 绑定挂载,初始化sql文件所在目录
  19.     networks:
  20.       - rynet
  21.   myredis:
  22.     image: redis
  23.     container_name: myredis
  24.     volumes:
  25.       - "/app/compose/redis/conf:/usr/local/etc/redis"
  26.       - "/app/compose/redis/data:/data"
  27.     networks:
  28.       - rynet
  29.   backend:
  30.     build:
  31.       context: ./ruoyi
  32.       dockerfile: Dockerfile
  33.     container_name: backend
  34.     image: ruoyiadmin:v2 # 指定镜像名
  35.     ports:
  36.       - "8080:8080"
  37.     volumes:
  38.       - /app/admindata/uploadPath:/ruoyi/uploadPath # 绑定挂载,上传目录
  39.     networks:
  40.       - rynet
  41.     restart: always
  42.     depends_on:
  43.       mysqldb:
  44.         condition: service_started
  45.       myredis:
  46.         condition: service_started
  47.   nginx:
  48.     image: nginx
  49.     container_name: nginx
  50.     ports:
  51.       - "80:80"
  52.     volumes:
  53.       - "/root/nginx.conf:/etc/nginx/nginx.conf" # 绑定挂载,nginx配置文件,提前准备
  54.       - "/root/dist:/usr/share/nginx/html" # 绑定挂载,前端代码目录
  55.     depends_on:
  56.       - backend
  57.     networks:
  58.       - rynet
  59. networks:
  60.   rynet:
复制代码
  1. [/code] [size=3]一键启动compose多个容器[/size]
  2. [code][root@localhost ~]# docker compose up -d
  3. [+] Running 1/1
  4. ! backend Warning Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting fo...                139.6s
  5. [+] Building 0.1s (8/8) FINISHED                                                                                 docker:default
  6. => [backend internal] load build definition from Dockerfile                                                               0.0s
  7. => => transferring dockerfile: 169B                                                                                       0.0s
  8. => [backend internal] load metadata for docker.io/library/openjdk:8                                                       0.0s
  9. => [backend internal] load .dockerignore                                                                                  0.0s
  10. => => transferring context: 2B                                                                                            0.0s
  11. => [backend internal] load build context                                                                                  0.0s
  12. => => transferring context: 39B                                                                                           0.0s
  13. => [backend 1/2] FROM docker.io/library/openjdk:8                                                                         0.0s
  14. => CACHED [backend 2/2] COPY ruoyi-admin.jar /ruoyi-admin.jar                                                             0.0s
  15. => [backend] exporting to image                                                                                           0.0s
  16. => => exporting layers                                                                                                    0.0s
  17. => => writing image sha256:83e99924b0730b778deafc3783a049a240783ee9658f2c096f151d55b12bb6bc                               0.0s
  18. => => naming to docker.io/library/ruoyiadmin:v2                                                                           0.0s
  19. => [backend] resolving provenance for metadata file                                                                       0.0s
  20. [+] Running 5/5
  21. ✔ Network root_rynet  Created                                                                                             0.1s
  22. ✔ Container myredis   Started                                                                                             0.6s
  23. ✔ Container mysqldb   Started                                                                                             0.6s
  24. ✔ Container backend   Started                                                                                             0.9s
  25. ✔ Container nginx     Started                                                                                             1.2s
  26. [root@localhost ~]#
复制代码
浏览器访问虚拟机ip:80(可省略默认的80端口)

  1. 虚拟机ip
复制代码


输入验证码后,进入用户管理,看到如下界面


查看Compose运行的容器

  1. [root@localhost ~]# docker compose ps
  2. NAME      IMAGE                 COMMAND                  SERVICE   CREATED          STATUS         PORTS
  3. backend   ruoyiadmin:v2         "java -jar /ruoyi-ad…"   backend   10 seconds ago   Up 8 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
  4. myredis   redis                 "docker-entrypoint.s…"   myredis   10 seconds ago   Up 9 seconds   6379/tcp
  5. mysqldb   mysql:8.0.39-debian   "docker-entrypoint.s…"   mysqldb   10 seconds ago   Up 9 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
  6. nginx     nginx                 "/docker-entrypoint.…"   nginx     9 seconds ago    Up 8 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp
复制代码

查看容器日志

使用如下命令查看容器日志
  1. [root@localhost ~]# docker compose logs
  2. ...
  3. 省略日志输出
  4. ...
复制代码
看到输出了Compose中多个容器的日志。

关闭并删除Compose开启的容器

关闭并删除Compose开启的容器
  1. [root@localhost ~]# docker compose down
  2. [+] Running 5/5
  3. ? Container nginx     Removed                                                                                             0.3s
  4. ? Container backend   Removed                                                                                             0.4s
  5. ? Container mysqldb   Removed                                                                                             0.6s
  6. ? Container myredis   Removed                                                                                             0.2s
  7. ? Network root_rynet  Removed                                                                                             0.1s
  8. [root@localhost ~]#
复制代码
再次查看容器
  1. [root@localhost ~]# docker ps -a
  2. CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
复制代码


完成!enjoy it!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表