• Docker项目部署


    目录

    一、前端项目部署

    1、上传文件

    2、开启容器

    3、测试

    二、后端项目部署

    1、打包java项目

    2、将jar包和Dockerfile文件长传到Linux系统

    3、构建镜像

    4、开启容器

     5、测试

    三、DockerCompose快速部署

    基本语法


    一、前端项目部署

    1、上传文件

     里面包括页面和配置文件

    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. keepalive_timeout 65;
    10. server {
    11. listen 18080;
    12. # 指定前端项目所在的位置
    13. location / {
    14. root /usr/share/nginx/html/hmall-portal;
    15. }
    16. error_page 500 502 503 504 /50x.html;
    17. location = /50x.html {
    18. root html;
    19. }
    20. location /api {
    21. rewrite /api/(.*) /$1 break;
    22. # hhjava应用容器名
    23. proxy_pass http://hh: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://hh:8080;
    39. }
    40. }
    41. }
    2、开启容器

     docker run -d \
      --name nginx \   #容器名称
      -p 18080:18080 \  #映射端口
      -p 18081:18081 \
      -v /root/nginx/html:/etc/nginx/html \  #自定义挂载数据卷
      -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \  #挂载配置文件
      --network demo \  #网络这里用的自定义网络
      nginx #镜像

    3、测试

    二、后端项目部署

    1、打包java项目
    2、将jar包和Dockerfile文件长传到Linux系统

    3、构建镜像

    docker build -t test .

     

    4、开启容器

    docker run -d --name hh -p 8080:8080 --network demo test

    docker run -d 后台启动并运行 

    --name hh 名称

    -p 8080:8080 端口

    --network demo 网络

    test 镜像

     查看日志,成功运行

    注意:要确保mysql的ip和程序设置的ip在一个频段

    mysql的ip:docker inspect mysql

     程序设置的ip:docker inspect hh

     5、测试

    三、DockerCompose快速部署

    手动部署项目太麻烦了,而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

    docker-compose.yml文件的基本语法可以参考官方文档:

    Compose file version 3 reference | Docker Docs

    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 指令

    说明

    --name

    container_name

    容器名称

    -p

    ports

    端口映射

    -e

    environment

    环境变量

    -v

    volumes

    数据卷配置

    --network

    networks

    网络

     如图所示:

    编写好docker-compose.yml文件,就可以部署项目了。常见的命令:

    Overview of docker compose CLI | Docker Docs

    基本语法
    docker compose [OPTIONS] [COMMAND]

    类型

    参数或指令

    说明

    Options

    -f

    指定compose文件的路径和名称

    -p

    指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念

    Commands

    up

    创建并启动所有service容器

    down

    停止并移除所有容器、网络

    ps

    列出所有启动的容器

    logs

    查看指定容器的日志

    stop

    停止容器

    start

    启动容器

    restart

    重启容器

    top

    查看运行的进程

    exec

    在指定的运行中容器中执行命令

     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. - "./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

     示例:

    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

  • 相关阅读:
    多线程与高并发(一)
    RocketMQ高级特性
    ZKP4.1 SNARKs via Interactive Proofs (Justin Thaler)
    聚焦新一代技术平台,智能低代码平台成为新趋势
    QT工程编译过程学习
    人工神经网络技术的优点,浅谈人工神经网络
    Java 跨域解决
    如何将超大文件压缩到最小
    点击button按钮整体页面刷新
    Python第一阶段-第十章-Python基础综合案例-数据可视化
  • 原文地址:https://blog.csdn.net/qi341500/article/details/133517741