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 模板参考
相关推荐
Knight_AL20 小时前
Spring 事务管理:为什么内部方法调用事务不生效以及如何解决
java·后端·spring
bcbnb20 小时前
iOS代码混淆技术深度实践:从基础到高级全面解析
后端
加洛斯20 小时前
SpringSecurity入门篇(2):替换登录页与config配置
前端·后端
j_jiajia20 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
用户83562907805120 小时前
Python 实现 Excel 条件格式自动化
后端·python
源代码•宸21 小时前
Golang语法进阶(协程池、反射)
开发语言·经验分享·后端·算法·golang·反射·协程池
2301_7833601321 小时前
关于RNAseq——从fastq到gene_counts全流程
笔记·学习
Chan1621 小时前
场景题:CPU 100% 问题怎么排查?
java·数据库·redis·后端·spring
_李小白21 小时前
【AlohaMini学习笔记】第三天:AlohaMini相关技术
笔记·学习
我命由我1234521 小时前
Photoshop - Photoshop 工具栏(57)模糊工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop