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

Docker 部署前后端分离项目

1.Docker 

1.1 什么是 Docker ?

Docker 是一种开源的 容器化平台,用于开发、部署和运行应用程序。它通过 容器(Container) 技术,将应用程序及其依赖项打包在一个轻量级、可移植的环境中,确保应用在不同计算环境中一致运行。

 1.2 Docker 核心概念

容器(Container)

类似于轻量级的虚拟机,但共享主机操作系统内核,启动更快、占用资源更少。每个容器运行一个独立的应用进程,与其他容器隔离。

镜像(Image)

容器的静态模板,包含运行应用所需的代码、库、环境变量和配置文件。

Dockerfile用于定义如何构建镜像的文本文件
Docker Hub官方的镜像仓库,提供大量预构建的镜像(如 MySQL、Python、Redis 等)
Docker Engine

Docker Daemon(后台服务)

Docker CLI(命令行工具)

REST API(用于交互)

2. Docker 基本命令

# 1.镜像
# 在线搜索镜像 可以不带版本号
docker search <镜像名称>:<版本号>
docker pull nginx:latest      # 拉取镜像 docker pull <镜像名>:<标签>
docker images                 # 查看本地所有镜像
docker rmi <镜像ID或镜像名>    # 删除本地镜像
docker build -t my-app:1.0 .  # 使用 Dockerfile 构建镜像 docker build -t <镜像名>:<标签> <Dockerfile路径># 2.容器
# 基于镜像启动一个新容器 docker run [选项] <镜像名>  -d:后台运行 -p:端口映射(主机端口:容器端口) --name:容器名
docker run -d -p 8080:80 --name my-nginx nginx 
docker exec -it <容器ID或容器名> /bin/bash  # 进入(运行的)容器
docker ps     # 查看正在运行的容器
docker ps -a  # 查看所有容器
docker stop <容器ID或容器名>     # 停止(运行的)容器
docker start <容器ID或容器名>    # 启动(停止的)容器
docker restart <容器ID或容器名>  # 重启(停止的)容器
docker rm <容器ID或容器名>       # 删除(停止的)容器
docker rm -f <容器ID或容器名>    # 强制删除(运行的)容器
docker logs <容器ID或容器名>     # 查看容器的日志# 3.网络
docker network ls              # 查看 Docker 网络
docker network create <网络名>  # 创建一个自定义网络
docker network connect <网络名> <容器ID或容器名>     # 将容器连接到指定网络
docker network disconnect <网络名> <容器ID或容器名>  # 断开容器与指定网络的连接# 3.数据卷(持久化数据存储)
docker volume create <卷名> # 创建一个数据卷
docker volume ls            # 查看所有数据卷
docker volume rm <卷名>     # 删除一个数据卷
docker run -v <卷名>:<容器内路径> <镜像名> # 启动容器时挂载数据卷(容器内外同步指定的目录和文件)# 4.其他命令
docker version # 查看 Docker 客户端和服务端版本
docker info    # 查看 Docker 的系统信息
docker system prune     # 清理未使用的镜像、容器、网络和数据卷
docker system prune -a  # 强制清理所有未使用的资源

3. 下载 Docker Desktop(Windows | Docker Docs)

4. Docker Desktop 拉取镜像、创建并启动容器 

4.1 拉取镜像仓库的镜像

4.2 根据镜像创建并启动容器

 5. Dockerfile 定义如何构建镜像 

# 使用官方 OpenJDK 镜像作为基础镜像
FROM openjdk:25-jdk# 设置工作目录
WORKDIR /app# 将当前目录的 springboot3-vue3-0.0.1-SNAPSHOT.jar 复制到容器 /app/app.jar
COPY springboot3-vue3-0.0.1-SNAPSHOT.jar app.jar# 暴露 Spring Boot 默认端口(根据 application.yml 调整)
EXPOSE 8080# 启动 Spring Boot 应用
ENTRYPOINT ["java", "-jar", "app.jar"]

6. docker-compose(推荐)

docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml 文件,您可以配置应用程序的服务、网络和卷等信息,然后使用一条命令来启动所有服务。(Docker Desktop 内置了 docker-compose)

6.1 docker-compose 命令(在 docker-compose.yml 目录执行以下命令

# 构建并以前台模式启动所有服务或某个服务(根据 docker-compose.yml 文件)
docker-compose up 
docker-compose up mysql
# 构建并以后台模式启动所有服务或某个服务
docker-compose up -d
docker-compose up -d mysql# 查看当前正在运行的服务的状态
docker-compose ps# 停止所有服务但不移除容器
docker-compose stop# 停止并移除所有服务以及它们的网络
docker-compose down# 构建或重新构建服务(不启动服务)
docker-compose build  # 用于当 Dockerfile 发生变化时重新构建镜像# 实时查看所有服务的日志输出
docker-compose logs -f # 重启所有服务
docker-compose restart# 重启特定服务,例如 'web'
docker-compose restart web=# 扩展某个服务的实例数量,比如将 'web' 服务扩展到 3 个实例
docker-compose up --scale web=3 -d# 在某个服务的容器内执行命令,例如在 'web' 服务中执行 'bash'
docker-compose exec web bash# 验证 docker-compose.yml 文件的配置是否正确
docker-compose config

6.2 docker-compose 定义和运行多容器

 6.2.1 拉取 minio、redis、nginx、mysql 镜像

6.2.2 服务目录结构

├── docker/
│   ├── backend/
│   │   ├── Dockerfile
│   │   └── springboot3-vue3-0.0.1-SNAPSHOT.jar(后端打的包)
│   ├── frontend/
│   │   ├── dist/                              (前端打的包)
│   │   └── nginx.conf                         (nginx 配置文件)
│   ├── minio/
│   │   └── data/                              (minio 持久化数据的文件夹)
│   ├── mysql/
│   │   ├── data/                              (mysql 持久化数据的文件夹)
│   │   └── springboot3_vue3_satoken.sql       (sql 文件按)
│   ├── redis/
│   │   └── redis.conf                         (redis 配置文件)
│   ├── docker-compose.yml                     (docker-compose 配置文件)
6.2.2.1 docker 目录 
6.2.2.2 backend 目录 
6.2.2.3 frontend 目录  
6.2.2.4 minio目录   
6.2.2.5 mysql 目录
6.2.2.6 redis目录   

6.2.2.7 (很重要!!!)docker-compose.yml
name: my-project
services:backend:# 构建镜像(在当前目录的 backend 目录下,根据 Dockerfile 构建镜像)build: context: ./backenddockerfile: Dockerfileimage: springboot-image:latestcontainer_name: springboot-containerports:- "8080:8080"depends_on:- redis- mysql- minioenvironment:# MySQL 数据库配置(容器内的 mysql 服务和端口)- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/springboot3_vue3_satoken- SPRING_DATASOURCE_USERNAME=***- SPRING_DATASOURCE_PASSWORD=***# Redis 配置- SPRING_REDIS_HOST=redis- SPRING_REDIS_PORT=6379- SPRING_REDIS_PASSWORD=    # 如果没有密码则留空- SPRING_REDIS_DATABASE=1   # 默认使用0号数据库# MinIO 配置(Spring Boot 应用访问 MinIO 的配置)- SPRING_MINIO_ENDPOINT=http://minio:9000- SPRING_MINIO_ACCESS_KEY=minioadmin- SPRING_MINIO_SECRET_KEY=minioadminrestart: unless-stoppedredis:image: redis:latestcontainer_name: redis-containerports:- "6379:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf# 启动 Redis 使用这个配置文件command: ["redis-server", "/usr/local/etc/redis/redis.conf"]restart: unless-stoppedmysql:image: mysql:latestcontainer_name: mysql-containerports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: ***MYSQL_DATABASE: springboot3_vue3_satokenvolumes:# 将容器内的 MySQL 数据目录 (/var/lib/mysql) 持久化到 ./mysql/data- ./mysql/data:/var/lib/mysql# MySQL 容器首次启动时,会自动执行 /docker-entrypoint-initdb.d/ 目录下的 .sql- ./mysql/springboot3_vue3_satoken.sql:/docker-entrypoint-initdb.d/springboot3_vue3_satoken.sqlrestart: unless-stoppednginx:image: nginx:latestcontainer_name: nginx-containerports:- "5173:80" volumes:- ./frontend/nginx.conf:/etc/nginx/nginx.conf- ./frontend/dist:/usr/share/nginx/html depends_on:- backendrestart: unless-stoppedminio:image: minio/minio:latestcontainer_name: minio-containerports:- "9000:9000"  # API 端口- "9001:9001"  # 控制台端口volumes:- ./minio/data:/data  # 持久化存储environment:MINIO_ROOT_USER: minioadminMINIO_ROOT_PASSWORD: minioadmin# 指定数据目录、API 端口、控制台端口command: ["server", "/data", "--address", ":9000", "--console-address", ":9001"]restart: unless-stopped

6.3 启动所有服务

6.3.1 cmd 启动所有服务和查看所有服务 

6.3.2 Docker Desktop 启动和查看所有服务 

6.4 进入容器内部

 6.5 访问 http://localhost:5173(Docker 部署前后端分离项目成功!!!)

相关文章:

Docker 部署前后端分离项目

1.Docker 1.1 什么是 Docker &#xff1f; Docker 是一种开源的 容器化平台&#xff0c;用于开发、部署和运行应用程序。它通过 容器&#xff08;Container&#xff09; 技术&#xff0c;将应用程序及其依赖项打包在一个轻量级、可移植的环境中&#xff0c;确保应用在不同计算…...

云游戏混合架构

云游戏混合架构通过整合本地计算资源与云端能力&#xff0c;形成了灵活且高性能的技术体系&#xff0c;其核心架构及技术特征可概括如下&#xff1a; 一、混合架构的典型模式 分层混合模式‌ 前端应用部署于公有云&#xff08;如渲染流化服务&#xff09;&#xff0c;后端逻辑…...

【小红书】API接口,获取笔记核心数据

小红书笔记核心数据API接口详解 - 深圳小于科技提供专业数据服务 深圳小于科技&#xff08;官网&#xff1a;https://www.szlessthan.com&#xff09;推出的小红书笔记核心数据API接口&#xff0c;为开发者提供精准的笔记互动数据分析能力&#xff0c;助力内容运营与商业决策。…...

会议室钥匙总丢失?换预约功能的智能门锁更安全

在企业日常运营中&#xff0c;会议室作为重要的沟通与协作场所&#xff0c;其管理效率与安全性直接影响着企业的运作顺畅度。然而&#xff0c;传统会议室管理方式中钥匙丢失、管理不便等问题频发&#xff0c;给企业带来了不少困扰。近期&#xff0c;某企业引入了启辰智慧预约系…...

Redis底层数据结构之跳表(SkipList)

SkipList是Redis有序结合ZSet底层的数据结构&#xff0c;也是ZSet的灵魂所在。与之相应的&#xff0c;Redis还有一个无序集合Set&#xff0c;这两个在底层的实现是不一样的。 标准的SkipList&#xff1a; 跳表的本质是一个链表。链表这种结构虽然简单清晰&#xff0c;但是在查…...

跨架构镜像打包问题及解决方案

问题背景&#xff1a; 需求&#xff1a; 有一个镜像是 docker.io 的&#xff0c;是 docker.io/aquasec/kube-bench:v0.10.6&#xff0c;我想把该镜像在本地电脑&#xff08;可翻墙&#xff09;下载下来&#xff0c;然后 docker save 打包成一个 tar 包&#xff0c;传输到服务器…...

云原生时代 Kafka 深度实践:05性能调优与场景实战

5.1 性能调优全攻略 Producer调优 批量发送与延迟发送 通过调整batch.size和linger.ms参数提升吞吐量&#xff1a; props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384); // 默认16KB props.put(ProducerConfig.LINGER_MS_CONFIG, 10); // 等待10ms以积累更多消息ba…...

Ubuntu安装Docker命令清单(以20.04为例)

在你虚拟机上完成Ubuntu的下载后打开终端&#xff01;&#xff01;&#xff01; Ubuntu安装Docker终极命令清单&#xff08;以20.04为例&#xff09; # 1. 卸载旧版本&#xff08;全新系统可跳过&#xff09; sudo apt-get remove docker docker-engine docker.io containerd …...

使用 Python 制作 GIF 动图,并打包为 EXE 可执行程序

文章目录 成品百度网盘下载&#x1f3ac; 使用 Python 制作 GIF 动图&#xff0c;并打包为 EXE 可执行程序&#xff08;含图形界面&#xff09;&#x1f9f0; 环境准备&#x1f4bb; 功能预览&#x1f9d1;‍&#x1f4bb; 完整代码&#xff08;图形界面 功能&#xff09;如何…...

HarmonyOS Next 弹窗系列教程(2)

HarmonyOS Next 弹窗系列教程&#xff08;2&#xff09; 上一章节我们讲了自定义弹出框 (openCustomDialog)&#xff0c;那对于一些简单的业务场景&#xff0c;不一定需要都是自定义&#xff0c;也可以使用 HarmonyOS Next 内置的一些弹窗效果。比如&#xff1a; 名称描述不依…...

Ubuntu 18.04 上源码安装 protobuf 3.7.0

&#x1f527; 1️⃣ 安装依赖 sudo apt update sudo apt install -y autoconf automake libtool curl make g unzip&#x1f4e5; 2️⃣ 下载源码 cd ~ git clone https://github.com/protocolbuffers/protobuf.git cd protobuf git checkout v3.7.0⚙️ 3️⃣ 编译 & 安…...

中小企业搭建网站选择虚拟主机还是云服务器?华为云有话说

这是一个很常见的问题&#xff0c;许多小企业在搭建网站时都会面临这个选择。虚拟主机和云服务器都有各自的优缺点&#xff0c;需要根据自己的需求和预算来决定。 虚拟主机是指将一台物理服务器分割成多个虚拟空间&#xff0c;每个空间都可以运行一个网站。虚拟主机的优点是价格…...

使用 HTML + JavaScript 在高德地图上实现物流轨迹跟踪系统

在电商行业蓬勃发展的今天&#xff0c;物流信息查询已成为人们日常生活中的重要需求。本文将详细介绍如何基于高德地图 API 利用 HTML JavaScript 实现物流轨迹跟踪系统的开发。 效果演示 项目概述 本项目主要包含以下核心功能&#xff1a; 地图初始化与展示运单号查询功能…...

19-项目部署(Linux)

Linux是一套免费使用和自由传播的操作系统。说到操作系统&#xff0c;大家比较熟知的应该就是Windows和MacOS操作系统&#xff0c;我们今天所学习的Linux也是一款操作系统。 我们作为javaEE开发工程师&#xff0c;将来在企业中开发时会涉及到很多的数据库、中间件等技术&#…...

html基础01:前端基础知识学习

html基础01&#xff1a;前端基础知识学习 1.个人建立打造 -- 之前知识的小总结1.1个人简历展示1.2简历信息填写页面 1.个人建立打造 – 之前知识的小总结 1.1个人简历展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…...

Golang学习之旅

Golang学习之旅&#xff1a;初探Go语言的奥秘 在当今这个快速发展的技术时代&#xff0c;编程语言层出不穷&#xff0c;每一种都有其独特的魅力和适用场景。作为一名对技术充满热情的开发者&#xff0c;我一直在探索新的知识&#xff0c;以提升自己的编程技能。最近&#xff0…...

【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…...

基于RK3576+FPGA芯片构建的CODESYS软PLC Linux实时系统方案,支持6T AI算力

基于RK3576芯片构建的CODESYS软PLC Linux实时系统方案&#xff0c;结合了异构计算架构与工业实时控制技术&#xff0c;主要特点如下&#xff1a; 一、硬件架构设计 ‌异构多核协同‌ ‌Cortex-A72四核‌&#xff08;2.3GHz&#xff09;&#xff1a;处理运动轨迹规划、AI视觉等…...

鸿蒙OSUniApp复杂表单与动态验证实践:打造高效的移动端表单解决方案#三方框架 #Uniapp

UniApp复杂表单与动态验证实践&#xff1a;打造高效的移动端表单解决方案 引言 在移动应用开发中&#xff0c;表单处理一直是一个既常见又具有挑战性的任务。随着HarmonyOS生态的蓬勃发展&#xff0c;越来越多的开发者开始关注跨平台解决方案。本文将深入探讨如何使用UniApp框…...

在linux系统上搭建git服务器(ssh协议)

1.在windows上生成RSA密钥对 ssh-keygen -t rsa -b 2048 -C"git用户名/邮箱地址" 命令执行后会在 C:\Users\${windows登录账户}\.ssh 目录下生成密钥对 其中 id_rsa 为私钥&#xff0c;id_rsa.pub 为公钥 2.在 linux 系统上登记公钥 vim ~/.ssh/authorized_keys…...

适配器模式:让不兼容接口协同工作

文章目录 1. 适配器模式概述2. 适配器模式的分类2.1 类适配器2.2 对象适配器 3. 适配器模式的结构4. C#实现适配器模式4.1 对象适配器实现4.2 类适配器实现 5. 适配器模式的实际应用场景5.1 第三方库集成5.2 遗留系统集成5.3 系统重构与升级5.4 跨平台开发 6. 类适配器与对象适…...

NodeJS全栈开发面试题讲解——P12高性能场景题

12.1 设计一个高并发点赞接口&#xff0c;如何优化性能&#xff1f; 设计要点&#xff1a; 问题&#xff1a; 点赞操作是高频写操作&#xff0c;数据库直接写可能成为瓶颈。 优化方案&#xff1a; 缓存计数 异步落库 点赞先写缓存&#xff08;Redis Hash / Sorted Set&…...

DDP与FSDP:分布式训练技术全解析

DDP与FSDP:分布式训练技术全解析 DDP(Distributed Data Parallel)和 FSDP(Fully Sharded Data Parallel)均为用于深度学习模型训练的分布式训练技术,二者借助多 GPU 或多节点来提升训练速度。 1. DDP(Distributed Data Parallel) 实现原理 数据并行:把相同的模型复…...

【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API

Spring AI框架快速入门 一、前言二、前期准备2.1 运行环境2.2 maven配置2.3 api-key申请 三、Chat Client API3.1 导入pom依赖3.2 配置application.properties文件3.3 创建 ChatClient3.3.1 使用自动配置的 ChatClient.Builder3.3.2 使用多个聊天模型 3.4 ChatClient请求3.5 Ch…...

【笔记】在 MSYS2(MINGW64)中正确安装 Rust

#工作记录 1. 环境信息 Windows系统: MSYS2 MINGW64当前时间: 2025年6月1日Rust 版本: rustc 1.87.0 (17067e9ac 2025-05-09) (Rev2, Built by MSYS2 project) 2. 安装步骤 步骤 1: 更新系统包数据库并升级已安装的包 首先&#xff0c;确保我们的 MSYS2 系统是最新状态。打…...

从汇编的角度揭秘C++引用,豁然开朗

C中的引用是指已有对象的别名&#xff0c;可以通过该别名访问并修改被引用的对象。那么其背后的原理是什么呢&#xff1f;引用是否会带来额外的开销呢&#xff1f;我们从一段代码入手&#xff0c;来分析一下引用的本质。 #include <stdio.h> int main() {int a 10;int …...

设计模式系列(07):建造者模式(Builder)

本文为设计模式系列第7篇&#xff0c;聚焦创建型模式中的建造者模式&#xff0c;涵盖定义、原理、实际业务场景、优缺点、最佳实践及详细代码示例&#xff0c;适合系统学习与实战应用。 目录 1. 模式概述2. 使用场景3. 优缺点分析4. 实际应用案例5. 结构与UML类图6. 代码示例7…...

Maven 项目中集成数据库文档生成工具

在 Maven 项目中&#xff0c;可以通过集成 数据库文档生成工具&#xff08;如 screw-maven-plugin、mybatis-generator 或 liquibase&#xff09;来自动生成数据库文档。以下是使用 screw-maven-plugin&#xff08;推荐&#xff09;的完整配置步骤&#xff1a; 1. 添加插件配置…...

聊聊Tomato Architecture

序 本文主要研究一下Tomato Architecture Clean/Onion/Hexagonal/Ports&Adapters Architectures Clean Architecture clean architecture定义了四层结构&#xff0c;最内层是entities(enterprise business rules)&#xff0c;再往外是use cases(application business ru…...

小白的进阶之路系列之十二----人工智能从初步到精通pytorch综合运用的讲解第五部分

在本笔记本中,我们将针对Fashion-MNIST数据集训练LeNet-5的变体。Fashion-MNIST是一组描绘各种服装的图像瓦片,有十个类别标签表明所描绘的服装类型。 # PyTorch model and training necessities import torch import torch.nn as nn import torch.nn.functional as F impor…...