当前位置: 首页 > news >正文

Docker项目部署

目录

一、前端项目部署

1、上传文件

2、开启容器

3、测试

二、后端项目部署

1、打包java项目

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

3、构建镜像

4、开启容器

 5、测试

三、DockerCompose快速部署

基本语法


一、前端项目部署

1、上传文件

 里面包括页面和配置文件


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/json;

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       18080;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/hmall-portal;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
             # hhjava应用容器名
            proxy_pass http://hh:8080;
        }
    }
    server {
        listen       18081;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/hmall-admin;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://hh:8080;
        }
    }
}
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的命令如下:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --network hmall
  mysql

如果用docker-compose.yml文件来定义,就是这样:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    networks:
      - new
networks:
  new:
    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文件示例:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

 示例:

# 1.进入root目录
cd /root

# 2.删除旧容器
docker rm -f $(docker ps -qa)

# 3.删除hmall镜像
docker rmi hmall

# 4.清空MySQL数据
rm -rf mysql/data

# 5.启动所有, -d 参数是后台启动
docker compose up -d
# 结果:
[+] Building 15.5s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                    0.0s
 => => transferring dockerfile: 358B                                                    0.0s
 => [internal] load .dockerignore                                                       0.0s
 => => transferring context: 2B                                                         0.0s
 => [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster             15.4s
 => [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3  0.0s
 => [internal] load build context                                                       0.0s
 => => transferring context: 98B                                                        0.0s
 => CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo   0.0s
 => CACHED [3/3] COPY hm-service.jar /app.jar                                           0.0s
 => exporting to image                                                                  0.0s
 => => exporting layers                                                                 0.0s
 => => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71  0.0s
 => => naming to docker.io/library/root-hmall                                           0.0s
[+] Running 4/4
 ✔ Network hmall    Created                                                             0.2s
 ✔ Container mysql  Started                                                             0.5s
 ✔ Container hmall  Started                                                             0.9s
 ✔ Container nginx  Started                                                             1.5s

# 6.查看镜像
docker compose images
# 结果
CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
hmall               root-hmall          latest              32eebee16acd        362MB
mysql               mysql               latest              3218b38490ce        516MB
nginx               nginx               latest              605c77e624dd        141MB

# 7.查看容器
docker compose ps
# 结果
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
hmall               root-hmall          "java -jar /app.jar"     hmall               54 seconds ago      Up 52 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mysql               mysql               "docker-entrypoint.s…"   mysql               54 seconds ago      Up 53 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
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

相关文章:

  • 零基础转行网络工程师,过来人给的一些建议
  • 如何自学(黑客)网络安全技术————(详细分析学习思路)方法
  • CUDA+cuDNN+TensorRT 配置避坑指南
  • Git远程仓库
  • java 将字符串转为Base64格式与将Base64内容解析出来
  • 如何让FileBeat支持http的output插件
  • 升级Xcode 15后,出现大量Duplicate symbols问题
  • 第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第七节 - Python 中使用 % 进行字符串格式化)
  • Linux:TCP三握四挥简析
  • 【数据结构】手撕归并排序(含非递归)
  • Kafka:安装与简单使用
  • Java中的TCP通信(网络编程 二)
  • 使用华为eNSP组网试验⑷-OSPF多区域组网
  • 完美清晰,炫酷畅享——Perfectly Clear Video为你带来卓越的AI视频增强体验
  • Python之字符串格式化
  • 【Django 笔记】第一个demo
  • Linux-正则三剑客
  • 怎么将Linux上的文件上传到github上
  • 总结二:linux面经
  • PyTorch入门之【AlexNet】
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?
  • 《克莱默夫妇》导演罗伯特·本顿去世,终年92岁
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 港股持续拉升:恒生科技指数盘中涨幅扩大至6%,恒生指数涨3.3%
  • 视觉周刊|纪念苏联伟大卫国战争胜利80周年
  • 西藏日喀则市拉孜县发生5.5级地震,震源深度10公里