Docker 近期重要变化与常用命令一次讲清
Docker 最新更新内容汇总|附完整命令
本文面向正在使用 Docker Engine、Docker Desktop、Docker Compose、BuildKit/Buildx 的开发者与运维人员,系统梳理近几个版本中 Docker 生态的重点更新方向,并附上常用安装、升级、构建、运行、排查与清理命令,方便收藏查阅。
说明:Docker 版本更新较快,生产环境升级前请务必结合官方 Release Notes、业务兼容性和灰度测试结果进行确认。
一、Docker 近期更新的核心趋势
近几年 Docker 的更新重点,已经不只是“容器运行”本身,而是围绕以下几个方向持续增强:
-
构建能力增强
BuildKit 和 Buildx 成为默认或推荐构建方式,多平台镜像构建、构建缓存、SBOM、Provenance 等能力不断完善。 -
Compose 体验提升
Docker Compose V2 已成为主流,命令统一为docker compose,对多服务编排、环境变量、profiles、watch、开发热更新等支持更完善。 -
安全能力增强
包括镜像签名、漏洞扫描、SBOM、最小权限运行、rootless、内容信任、供应链安全相关能力。 -
Docker Desktop 持续迭代
Desktop 在 macOS、Windows、Linux 上继续优化启动速度、资源占用、Kubernetes 集成、Extensions、Dev Environments 等体验。 -
镜像体积与性能优化
官方不断推动更高效的镜像构建缓存、更快的拉取速度、更小的基础镜像,以及更稳定的网络和存储驱动。 -
开发者体验增强
新增或强化docker init、docker scout、docker 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 架构包括 amd64、arm64 等。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 使用方式。近几个版本的更新重点主要包括:
-
启动速度优化
Docker Desktop 持续优化虚拟机启动、资源加载和后台服务初始化。 -
资源管理增强
用户可以更方便地配置 CPU、内存、磁盘和文件共享路径。 -
Kubernetes 集成优化
Docker Desktop 内置 Kubernetes,适合本地测试 Kubernetes 应用。 -
Extensions 扩展生态增强
可通过扩展安装日志分析、监控、安全扫描、数据库管理等工具。 -
Docker Scout 集成增强
更方便地分析镜像漏洞、依赖风险和修复建议。 -
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 前,建议按以下流程操作:
- 确认当前版本
docker version
docker compose version
docker buildx version
- 备份关键数据
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
- 检查容器自动重启策略
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' container_name
- 灰度升级
先在测试环境验证,再升级生产环境。
- 保留回滚方案
对于关键业务,建议保存镜像版本、Compose 文件和配置文件。
十二、总结
Docker 的最新更新方向可以概括为:构建更快、Compose 更强、安全能力更完善、开发体验更顺滑、供应链治理更成熟。对于个人开发者来说,重点应掌握 docker compose、docker buildx、docker 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 已经从单纯的容器运行工具,发展为覆盖本地开发、镜像构建、服务编排、安全扫描、供应链治理和云原生交付的重要平台。熟练掌握这些更新内容和命令,可以显著提升开发效率、部署稳定性和系统安全性。