Docker-操作
Image镜像管理
查看镜像列表
bash
docker images [OPTIONS] [REPOSITORY[:TAG]]选项:
-a: 显示所有镜像(包括中间层)-q: 只显示镜像ID
拉取镜像
bash
docker pull [OPTIONS] NAME[:TAG|@DIGEST]删除镜像
bash
docker rmi [OPTIONS] IMAGE [IMAGE...]构建镜像
bash
docker build [OPTIONS] PATH | URL | -常用选项:
-t: 指定镜像名称和标签-f: 指定Dockerfile路径
导出镜像
bash
docker save -o filename.tar IMAGE[:TAG]加载镜像
bash
docker load -i filename.tar清空游离镜像
游离镜像为<>空镜像名和空标签状态
bash
docker images prune容器管理
创建并启动容器
bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 启动一个后台运行有终端的名字为test的容器镜像为nginx:lates
docker run -dit --name name -p 80:80 nginx:latest选项
容器运行模式
| 参数 | 说明 |
|---|---|
-d, --detach | 后台运行容器,并打印容器ID |
--rm | 容器退出时自动删除容器 |
--name <名称> | 为容器指定名称 |
--restart <策略> | 设置容器重启策略(见下方表) |
--restart 策略选项
| 策略 | 说明 |
|---|---|
no | 默认,容器不会自动重启 |
on-failure[:max-retries] | 仅在非 0 退出码时重启(可设置最大重试次数) |
always | 总是重启(即使手动停止后,Docker 服务重启时也会重新运行) |
unless-stopped | 除非手动停止,否则自动重启(推荐) |
网络设置
| 参数 | 格式/示例 | 说明 |
|---|---|---|
--network | bridge/host/none | 连接指定网络模式 |
-p, --publish | [主机IP:]主机端口:容器端口 | 端口映射 |
--dns | 8.8.8.8 | 自定义DNS服务器 |
--add-host | host:ip | 添加主机到IP的映射 |
存储和卷
| 参数 | 格式/示例 | 说明 |
|---|---|---|
-v, --volume | [主机路径:]容器路径[:ro] | 绑定挂载卷(ro表示只读) |
--mount | type=bind,source=/,target=/host | 详细挂载选项 |
--tmpfs | /tmp:size=100m | 挂载tmpfs文件系统 |
CPU 限制
| 参数 | 示例 | 说明 |
|---|---|---|
-c,--cpus | 1.5 | 限制使用的CPU核心数(可小数) |
--cpu-shares | 512 | CPU权重(默认1024) |
--cpuset-cpus | 0-3或0,1 | 绑定指定CPU核心 |
内存限制
| 参数 | 示例 | 说明 |
|---|---|---|
-m, --memory | 512m/2g | 内存限制 |
--memory-swap | 1g | 内存+交换分区总限制 |
--oom-kill-disable | - | 禁用OOM Killer |
容器输入/输出
| 参数 | 组合示例 | 说明 |
|---|---|---|
-a | -a stdin | 附加到指定流 |
-i | -it | 保持STDIN打开 |
-t | -it | 分配伪终端 |
--log-driver | json-file | 指定日志驱动 |
安全设置
| 参数 | 示例 | 说明 |
|---|---|---|
--user | 1000:1000 | 指定运行用户(格式:`<name |
--cap-add | NET_ADMIN | 添加Linux能力(如:SYS_ADMIN, NET_RAW等) |
--cap-drop | CHOWN | 删除Linux能力(如:SETUID, SETGID等) |
--security-opt | no-new-privileges | 安全选项(如:seccomp=unconfined, apparmor=unconfined) |
--read-only | - | 将容器的根文件系统挂载为只读 |
环境变量
| 参数 | 示例 | 说明 |
|---|---|---|
-e, --env | DB_HOST=db.example.com | 设置环境变量(可多次使用设置多个变量) |
--env-file | .env | 从文件读取环境变量(每行格式:VAR_NAME=value) |
设备映射
| 参数 | 示例 | 说明 |
|---|---|---|
--device | /dev/ttyUSB0:/dev/ttyUSB0 | 将主机设备映射到容器(格式:<主机设备路径>:<容器设备路径>[:权限]) |
--device-cgroup-rule | 'c 1:3 rwm' | 添加设备cgroup规则(格式:<类型>:<主设备号>:<次设备号> <权限>) |
--device-read-bps | /dev/sda:1mb | 限制设备读取速率(单位:kb/mb/gb) |
--device-write-bps | /dev/sdb:500kb | 限制设备写入速率(单位:kb/mb/gb) |
其他重要参数
| 参数 | 示例 | 说明 |
|---|---|---|
--entrypoint | /bin/bash -c "echo Hello" | 覆盖镜像的默认ENTRYPOINT(支持完整shell命令) |
-w, --workdir | /app | 设置容器内的工作目录(需确保目录存在) |
--health-cmd | `curl -f http://localhost/health | |
--health-interval | 30s | 健康检查间隔时间(单位:s/m/h) |
--health-timeout | 10s | 单次健康检查超时时间(单位:s/m/h) |
--health-retries | 3 | 连续失败次数后标记为不健康 |
--blkio-weight | 500 | 设置块IO权重(范围10-1000,默认500) |
--ulimit | nofile=1024:2048 | 设置ulimit(格式:<type>=<soft>[:<hard>],如:core=0:unlimited) |
启动
bash
docker start [OPTIONS] CONTAINER [CONTAINER...]停止
bash
docker stop [OPTIONS] CONTAINER [CONTAINER...]查看状态
bash
docker stats [CONTAINER...]重启容器
bash
docker restart [OPTIONS] CONTAINER [CONTAINER...]暂停
bash
docker pause CONTAINER恢复容器
bash
docker unpause CONTAINER删除容器
bash
docker rm [OPTIONS] CONTAINER [CONTAINER...]选项:
-f: 强制删除运行中的容器-v: 删除与容器关联的卷
查看容器
bash
docker ps [OPTIONS]选项:
-a: 显示所有容器(包括停止的)-q: 只显示容器ID--filter: 过滤条件
查看容器日志
bash
docker logs [OPTIONS] CONTAINER选项:
-f: 跟踪日志输出--tail: 显示最后N条日志-t: 显示时间戳
进入运行中的容器
bash
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]查看容器信息
bash
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]容器与主机文件拷贝
bash
docker cp [OPTIONS] 容器名:容器内路径 宿主机路径
docker cp [OPTIONS] 宿主机路径 容器名:容器内路径Tag 镜像标签
bash
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag [REGISTRY_HOST[:PORT]/][NAMESPACE/]REPOSITORY[:TAG]
# 为本地镜像添加新标签
docker tag nginx:1.23 myregistry.com/web/nginx:prod-v1组件说明
| 组件 | 必选 | 示例 | 说明 |
|---|---|---|---|
| REGISTRY | 否 | registry.example.com:5000 | 私有仓库地址(默认使用 Docker Hub) |
| NAMESPACE | 否 | myorg | 组织/用户名称(官方镜像使用 library 命名空间,可省略) |
| REPO | 是 | nginx | 镜像仓库名称(小写字母、数字、下划线和连字符组成) |
| TAG | 否 | v1.2.0 | 版本标识(默认 latest,建议使用语义化版本或构建号) |
特殊标签
| 标签模式 | 用途 | 示例 |
|---|---|---|
-alpine | 基于 Alpine Linux 的镜像 | nginx:1.25-alpine |
-slim | 精简版镜像 | python:3.11-slim |
-rc | 候选发布版本 | app:2.0-rc1 |
-debug | 包含调试工具的镜像 | ubuntu:22.04-debug |
network - 网络管理
查看网络
bash
docker network ls创建网络
bash
docker network create [OPTIONS] NETWORK
docker network create \
--driver bridge \
--subnet=192.168.10.0/24 \
--ip-range=192.168.10.128/25 \
--gateway=192.168.10.1 \
--aux-address="my-router=192.168.10.10" \
my-custom-network--subnet:指定子网(CIDR格式)--ip-range:限定IP分配范围--gateway:设置网关--aux-address:保留IP地址
查看网络
bash
docker network inspect mynet连接/断开容器网络
bash
docker network connect mynet mycontainer
docker network disconnect mynet mycontainer删除未使用网络
bash
docker network prune删除指定网络
bash
docker network rm mynetvolume - 卷管理
创建卷
bash
docker volume create [OPTIONS] [VOLUME]列出卷
bash
docker volume ls [OPTIONS]查看Volume详细信息
bash
docker volume inspect my-volume删除卷
bash
docker volume rm [OPTIONS] VOLUME [VOLUME...]清理未使用的Volume
bash
docker volume prune设置Volume驱动
bash
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/path/to/nfs/share \
nfs-volume设置Volume标签
bash
docker volume create --label env=prod --label app=mysql db-volume限制Volume大小
bash
docker volume create --opt o=size=100MB small-volume挂载Volume
bash
# 读写
docker run -d -v my-volume:/container/path:rw my-image
# 只读
docker run -d -v my-volume:/container/path:ro my-imageinspect - 获取容器/镜像配置信息
语法格式
bash
docker inspect [OPTIONS] NAME|ID [NAME|ID...]选项
| 选项 | 说明 |
|---|---|
--format, -f | 使用 Go 模板格式化输出 |
--type | 指定类型(container/image/volume/network 等) |
--size, -s | 显示容器文件系统总大小(仅容器) |
经典案例
bash
# 查看容器完整信息
docker inspect my_container
# 获取容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container
# 获取容器状态
docker inspect -f '{{.State.Status}}' my_container
# 获取所有容器IP列表
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
# 显示容器挂载卷的读写权限
docker inspect -f '{{range .Mounts}}{{.Source}}:{{.Destination}} ({{.RW}}){{"\n"}}{{end}}' my_container
# 获取镜像分层信息
docker inspect --format='{{range .RootFS.Layers}}{{.}}{{end}}' my_image
# 获取所有容器的名称和镜像(jq 处理)
docker inspect $(docker ps -aq) | jq -r '.[] | [.Name, .Config.Image] | @tsv'
# 检查健康状态(需要容器配置健康检查)
docker inspect --format='{{json .State.Health}}' my_container | jqcommint - 容器保存镜像
docker commit 命令用于将容器的当前状态保存为一个新的镜像。这个命令在需要基于运行中的容器创建自定义镜像时非常有用,但需要注意它并不是Docker推荐的标准镜像构建方式(标准方式是使用Dockerfile)
bash
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]常用选项
| 选项 | 描述 |
|---|---|
-a, --author | 指定镜像作者 (如 "John Doe john@example.com") |
-c, --change | 应用Dockerfile指令来提交的镜像 (如 CMD, ENTRYPOINT, ENV 等) |
-m, --message | 提交消息,类似于git的commit message |
-p, --pause | 在提交过程中暂停容器 (默认true) |
经典案例
bash
# 基本提交 - 将容器保存为新镜像
docker commit my_container my_new_image
# 带标签的提交
docker commit my_container my_new_image:v1.0
# 带作者和提交信息的提交
docker commit -a "John Doe" -m "Added custom configurations" my_container my_new_image
# 提交时修改配置
docker commit --change='CMD ["nginx", "-g", "daemon off;"]' my_container my_nginx存储资源清理
bash
# 清理未使用的镜像
docker image prune
# 清理未使用的容器
docker container prune
# 清理未使用的网络
docker network prune
# 清理所有未使用的对象
docker system prunebuild 构建镜像
基本语法
bash
docker build [OPTIONS] PATH | URL | -常用选项
| 选项 | 说明 |
|---|---|
-t, --tag | 指定镜像名称和标签(格式:name:tag) |
-f, --file | 指定 Dockerfile 路径(默认是上下文路径中的 Dockerfile) |
--build-arg | 设置构建时变量(对应 Dockerfile 中的 ARG) |
--no-cache | 禁用缓存构建 |
--pull | 总是尝试拉取基础镜像的新版本 |
--target | 在多阶段构建中指定目标构建阶段 |
--platform | 指定目标平台(如 linux/amd64, linux/arm64) |
--progress | 设置输出格式(auto, plain, tty) |
--quiet, -q | 安静模式,不输出构建信息 |
经典案例
bash
# 基本构建
docker build -t myapp:latest .
# 指定Dockerfile
docker build -t myapp -f dockerfiles/Dockerfile.prod .
# 传递构建参数
docker build -t myapp --build-arg APP_VERSION=1.2.3 .
# 多阶段构建指定目标
docker build -t myapp --target builder .
# 禁用缓存构建
docker build -t myapp --no-cache .
# 跨平台构建
docker build -t myapp --platform linux/amd64 .