Docker应用-项目部署及DockerCompose

打印 上一主题 下一主题

主题 1013|帖子 1013|积分 3039

Docker应用-项目部署

1. 项目部署-后端

1.1 修改设置

修改yml文件,将mysql设置改为动态获取:
application.yml
  1. Spring:
  2.   datasource:
  3.     url: jdbc:mysql://${db.host}:3306/hmall?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
  4.     driver-class-name: com.mysql.cj.jdbc.Driver
  5.     username: root
  6.     password: ${db.pw}
复制代码
application-dev.yml
  1. db:
  2.   host: mysql #容器名
  3.   pw: 123
复制代码
1.2 项目打包

项目打包:idea-maven-package:
跳过单元测试,直接打成jar包,部署到docker服务器;
1.3 编写Dockerfile

将Dockerfile文件部署到daocker服务器(与应用jar包在同一级目录)
  1. # 基础镜像
  2. FROM openjdk:11.0-jre-buster
  3. # 设定时区
  4. ENV TZ=Asia/Shanghai
  5. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  6. # 拷贝jar包
  7. COPY hm-service.jar /app.jar
  8. # 入口
  9. ENTRYPOINT ["java", "-jar", "/app.jar"]
复制代码
1.4 创建镜像

  1. # 1.构建项目镜像,不指定tag,则默认为latest
  2. docker build -t hmall .
  3. # 2.查看镜像
  4. docker images
复制代码
1.5 创建并运行容器

  1. # 3.创建并运行容器,并通过--network将其加入自定义网络ff,这样才能通过容器名访问mysql
  2. docker run -d --name hmall --network ff -p 8080:8080 hmall
复制代码
1.6 测试

通过浏览器访问:http://你的虚拟机地址:8080/
2. 项目部署-前端

2.1 html前端静态目录

将前端代码(hmall-portal和hmall-admin),复制到前端静态目录html文件中
2.2 nginx.config编写

对静态资源目录做代理设置
  1. worker_processes  1;
  2. events {
  3.     worker_connections  1024;
  4. }
  5. http {
  6.     include       mime.types;
  7.     default_type  application/json;
  8.     sendfile        on;
  9.    
  10.     keepalive_timeout  65;
  11.     server {
  12.         listen       18080;
  13.         # 指定前端项目所在的位置
  14.         location / {
  15.             root /usr/share/nginx/html/hmall-portal;
  16.         }
  17.         error_page   500 502 503 504  /50x.html;
  18.         location = /50x.html {
  19.             root   html;
  20.         }
  21.         location /api {
  22.             rewrite /api/(.*)  /$1 break;
  23.             proxy_pass http://hmall:8080;
  24.         }
  25.     }
  26.     server {
  27.         listen       18081;
  28.         # 指定前端项目所在的位置
  29.         location / {
  30.             root /usr/share/nginx/html/hmall-admin;
  31.         }
  32.         error_page   500 502 503 504  /50x.html;
  33.         location = /50x.html {
  34.             root   html;
  35.         }
  36.         location /api {
  37.             rewrite /api/(.*)  /$1 break;
  38.             proxy_pass http://hmall:8080;
  39.         }
  40.     }
  41. }
复制代码
2.3 部署宿主机服务器

将代码和设置文件,部署至宿主机服务中,包管同一级目录。
2.4 创建容器并挂载



  • 将/root/nginx/nginx.conf挂载到/etc/nginx/ng``inx.conf
  • 将/root/nginx/html挂载到/usr/share/nginx/html
由于必要让nginx同时代理hmall-portal和hmall-admin两套前端资源,因此我们必要袒露两个端口:


  • 18080:对应hmall-portal
  • 18081:对应hmall-admin
并参加自界说网络,可以访问后台和数据库
  1. docker run -d \
  2.   --name nginx \
  3.   -p 18080:18080 \
  4.   -p 18081:18081 \
  5.   -v /root/nginx/html:/usr/share/nginx/html \
  6.   -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
  7.   --network ff \
  8.   nginx
复制代码
2.5 测试

通过浏览器访问:http://你的虚拟机ip:18080
3. DockerCompose

   Docker Compose就可以资助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来界说一组相关联的应用容器。
  3.1 根本语法

docker-compose.yml文件的根本语法可以参考官方文档:
https://docs.docker.com/compose/compose-file/compose-file-v3/
docker-compose文件中可以界说多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在界说某个应用的运行时参数,因此与docker run参数非常相似。
举例来说,用docker run部署MySQL的命令如下:
  1. docker run -d \
  2.   --name mysql \
  3.   -p 3306:3306 \
  4.   -e TZ=Asia/Shanghai \
  5.   -e MYSQL_ROOT_PASSWORD=123 \
  6.   -v ./mysql/data:/var/lib/mysql \
  7.   -v ./mysql/conf:/etc/mysql/conf.d \
  8.   -v ./mysql/init:/docker-entrypoint-initdb.d \
  9.   --network hmall
  10.   mysql
复制代码
如果用docker-compose.yml文件来界说,就是如许:
  1. version: "3.8"
  2. services:
  3.   mysql:
  4.     image: mysql
  5.     container_name: mysql
  6.     ports:
  7.       - "3306:3306"
  8.     environment:
  9.       TZ: Asia/Shanghai
  10.       MYSQL_ROOT_PASSWORD: 123
  11.     volumes:
  12.       - "./mysql/conf:/etc/mysql/conf.d"
  13.       - "./mysql/data:/var/lib/mysql"
  14.     networks:
  15.       - new
  16. networks:
  17.   new:
  18.     name: hmall
复制代码
对比如下:
docker run 参数docker compose 指令阐明–namecontainer_name容器名称-pports端口映射-eenvironment情况变量-vvolumes数据卷设置–networknetworks网络 示例
  1. version: "3.8"
  2. services:
  3.   mysql:
  4.     image: mysql
  5.     container_name: mysql
  6.     ports:
  7.       - "3306:3306"
  8.     environment:
  9.       TZ: Asia/Shanghai
  10.       MYSQL_ROOT_PASSWORD: 123
  11.     volumes:
  12.       - "./mysql/conf:/etc/mysql/conf.d"
  13.       - "./mysql/data:/var/lib/mysql"
  14.       - "./mysql/init:/docker-entrypoint-initdb.d"
  15.     networks:
  16.       - hm-net
  17.   hmall:
  18.     build:
  19.       context: .
  20.       dockerfile: Dockerfile
  21.     container_name: hmall
  22.     ports:
  23.       - "8080:8080"
  24.     networks:
  25.       - hm-net
  26.     depends_on:
  27.       - mysql
  28.   nginx:
  29.     image: nginx
  30.     container_name: nginx
  31.     ports:
  32.       - "18080:18080"
  33.       - "18081:18081"
  34.     volumes:
  35.       - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
  36.       - "./nginx/html:/usr/share/nginx/html"
  37.     depends_on:
  38.       - hmall
  39.     networks:
  40.       - hm-net
  41. networks:
  42.   hm-net:
  43.     name: hmall
复制代码
3.2 底子命令

编写好docker-compose.yml文件,就可以部署项目了。常见的命令:
https://docs.docker.com/compose/reference/
根本语法如下:
  1. docker compose [OPTIONS] [COMMAND]
复制代码
其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
类型参数或指令阐明Options-f指定compose文件的路径和名称-p指定project名称。project就是当前compose文件中设置的多个service的聚集,是逻辑概念Commandsup创建并启动所有service容器down停止并移除所有容器、网络ps列出所有启动的容器logs查看指定容器的日记stop停止容器start启动容器restart重启容器top查看运行的进程exec在指定的运行中容器中实行命令 示例
  1. # 1.进入root目录
  2. cd /root
  3. # 2.删除旧容器
  4. docker rm -f $(docker ps -qa)
  5. # 3.删除hmall镜像
  6. docker rmi hmall
  7. # 4.清空MySQL数据
  8. rm -rf mysql/data
  9. # 5.启动所有, -d 参数是后台启动
  10. docker compose up -d
  11. # 结果:
  12. [+] Building 15.5s (8/8) FINISHED
  13. => [internal] load build definition from Dockerfile                                    0.0s
  14. => => transferring dockerfile: 358B                                                    0.0s
  15. => [internal] load .dockerignore                                                       0.0s
  16. => => transferring context: 2B                                                         0.0s
  17. => [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster             15.4s
  18. => [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3  0.0s
  19. => [internal] load build context                                                       0.0s
  20. => => transferring context: 98B                                                        0.0s
  21. => CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo   0.0s
  22. => CACHED [3/3] COPY hm-service.jar /app.jar                                           0.0s
  23. => exporting to image                                                                  0.0s
  24. => => exporting layers                                                                 0.0s
  25. => => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71  0.0s
  26. => => naming to docker.io/library/root-hmall                                           0.0s
  27. [+] Running 4/4
  28. ✔ Network hmall    Created                                                             0.2s
  29. ✔ Container mysql  Started                                                             0.5s
  30. ✔ Container hmall  Started                                                             0.9s
  31. ✔ Container nginx  Started                                                             1.5s
  32. # 6.查看镜像
  33. docker compose images
  34. # 结果
  35. CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
  36. hmall               root-hmall          latest              32eebee16acd        362MB
  37. mysql               mysql               latest              3218b38490ce        516MB
  38. nginx               nginx               latest              605c77e624dd        141MB
  39. # 7.查看容器
  40. docker compose ps
  41. # 结果
  42. NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
  43. hmall               root-hmall          "java -jar /app.jar"     hmall               54 seconds ago      Up 52 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
  44. mysql               mysql               "docker-entrypoint.s…"   mysql               54 seconds ago      Up 53 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
  45. nginx               nginx               "/docker-entrypoint.…"   nginx               54 seconds ago      Up 52 seconds       80/tcp, 0.0.0.0:18080-18081->18080-18081/tcp, :::18080-18081->18080-18081/tcp
复制代码


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表