docker常用指令整理

docker常用指令整理

  • 一、镜像管理
    • [1. 镜像搜索与下载](#1. 镜像搜索与下载)
    • [2. 镜像查看与清理](#2. 镜像查看与清理)
    • [3. 镜像构建与导出](#3. 镜像构建与导出)
  • 二、容器操作
    • [1. 容器启停](#1. 容器启停)
    • [2. 容器资源限制](#2. 容器资源限制)
    • [3. 进入容器](#3. 进入容器)
    • [4. 文件操作](#4. 文件操作)
    • [5. 端口映射与目录挂载](#5. 端口映射与目录挂载)
    • [6. 容器调试](#6. 容器调试)
    • [7. 日志管理](#7. 日志管理)
  • 三、日志与信息查看
  • 四、网络管理
    • [1. 网络操作](#1. 网络操作)
    • [2. 容器间通信](#2. 容器间通信)
    • [3. 网络诊断](#3. 网络诊断)
    • [4. 资源清理](#4. 资源清理)
  • 五、数据卷管理
  • [六、Docker Compose](#六、Docker Compose)
    • [1. 基础操作](#1. 基础操作)
    • [2. 常用命令](#2. 常用命令)
  • [七、Dockerfile 常用指令](#七、Dockerfile 常用指令)
  • 八、Dockerfile关键指令说明
    • [1. FROM - 指定基础镜像](#1. FROM - 指定基础镜像)
    • [2. LABEL - 添加元数据](#2. LABEL - 添加元数据)
    • [3. WORKDIR - 设置工作目录](#3. WORKDIR - 设置工作目录)
    • [4. COPY - 复制文件(宿主机 → 镜像)](#4. COPY - 复制文件(宿主机 → 镜像))
    • [5. RUN - 执行命令](#5. RUN - 执行命令)
    • [6. EXPOSE - 声明暴露端口](#6. EXPOSE - 声明暴露端口)
    • [7. ENV - 设置环境变量](#7. ENV - 设置环境变量)
    • [8. CMD - 容器默认启动命令](#8. CMD - 容器默认启动命令)
    • [9. ENTRYPOINT - 容器入口点](#9. ENTRYPOINT - 容器入口点)
    • 快速参考表格
  • 九、系统维护
  • 十、实用技巧
    • [1. 批量操作](#1. 批量操作)
    • [2. 容器健康检查](#2. 容器健康检查)
  • 十一、一键式部署方案
    • [1. Docker Compose 标准模板](#1. Docker Compose 标准模板)
    • [2. 生产级一键部署脚本](#2. 生产级一键部署脚本)
    • [3. 使用 Docker Stack 部署集群服务](#3. 使用 Docker Stack 部署集群服务)
  • 十二、备份与迁移
    • [1. 全量备份与恢复](#1. 全量备份与恢复)
    • [2. 单容器热迁移](#2. 单容器热迁移)
  • 十三、标准项目结构与Dockerfile解析
  • 十四、核心工作流与角色比喻
  • 十五、关键要点总结
  • 学习资源推荐

一、镜像管理

1. 镜像搜索与下载

bash 复制代码
# 搜索 Docker Hub 中的镜像
docker search nginx

# 拉取镜像(不指定标签默认用 latest)
docker pull nginx
docker pull nginx:1.23

2. 镜像查看与清理

bash 复制代码
# 列出本地所有镜像
docker images
docker image ls

# 显示镜像详细信息
docker inspect nginx:latest

# 删除镜像(按 ID 或名称)
docker rmi nginx:1.23
docker image rm nginx

# 清理所有未使用的镜像
docker image prune -a

3. 镜像构建与导出

bash 复制代码
# 构建镜像(需在 Dockerfile 所在目录)
docker build -t myapp:v1 .

# 导出镜像为 tar 文件
docker save -o myapp.tar myapp:v1

# 从 tar 文件导入镜像
docker load -i myapp.tar

# 查看镜像构建历史
docker history redis

若出现:

bash 复制代码
ERROR: failed to solve: the Dockerfile cannot be empty

则需要先配置Dockerfile文件内容,例如:

bash 复制代码
FROM redis:alpine
# 可选:添加自定义配置
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]

其中COPY [宿主机中的文件路径] [容器内指定路径]

Docker 构建时只能访问 构建上下文目录,即当前路径下的文件,可以手动将宿主文件拷贝过来,不然无法访问


二、容器操作

1. 容器启停

bash 复制代码
# 启动新容器(前台运行)
docker run -it --name mycontainer centos:7 /bin/bash

# 启动容器并后台运行
docker run -d --name webserver nginx

# 停止容器
docker stop webserver

# 强制停止容器(发送 SIGKILL)
docker kill webserver

# 启动已停止的容器
docker start webserver

# 重启容器
docker restart webserver

# 删除容器(需先停止)
docker rm webserver

# 强制删除运行中的容器
docker rm -f webserver

# 清理所有停止的容器
docker container prune

2. 容器资源限制

bash 复制代码
# 限制内存和 CPU
docker run -d --name myapp \
  --memory=512m \
  --cpus=1.5 \
  nginx

# 限制容器日志大小
docker run -d --name logdemo \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx

3. 进入容器

bash 复制代码
# 进入运行中的容器(推荐方式)
docker exec -it webserver /bin/bash

# 附加到容器主进程(退出会导致容器停止)
docker attach webserver

4. 文件操作

bash 复制代码
# 从容器复制文件到宿主机
docker cp webserver:/etc/nginx/nginx.conf ./nginx.conf

# 从宿主机复制文件到容器
docker cp ./config.txt webserver:/app/config.txt

5. 端口映射与目录挂载

bash 复制代码
# 映射宿主机端口到容器
docker run -d -p 8080:80 --name nginx nginx

工作原理:当在宿主机(或同一网络的其他机器)上访问 http://localhost:8080 时,流量会被 Docker 引擎转发到容器的 80 端口,从而访问到 Nginx 服务。
用途:这是暴露容器服务给外部用户的唯一方式(除了更复杂的网络模式)。常用于运行 Web 服务器、数据库等需要对外提供访问的服务

# 挂载宿主机目录到容器
docker run -d -v /host/data:/container/data --name volumedemo nginx

工作原理:容器内 /container/data 目录下的任何读写操作,都会直接反映在宿主机的 /host/data 目录上。这是一个双向同步的过程。
用途:数据持久化;保存容器内产生的数据(如数据库文件、日志),即使容器被删除,数据仍保留在宿主机。

# 使用只读挂载
docker run -d -v /host/config:/etc/nginx:ro nginx

工作原理:容器内的 /etc/nginx 目录可以读取宿主机 /host/config 目录下的文件,但无法对其进行修改、删除或创建。
用途:安全地提供配置文件;例如,将编写好的 Nginx 配置挂载给容器,避免容器内进程意外更改配置。

6. 容器调试

bash 复制代码
# 查看容器实时资源占用(类似 top)
docker stats

# 查看容器文件系统变化(类似 git diff)
docker diff <container>

# 导出容器文件系统为 tar 包
docker export <container> > container_fs.tar

# 将运行中的容器保存为新镜像
docker commit <container> new_image:tag

# 查看容器启动失败日志(适用于 restart=always 的容器)
docker logs --since 5m <container>

7. 日志管理

bash 复制代码
# 限制容器日志大小(全局配置)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

# 查看日志最后 100 行并实时跟踪
docker logs --tail 100 -f <container>

三、日志与信息查看

bash 复制代码
# 查看容器日志(实时跟踪)
docker logs -f webserver

# 查看最近100行日志
docker logs --tail=100 webserver

# 查看容器资源使用情况
docker stats webserver

# 查看容器进程列表
docker top webserver

# 查看容器详细信息
docker inspect webserver

# 查看容器端口映射
docker port webserver

四、网络管理

1. 网络操作

bash 复制代码
# 列出所有网络
docker network ls

# 创建自定义网络
docker network create mynet

# 将容器连接到网络
docker network connect mynet webserver

# 查看网络详细信息
docker network inspect mynet

2. 容器间通信

bash 复制代码
# 使用容器名称直接通信(需在同一网络)
docker run -d --name app1 --network mynet myapp
docker run -d --name app2 --network mynet myapp
# app2 中可以直接 ping app1

3. 网络诊断

bash 复制代码
# 在容器内执行网络诊断(需容器有 curl 工具)
docker exec -it <container> curl -v http://target-service

# 查看容器网络命名空间的 iptables 规则
docker run -it --net container:<container> nicolaka/netshoot iptables -L

# 使用网络诊断专用镜像
docker run -it --rm nicolaka/netshoot

4. 资源清理

bash 复制代码
# 删除所有未被使用的网络
docker network prune

# 清理构建缓存(适用于 BuildKit)
docker builder prune

# 一键清理所有无用资源(容器/镜像/网络/构建缓存)
docker system prune -a --volumes

五、数据卷管理

bash 复制代码
# 创建命名数据卷
docker volume create mydata

# 查看数据卷列表
docker volume ls

# 使用数据卷
docker run -d -v mydata:/app/data --name db mysql

# 删除未使用的数据卷
docker volume prune

六、Docker Compose

1. 基础操作

bash 复制代码
# 启动服务(前台运行)
docker compose up

# 启动服务并后台运行
docker compose up -d

# 停止并删除容器
docker compose down

# 查看服务状态
docker compose ps

# 查看服务日志
docker compose logs -f

2. 常用命令

bash 复制代码
# 构建/重新构建服务镜像
docker compose build

# 启动已存在的服务
docker compose start

# 停止运行中的服务
docker compose stop

# 重启服务
docker compose restart

# 执行单次命令
docker compose run web python manage.py migrate

七、Dockerfile 常用指令

bash 复制代码
Dockerfile是用来定义如何构建单个容器镜像的

构建Dockerfile

bash 复制代码
# 语法
docker build -t <镜像名:标签> -f /路径/Dockerfile <构建上下文路径>

# 示例:Dockerfile 在父目录的 dockerfiles 文件夹中
docker build -t myapp:v1 -f ../dockerfiles/Dockerfile .

# 示例:Dockerfile 在绝对路径下
docker build -t myapp:v1 -f /home/user/project/Dockerfile /home/user/project

Docker 镜像构建的核心指令 docker build。理解它关键在于分清三个概念:要构建什么(-t)、用什么指令构建(-f)、从哪里获取构建材料(构建上下文路径)

bash 复制代码
FROM ubuntu:22.04                # 基础镜像
LABEL maintainer="your@email.com" # 元数据
WORKDIR /app                     # 设置工作目录
COPY . .                         # 复制文件
RUN apt update && apt install -y python3  # 执行命令
EXPOSE 80                        # 声明端口
ENV APP_ENV=production           # 设置环境变量
CMD ["python3", "app.py"]        # 容器启动命令
ENTRYPOINT ["/entrypoint.sh"]    # 入口点脚本

八、Dockerfile关键指令说明

可以将 Dockerfile 理解为一个自动化装机清单,而每条指令就是清单上的一个步骤。

1. FROM - 指定基础镜像

  • 含义:所有 Dockerfile 的第一条有效指令。它指定了构建新镜像所基于的"起点"或"操作系统环境"。
  • 语法:FROM [:] [AS ]
  • 示例:
bash 复制代码
FROM ubuntu:22.04
FROM python:3.11-slim
FROM node:18-alpine AS builder  # 使用别名,用于多阶段构建
  • 最佳实践:尽量使用官方镜像和特定版本标签(如 alpine, slim 等变体),以保证安全性和可复现性,并减小镜像体积。

2. LABEL - 添加元数据

  • 含义:为镜像添加描述性信息,如维护者、版本、描述等。这些是键值对形式的元数据。
  • 语法:LABEL = = ...
  • 示例:
bash 复制代码
LABEL maintainer="dev@example.com"
LABEL version="1.0" description="这是一个Web应用镜像"
  • 作用:方便镜像的管理和筛选,可以通过 docker inspect 查看。

3. WORKDIR - 设置工作目录

  • 含义:设置后续指令(如 RUN, COPY, CMD 等)执行的默认当前目录。若目录不存在,Docker 会自动创建
  • 语法:WORKDIR /path/to/workdir
  • 示例:
bash 复制代码
WORKDIR /usr/src/app
COPY . .          # 此时复制到的是 /usr/src/app 目录下
RUN pwd           # 输出 /usr/src/app
  • 最佳实践:使用 WORKDIR,避免使用 RUN cd ... && do-something 这种容易出错的写法,它使路径更清晰、可维护。

4. COPY - 复制文件(宿主机 → 镜像)

源代码 src 确实需要"拷贝"到应用容器内,但这个动作不是手动的,而是通过在 Dockerfile 中使用 COPY 指令自动完成的。 源代码通常就放在与 Dockerfile 同级的目录中(或其子目录),这是标准做法

  • 含义:将宿主机构建上下文中的文件或目录复制到镜像内的指定路径。
  • 语法:
    • COPY <源路径>... <目标路径>
    • COPY ["<源路径>",..., "<目标路径>"] (适用于路径中包含空格的情况)
  • 示例:
bash 复制代码
COPY package.json ./
COPY ./src ./src
COPY hom* /mydir/      # 通配符复制
  • 注意:<源路径> 必须是构建上下文内的路径。通常使用 .dockerignore 文件来排除不需要复制的文件。

5. RUN - 执行命令

  • 含义:在构建镜像的过程中,在镜像内部执行指定的 Shell 命令。常用于安装软件包、编译代码等。
  • 语法:
    • Shell 格式: RUN <命令> (例如 RUN apt-get update)
    • Exec 格式: RUN ["可执行文件", "参数1", "参数2"]
  • 示例:
bash 复制代码
RUN apt-get update && apt-get install -y \
    nginx \
    curl \
    && rm -rf /var/lib/apt/lists/*   # 清理缓存以减小镜像体积
RUN pip install -r requirements.txt
  • 最佳实践:将多个命令用 && 连接在一个 RUN 指令中执行,并及时清理临时文件,这样可以减少镜像层数,有效缩小最终镜像体积。

6. EXPOSE - 声明暴露端口

  • 含义:声明容器在运行时将监听的网络端口。这只是一个文档性质的说明,方便使用者了解。
  • 语法:EXPOSE <端口> [<端口>/<协议>...]
  • 示例:
bash 复制代码
EXPOSE 80
EXPOSE 443/tcp
EXPOSE 3000 8080
  • 关键点:EXPOSE 本身并不发布端口。要真正将端口映射到宿主机,必须在运行容器时使用 docker run -p <宿主机端口>:<容器端口> 参数。

7. ENV - 设置环境变量

  • 含义:设置将在构建阶段和容器运行阶段都可用的环境变量。
  • 语法:
    • ENV
    • ENV = ...
  • 示例:
bash 复制代码
ENV NODE_ENV production
ENV APP_HOME=/app PATH=/app/bin:$PATH
  • 作用:
    1. 影响后续的构建步骤(如 RUN 命令)。
    2. 容器运行时,这些变量依然存在,可以被应用程序读取。
    3. 可以通过 docker run -e = 在运行时覆盖。

8. CMD - 容器默认启动命令

  • 含义:指定容器启动时默认执行的命令。每个 Dockerfile 只能有一个 CMD。如果 docker run 末尾指定了其他命令,则 CMD 被覆盖。
  • 语法:
    • Exec 格式(推荐): CMD ["可执行文件","参数1","参数2"]
    • Shell 格式: CMD 命令 参数1 参数2
    • 作为 ENTRYPOINT 的参数*: CMD ["参数1","参数2"]
  • 示例:
bash 复制代码
# 格式1: Exec格式,能正确处理信号
CMD ["nginx", "-g", "daemon off;"]
# 格式2: Shell格式,会在/bin/sh -c中执行
CMD python3 app.py
  • 最佳实践:优先使用 Exec 格式,这样容器内的主进程会以 PID 1 运行,并能正确接收 Unix 信号(如 SIGTERM),实现优雅停止。

9. ENTRYPOINT - 容器入口点

  • 含义:配置容器启动后始终执行的可执行程序。它让容器表现得像一个独立的可执行文件。
  • 语法:
    • Exec 格式(推荐): ENTRYPOINT ["可执行文件","参数1","参数2"]
  • 与 CMD 的关系(核心难点):
    • 只有 ENTRYPOINT:CMD 的内容会作为参数传递给 ENTRYPOINT。
    • 两者共存:容器启动时执行的完整命令是: 。
    • 覆盖规则:docker run 末尾的参数会替换 CMD,但会追加给 ENTRYPOINT(除非使用 --entrypoint 标志覆盖)。
  • 示例:
bash 复制代码
ENTRYPOINT ["/docker-entrypoint.sh"]  # 入口点脚本
CMD ["nginx", "-g", "daemon off;"]    # 默认参数
  • 运行 docker run my-nginx,实际执行:/docker-entrypoint.sh nginx -g daemon off;
  • 运行 docker run my-nginx /bin/bash,实际执行:/docker-entrypoint.sh /bin/bash
  • 用途:用于编写"可执行化"的容器,或进行统一的启动前初始化(如等待数据库、处理配置)。

快速参考表格

指令 作用阶段 主要用途 备注
FROM 构建 指定基础镜像 必须是第一条非注释指令
LABEL 构建 添加元数据 键值对,用于镜像管理
WORKDIR 构建/运行 设置工作目录 影响后续所有指令的当前路径
COPY 构建 复制宿主机文件到镜像 源路径必须在构建上下文内
RUN 构建 执行命令,安装软件 每一条都会创建新的镜像层
EXPOSE 文档 声明容器监听端口 实际映射需用 -p 参数
ENV 构建/运行 设置环境变量 运行时可通过 -e 覆盖
CMD 运行 指定容器默认启动命令 可被 docker run 后的命令覆盖
ENTRYPOINT 运行 指定容器入口启动命令 使容器像一个可执行程序

九、系统维护

bash 复制代码
# 查看 Docker 版本
docker version

# 查看系统级信息
docker info

# 查看磁盘使用情况
docker system df

十、实用技巧

1. 批量操作

bash 复制代码
# 停止所有运行中的容器
docker stop $(docker ps -q)

# 删除所有容器
docker rm -f $(docker ps -aq)

# 删除所有镜像
docker rmi -f $(docker images -q)

2. 容器健康检查

bash 复制代码
# 查看健康状态
docker inspect --format='{{json .State.Status}}' mycontainer

# 在 Dockerfile 中添加健康检查
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

十一、一键式部署方案

1. Docker Compose 标准模板

bash 复制代码
创建 docker-compose.yml:
version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - mynet
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: appdb
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - mynet

  redis:
    image: redis:alpine
    networks:
      - mynet

volumes:
  mysql_data:

networks:
  mynet:

启动命令:

bash 复制代码
docker compose up -d  # 后台启动
docker compose down -v  # 停止并删除所有资源

2. 生产级一键部署脚本

bash 复制代码
创建 deploy.sh:
#!/bin/bash

# 定义变量
PROJECT_NAME="myapp"
VERSION="1.0.0"
DOCKER_REGISTRY="registry.example.com"

# 构建镜像
docker build -t ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION} .

# 推送镜像到仓库
docker push ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION}

# 部署到服务器
ssh user@server << EOF
docker pull ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION}
docker stop ${PROJECT_NAME} || true
docker rm ${PROJECT_NAME} || true
docker run -d \\
  --name ${PROJECT_NAME} \\
  -p 8080:80 \\
  -v /data/config:/app/config \\
  --restart=unless-stopped \\
  ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION}
EOF

使用方式:

bash 复制代码
chmod +x deploy.sh
./deploy.sh

3. 使用 Docker Stack 部署集群服务

bash 复制代码
# 创建 stack.yml
version: '3.8'
services:
  web:
    image: nginx
    deploy:
      replicas: 3
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
      update_config:
        parallelism: 1
        delay: 10s

# 部署到 Swarm 集群
docker stack deploy -c stack.yml myapp

十二、备份与迁移

1. 全量备份与恢复

bash 复制代码
# 备份所有容器
docker ps -aq | xargs docker export | gzip > all_containers.tar.gz

# 备份所有镜像
docker save $(docker images -q) -o all_images.tar

# 恢复镜像
docker load -i all_images.tar

2. 单容器热迁移

bash 复制代码
# 源服务器
docker commit <container> migrated_image
docker save migrated_image | gzip > migrated_image.tar.gz

# 目标服务器
scp migrated_image.tar.gz user@dest:/tmp/
ssh user@dest "docker load -i /tmp/migrated_image.tar.gz"
ssh user@dest "docker run -d --name new_container migrated_image"

十三、标准项目结构与Dockerfile解析

假设项目叫 myapp,标准目录结构如下:

bash 复制代码
myapp/                      # 项目根目录
├── docker-compose.yml      # 编排文件
├── Dockerfile              # 定义"应用"镜像的构建规则
├── requirements.txt        # Python依赖列表
├── .dockerignore           # 忽略不需要拷贝进镜像的文件(如.git, .env, __pycache__)
└── src/                    # 应用程序源代码目录
    ├── main.py
    ├── utils/
    └── templates/

最关键的是 Dockerfile 的内容,它定义了如何将 src 源代码"打包"进一个新的镜像:

bash 复制代码
# Dockerfile
# 1. 选择一个轻量的基础镜像(不是centos,而是包含所需语言环境)
FROM python:3.11-slim

# 2. 在镜像内设置工作目录
WORKDIR /app

# 3. 先拷贝依赖文件,利用Docker缓存层加速构建
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. 拷贝项目源代码到镜像的工作目录 /app 下
COPY ./src ./src
# 或者直接拷贝整个当前目录(除了.dockerignore中指定的)到 /app
# COPY . .

# 5. 定义容器启动时自动执行的命令
CMD ["python", "src/main.py"]

十四、核心工作流与角色比喻

可以把整个项目部署想象成组装一台电脑和安装操作系统:

步骤 对应动作 使用的Docker工具 比喻
1. 准备"硬件/软件" 获取各个服务的官方镜像 docker pull 或由编排工具自动完成 购买CPU、内存、硬盘、显卡等标准化硬件
2. 定义"单个硬件规格" 为自己的应用定制镜像(如打包代码、环境) Dockerfile 为主系统盘写一份安装清单(装哪些驱动、软件)
3. 设计"电脑组装图" 定义所有服务如何组合、连接、配置 docker-compose.yml 画一张电脑组装图纸,写明CPU插哪、内存插哪、硬盘怎么接
4. "一键开机" 一键启动整个项目所有服务 docker compose up 按下电脑电源,所有硬件按图纸自动连接并启动

十五、关键要点总结

  • Dockerfile:用于构建自定义镜像,主要是自己的应用。对于 Redis、Nginx 等成熟中间件,几乎不需要自己写 Dockerfile,直接使用官方镜像。
  • docker-compose.yml:用于编排多个容器,定义它们之间的关系(网络、依赖、数据卷)。这才是实现"一键启动项目"的真正工具。
  • docker pull:通常不需要手动执行,因为 docker compose up 或 docker run 会自动拉取本地缺失的镜像。
  • 数据持久化:通过 volumes 将数据库等产生的数据存储在宿主机,这样容器销毁后数据不丢失。
  • 网络:Compose 会自动创建一个专用网络,服务间可以直接使用服务名(如 db、redis) 作为主机名进行通信,无需知道IP。

所以,更准确的理解是:使用 Dockerfile 封装应用,然后使用 Docker Compose 编排应用及其所有依赖服务(Redis, DB等),最终通过一个命令 (docker compose up) 一键启动整个项目环境。

学习资源推荐

  1. 官方文档
  2. Dockerfile 最佳实践
  3. Docker Compose 模板参考
相关推荐
程序员码歌2 小时前
短思考第263天,每天复盘10分钟,胜过盲目努力一整年
android·前端·后端
软件管理系统2 小时前
基于Spring Boot的便民维修管理系统
java·spring boot·后端
逆风水手2 小时前
Ansible自动化运维入门指南
linux·运维·自动化·ansible
LXS_3572 小时前
Day 18 C++提高 之 STL常用容器(string、vector、deque)
开发语言·c++·笔记·学习方法·改行学it
蒸蒸yyyyzwd2 小时前
网络编程——threadpool.h学习笔记
笔记·学习
浪子不回头4152 小时前
SGLang学习笔记
人工智能·笔记·学习
tianyuanwo2 小时前
SSH会话管理实战:识别与清理非法连接的完整指南
运维·ssh
小豆子范德萨2 小时前
两台window配置SSH免密登录
运维·ssh