上一篇 下一篇 分享链接 返回 返回顶部

Docker 近期重要变化与常用命令一次讲清

发布人:慈云数据-客服中心 发布时间:16小时前 阅读量:3

Docker 最新更新内容汇总|附完整命令

本文面向正在使用 Docker Engine、Docker Desktop、Docker Compose、BuildKit/Buildx 的开发者与运维人员,系统梳理近几个版本中 Docker 生态的重点更新方向,并附上常用安装、升级、构建、运行、排查与清理命令,方便收藏查阅。
说明:Docker 版本更新较快,生产环境升级前请务必结合官方 Release Notes、业务兼容性和灰度测试结果进行确认。


一、Docker 近期更新的核心趋势

近几年 Docker 的更新重点,已经不只是“容器运行”本身,而是围绕以下几个方向持续增强:

  1. 构建能力增强
    BuildKit 和 Buildx 成为默认或推荐构建方式,多平台镜像构建、构建缓存、SBOM、Provenance 等能力不断完善。

  2. Compose 体验提升
    Docker Compose V2 已成为主流,命令统一为 docker compose,对多服务编排、环境变量、profiles、watch、开发热更新等支持更完善。

  3. 安全能力增强
    包括镜像签名、漏洞扫描、SBOM、最小权限运行、rootless、内容信任、供应链安全相关能力。

  4. Docker Desktop 持续迭代
    Desktop 在 macOS、Windows、Linux 上继续优化启动速度、资源占用、Kubernetes 集成、Extensions、Dev Environments 等体验。

  5. 镜像体积与性能优化
    官方不断推动更高效的镜像构建缓存、更快的拉取速度、更小的基础镜像,以及更稳定的网络和存储驱动。

  6. 开发者体验增强
    新增或强化 docker initdocker scoutdocker compose watch 等工具,让项目容器化、漏洞分析和本地开发更方便。


二、Docker Engine 重点更新内容

Docker Engine 是 Docker 的核心组件,主要负责容器生命周期管理、镜像管理、网络、存储和运行时集成。

1. BuildKit 成为现代构建核心

新版本 Docker 中,BuildKit 已经成为推荐构建后端。相比传统 docker build,BuildKit 具有以下优势:

  • 构建速度更快;
  • 支持并行构建;
  • 支持更高级的缓存策略;
  • 支持多平台构建;
  • 支持构建时挂载密钥;
  • 支持导出 SBOM 和 Provenance 信息;
  • 日志输出更加清晰。

启用 BuildKit:

export DOCKER_BUILDKIT=1

使用 BuildKit 构建镜像:

docker build -t my-app:latest .

使用 Buildx 构建:

docker buildx build -t my-app:latest .

查看当前 Buildx 构建器:

docker buildx ls

创建新的 Buildx 构建器:

docker buildx create --name mybuilder --use

初始化构建器:

docker buildx inspect --bootstrap

2. 多平台镜像构建能力增强

在云原生环境中,常见的 CPU 架构包括 amd64arm64 等。Docker Buildx 可以方便地构建多架构镜像。

构建 Linux AMD64 和 ARM64 镜像并推送到镜像仓库:

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t your-registry.example.com/my-app:1.0.0 \
  --push .

只构建本地镜像:

docker buildx build \
  --platform linux/amd64 \
  -t my-app:amd64 \
  --load .

查看镜像支持的架构:

docker buildx imagetools inspect nginx:latest

3. 镜像构建缓存更灵活

BuildKit 对缓存支持非常强,可以把缓存导出到本地、Registry 或 GitHub Actions 缓存等位置。

使用本地缓存:

docker buildx build \
  --cache-from type=local,src=.buildx-cache \
  --cache-to type=local,dest=.buildx-cache-new,mode=max \
  -t my-app:latest .

使用 Registry 缓存:

docker buildx build \
  --cache-from type=registry,ref=your-registry.example.com/my-app:buildcache \
  --cache-to type=registry,ref=your-registry.example.com/my-app:buildcache,mode=max \
  -t your-registry.example.com/my-app:latest \
  --push .

这类能力非常适合 CI/CD 场景,可以显著降低重复构建时间。


4. Docker Engine 安全性持续增强

Docker 在安全方面持续强化,包括:

  • rootless 模式;
  • seccomp 配置;
  • AppArmor/SELinux 支持;
  • 用户命名空间隔离;
  • 镜像漏洞扫描;
  • SBOM 生成;
  • 内容信任和供应链安全能力。

以非 root 用户运行容器:

docker run -d \
  --name nginx-safe \
  --user 1000:1000 \
  nginx:latest

限制容器权限:

docker run -d \
  --name nginx-drop-cap \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  nginx:latest

只读文件系统运行容器:

docker run -d \
  --name nginx-readonly \
  --read-only \
  nginx:latest

限制内存和 CPU:

docker run -d \
  --name nginx-limit \
  --memory=512m \
  --cpus=1 \
  nginx:latest

查看容器安全配置:

docker inspect nginx-limit

三、Docker Compose V2 更新内容

Docker Compose V2 已经成为主流版本,命令从旧版的:

docker-compose

变为:

docker compose

Compose V2 是 Docker CLI 插件的一部分,体验更统一,也更便于和 Docker Desktop、Docker Engine 集成。


1. Compose Profiles:按场景启动服务

Profiles 可以让你根据不同场景启动不同服务,比如开发环境需要数据库和调试工具,生产环境只启动核心服务。

示例 compose.yml

services:
  app:
    image: my-app:latest
    ports:
      - "8080:8080"

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    profiles:
      - dev

  redis:
    image: redis:7
    profiles:
      - dev

只启动默认服务:

docker compose up -d

启动 dev profile:

docker compose --profile dev up -d

停止服务:

docker compose down

2. Compose Watch:开发热更新体验增强

docker compose watch 用于本地开发场景,可以监听文件变化并自动同步、重建或重启服务。

示例配置:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    develop:
      watch:
        - action: sync
          path: .
          target: /app
        - action: rebuild
          path: package.json

启动监听:

docker compose watch

后台启动服务后监听:

docker compose up -d
docker compose watch

这对 Node.js、Go、Python、Java 等应用的容器化开发非常有帮助。


3. Compose 命令体验优化

查看 Compose 服务:

docker compose ps

查看日志:

docker compose logs

持续查看日志:

docker compose logs -f

查看指定服务日志:

docker compose logs -f app

进入容器:

docker compose exec app sh

如果容器中有 bash:

docker compose exec app bash

重启服务:

docker compose restart app

重新构建并启动:

docker compose up -d --build

停止并删除容器、网络:

docker compose down

停止并删除容器、网络、匿名卷:

docker compose down -v

四、Docker Desktop 更新内容

Docker Desktop 是 macOS、Windows 和 Linux 桌面环境下最常见的 Docker 使用方式。近几个版本的更新重点主要包括:

  1. 启动速度优化
    Docker Desktop 持续优化虚拟机启动、资源加载和后台服务初始化。

  2. 资源管理增强
    用户可以更方便地配置 CPU、内存、磁盘和文件共享路径。

  3. Kubernetes 集成优化
    Docker Desktop 内置 Kubernetes,适合本地测试 Kubernetes 应用。

  4. Extensions 扩展生态增强
    可通过扩展安装日志分析、监控、安全扫描、数据库管理等工具。

  5. Docker Scout 集成增强
    更方便地分析镜像漏洞、依赖风险和修复建议。

  6. Dev Environments 体验优化
    让团队可以通过统一环境定义快速进入开发状态。

查看 Docker Desktop 版本:

docker version

查看 Docker 系统信息:

docker info

检查 Docker 是否正常运行:

docker run hello-world

五、Docker Scout:镜像漏洞与供应链安全分析

Docker Scout 是 Docker 推出的安全分析工具,用于查看镜像中的漏洞、依赖关系和修复建议。

查看镜像漏洞:

docker scout cves nginx:latest

查看镜像建议:

docker scout recommendations nginx:latest

比较两个镜像版本的差异:

docker scout compare nginx:1.25 --to nginx:latest

查看镜像 SBOM:

docker scout sbom nginx:latest

在现代 DevSecOps 流程中,建议将漏洞扫描集成到 CI/CD 中,在镜像推送前或部署前完成基础安全检查。


六、docker init:快速生成容器化配置

docker init 可以根据项目类型自动生成 Dockerfile、compose.yaml、.dockerignore 等文件,降低新项目容器化门槛。

在项目目录执行:

docker init

执行后通常会生成:

Dockerfile
compose.yaml
.dockerignore
README.Docker.md

生成后构建并启动:

docker compose up -d --build

查看服务状态:

docker compose ps

停止服务:

docker compose down

对于初学者或团队标准化项目模板来说,docker init 是一个非常实用的入口。


七、Docker 常用安装与升级命令

下面以 Linux 环境为例,整理常见安装与升级命令。


1. Ubuntu 安装 Docker

卸载旧版本:

sudo apt-get remove docker docker-engine docker.io containerd runc

更新软件源:

sudo apt-get update

安装依赖:

sudo apt-get install -y ca-certificates curl gnupg

创建 keyrings 目录:

sudo install -m 0755 -d /etc/apt/keyrings

添加 Docker GPG key:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

设置权限:

sudo chmod a+r /etc/apt/keyrings/docker.gpg

添加 Docker 软件源:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件源:

sudo apt-get update

安装 Docker Engine、CLI、containerd、Buildx 和 Compose 插件:

sudo apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

启动 Docker:

sudo systemctl start docker

设置开机自启:

sudo systemctl enable docker

验证安装:

sudo docker run hello-world

2. CentOS / RHEL 安装 Docker

安装 yum 工具:

sudo yum install -y yum-utils

添加 Docker 软件源:

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker:

sudo yum install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

启动 Docker:

sudo systemctl start docker

设置开机自启:

sudo systemctl enable docker

验证安装:

sudo docker run hello-world

3. 将当前用户加入 docker 用户组

默认情况下,普通用户执行 Docker 命令可能需要 sudo。可以将当前用户加入 docker 组:

sudo usermod -aG docker $USER

使用户组生效:

newgrp docker

验证:

docker ps

注意:加入 docker 组相当于拥有较高系统权限,生产环境应谨慎授权。


4. 升级 Docker

Ubuntu 升级:

sudo apt-get update
sudo apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

CentOS / RHEL 升级:

sudo yum update -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

查看版本:

docker version
docker compose version
docker buildx version

八、Docker 常用完整命令汇总

1. 镜像管理命令

搜索镜像:

docker search nginx

拉取镜像:

docker pull nginx:latest

查看本地镜像:

docker images

查看镜像详细信息:

docker image inspect nginx:latest

删除镜像:

docker rmi nginx:latest

强制删除镜像:

docker rmi -f nginx:latest

给镜像打标签:

docker tag my-app:latest your-registry.example.com/my-app:1.0.0

登录镜像仓库:

docker login your-registry.example.com

推送镜像:

docker push your-registry.example.com/my-app:1.0.0

2. 容器运行命令

运行一个 Nginx 容器:

docker run -d \
  --name nginx-demo \
  -p 8080:80 \
  nginx:latest

查看运行中的容器:

docker ps

查看所有容器:

docker ps -a

停止容器:

docker stop nginx-demo

启动容器:

docker start nginx-demo

重启容器:

docker restart nginx-demo

删除容器:

docker rm nginx-demo

强制删除运行中的容器:

docker rm -f nginx-demo

查看容器日志:

docker logs nginx-demo

实时查看日志:

docker logs -f nginx-demo

进入容器:

docker exec -it nginx-demo sh

查看容器资源占用:

docker stats

查看容器进程:

docker top nginx-demo

3. 网络管理命令

查看网络:

docker network ls

创建网络:

docker network create app-net

查看网络详情:

docker network inspect app-net

运行容器并加入网络:

docker run -d \
  --name redis-demo \
  --network app-net \
  redis:7

将已有容器连接到网络:

docker network connect app-net nginx-demo

断开网络:

docker network disconnect app-net nginx-demo

删除网络:

docker network rm app-net

4. 数据卷管理命令

查看数据卷:

docker volume ls

创建数据卷:

docker volume create mysql-data

查看数据卷详情:

docker volume inspect mysql-data

使用数据卷运行 MySQL:

docker run -d \
  --name mysql-demo \
  -e MYSQL_ROOT_PASSWORD=example \
  -v mysql-data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0

删除数据卷:

docker volume rm mysql-data

清理未使用的数据卷:

docker volume prune

5. 系统清理命令

查看 Docker 磁盘占用:

docker system df

查看更详细的磁盘占用:

docker system df -v

清理停止的容器、未使用网络、悬空镜像和构建缓存:

docker system prune

清理所有未使用镜像:

docker system prune -a

清理并删除未使用数据卷:

docker system prune -a --volumes

清理构建缓存:

docker builder prune

强制清理构建缓存:

docker builder prune -af

九、推荐的 Dockerfile 写法

一个较好的 Dockerfile 应该关注:

  • 使用更小的基础镜像;
  • 合理利用缓存;
  • 减少镜像层数;
  • 避免把敏感信息写入镜像;
  • 使用非 root 用户运行应用;
  • 使用多阶段构建。

以 Node.js 应用为例:

FROM node:20-alpine AS deps

WORKDIR /app

COPY package*.json ./

RUN npm ci

FROM node:20-alpine AS runner

WORKDIR /app

ENV NODE_ENV=production

COPY --from=deps /app/node_modules ./node_modules
COPY . .

RUN addgroup -S appgroup && adduser -S appuser -G appgroup

USER appuser

EXPOSE 3000

CMD ["node", "server.js"]

构建镜像:

docker build -t node-app:1.0.0 .

运行容器:

docker run -d \
  --name node-app \
  -p 3000:3000 \
  node-app:1.0.0

十、推荐的 compose.yaml 示例

下面是一个常见的 Web 应用、MySQL、Redis 组合:

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: my-app:latest
    ports:
      - "8080:8080"
    environment:
      APP_ENV: production
      MYSQL_HOST: mysql
      REDIS_HOST: redis
    depends_on:
      - mysql
      - redis
    networks:
      - app-net

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: app
      MYSQL_USER: app
      MYSQL_PASSWORD: app123456
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - app-net

  redis:
    image: redis:7
    networks:
      - app-net

volumes:
  mysql-data:

networks:
  app-net:
    driver: bridge

启动:

docker compose up -d --build

查看:

docker compose ps

查看日志:

docker compose logs -f

停止:

docker compose down

停止并删除数据卷:

docker compose down -v

十一、升级 Docker 前的注意事项

在生产环境升级 Docker 前,建议按以下流程操作:

  1. 确认当前版本
docker version
docker compose version
docker buildx version
  1. 备份关键数据
docker ps -a
docker images
docker volume ls

重要数据卷建议单独备份,例如:

docker run --rm \
  -v mysql-data:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/mysql-data-backup.tar.gz /data
  1. 检查容器自动重启策略
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' container_name
  1. 灰度升级

先在测试环境验证,再升级生产环境。

  1. 保留回滚方案

对于关键业务,建议保存镜像版本、Compose 文件和配置文件。


十二、总结

Docker 的最新更新方向可以概括为:构建更快、Compose 更强、安全能力更完善、开发体验更顺滑、供应链治理更成熟。对于个人开发者来说,重点应掌握 docker composedocker buildxdocker init 和基础镜像优化;对于企业团队来说,则应重点关注多平台构建、镜像漏洞扫描、SBOM、CI/CD 缓存、安全运行参数和生产环境升级策略。

如果你正在维护 Docker 环境,建议定期执行以下命令了解当前状态:

docker version
docker info
docker system df
docker compose version
docker buildx version

如果你要开始一个新项目,推荐流程是:

docker init
docker compose up -d --build
docker compose logs -f

如果你要构建并发布多架构镜像,推荐使用:

docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t your-registry.example.com/my-app:1.0.0 \
  --push .

总体来看,Docker 已经从单纯的容器运行工具,发展为覆盖本地开发、镜像构建、服务编排、安全扫描、供应链治理和云原生交付的重要平台。熟练掌握这些更新内容和命令,可以显著提升开发效率、部署稳定性和系统安全性。

目录结构
全文