全链路压测实战:从链路梳理到瓶颈定位的完整方法论
2026/10/8 20:54:26
你需要一套从本地准备到云服务器落地的完整流程,以下步骤涵盖环境准备、项目打包、镜像构建 / 传输、容器运行全链路,适配绝大多数 Web 项目(Java、Python、Node.js 等)。
首先确保云服务器满足基础要求:
bash
运行
# 以 CentOS 为例 # 1. 卸载旧版本(如有) yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 2. 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 添加 Docker 软件源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 4. 安装 Docker CE yum install -y docker-ce docker-ce-cli containerd.io # 5. 启动 Docker 并设置开机自启 systemctl start docker systemctl enable docker # 6. 验证安装成功 docker --versionbash
运行
# 以 Ubuntu 为例 apt update && apt install -y docker.io systemctl start docker systemctl enable docker docker --versionbash
运行
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reloadDockerfile(核心配置文件,用于构建镜像)先将项目打包为可执行文件 / 部署包,示例如下:
bash
运行
# Maven mvn clean package -Dmaven.test.skip=true # 打包后在 target 目录下生成 xxx.jar 文件requirements.txt依赖文件)package.json(后端项目)在项目根目录下创建Dockerfile(无后缀名),以下是 3 个主流项目的示例模板:
dockerfile
# 基础镜像(对应项目的 JDK 版本,如 JDK 8) FROM openjdk:8-jdk-alpine # 作者信息(可选) MAINTAINER yourname <your@email.com> # 将本地 jar 包复制到容器内(左侧为本地 jar 包路径,右侧为容器内路径) COPY target/xxx.jar /app.jar # 暴露项目运行端口(与项目配置的端口一致,如 8080) EXPOSE 8080 # 容器启动命令(运行 jar 包) ENTRYPOINT ["java", "-jar", "/app.jar"]dockerfile
# 基础镜像 FROM python:3.9-alpine # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt /app/ # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制项目所有文件 COPY . /app/ # 暴露端口 EXPOSE 5000 # 启动命令 CMD ["python", "app.py"]dockerfile
# 阶段 1:构建项目 FROM node:16-alpine as build WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . ./ RUN npm run build # 阶段 2:使用 Nginx 部署 FROM nginx:alpine # 复制构建后的 dist 目录到 Nginx 静态资源目录 COPY --from=build /app/dist /usr/share/nginx/html # 复制自定义 Nginx 配置(可选) # COPY nginx.conf /etc/nginx/conf.d/default.conf # 暴露 80 端口 EXPOSE 80 # 启动 Nginx CMD ["nginx", "-g", "daemon off;"]在项目根目录(Dockerfile 所在目录)执行构建命令:
bash
运行
# 格式:docker build -t 镜像名称:标签 . # 示例:构建名为 my-project,标签为 v1 的镜像 docker build -t my-project:v1 ..表示「当前目录」(Dockerfile 所在目录)docker images可查看本地镜像列表有两种常用方式,按需选择:
bash
运行
docker login # 输入用户名和密码bash
运行
docker tag my-project:v1 your-docker-username/my-project:v1bash
运行
docker push your-docker-username/my-project:v1bash
运行
docker pull your-docker-username/my-project:v1bash
运行
# 格式:docker save -o 导出文件名.tar 镜像名:标签 docker save -o my-project-v1.tar my-project:v1bash
运行
# 格式:scp 本地tar包路径 服务器用户名@服务器IP:服务器保存路径 scp my-project-v1.tar root@123.45.67.89:/root/bash
运行
# 格式:docker load -i 服务器上的tar包路径 docker load -i /root/my-project-v1.tardocker images验证镜像是否存在在云服务器上执行容器启动命令,运行项目:
bash
运行
# 核心命令:docker run(后台运行+端口映射+容器命名) # 格式:docker run -d --name 容器名称 -p 宿主端口:容器端口 镜像名:标签 # 示例: # -d:后台运行容器 # --name my-app-container:给容器命名为 my-app-container # -p 8080:8080:将服务器的 8080 端口映射到容器的 8080 端口(宿主端口:容器端口) # my-project:v1:要运行的镜像名称和标签 docker run -d --name my-app-container -p 8080:8080 my-project:v1| 参数 | 作用 |
|---|---|
-d | 后台运行容器(守护进程模式),避免终端关闭后容器停止 |
--name | 给容器指定唯一名称,方便后续管理(如启动 / 停止 / 删除) |
-p | 端口映射(核心!):将云服务器的「宿主端口」映射到容器的「应用端口」,外部可通过「服务器 IP: 宿主端口」访问项目 |
-v | 数据卷挂载(可选,用于持久化数据,如数据库文件、配置文件):docker run -d --name my-app -p 8080:8080 -v /root/data:/app/data my-project:v1表示将服务器的/root/data目录挂载到容器的/app/data目录 |
bash
运行
# 查看所有运行中的容器 docker ps # 查看所有容器(包括停止的) docker ps -ahttp://云服务器IP:宿主端口(如http://123.45.67.89:8080),能正常访问则部署成功bash
运行
# 格式:docker logs 容器名称/容器ID docker logs my-app-container # 实时查看日志 docker logs -f my-app-containerbash
运行
# 停止容器 docker stop my-app-container # 启动已停止的容器 docker start my-app-container # 重启容器 docker restart my-app-container # 删除容器(需先停止容器) docker rm my-app-container # 删除镜像(需先删除依赖该镜像的容器) docker rmi my-project:v1Dockerfile是镜像构建的核心,需根据项目类型编写对应模板docker build(构建镜像)、docker run -d -p(后台运行 + 端口映射)、docker ps(查看容器)