Skip to content

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除非手动停止,否则自动重启(推荐)
网络设置
参数格式/示例说明
--networkbridge/host/none连接指定网络模式
-p, --publish[主机IP:]主机端口:容器端口端口映射
--dns8.8.8.8自定义DNS服务器
--add-hosthost:ip添加主机到IP的映射
存储和卷
参数格式/示例说明
-v, --volume[主机路径:]容器路径[:ro]绑定挂载卷(ro表示只读)
--mounttype=bind,source=/,target=/host详细挂载选项
--tmpfs/tmp:size=100m挂载tmpfs文件系统
CPU 限制
参数示例说明
-c,--cpus1.5限制使用的CPU核心数(可小数)
--cpu-shares512CPU权重(默认1024)
--cpuset-cpus0-30,1绑定指定CPU核心
内存限制
参数示例说明
-m, --memory512m/2g内存限制
--memory-swap1g内存+交换分区总限制
--oom-kill-disable-禁用OOM Killer
容器输入/输出
参数组合示例说明
-a-a stdin附加到指定流
-i-it保持STDIN打开
-t-it分配伪终端
--log-driverjson-file指定日志驱动
安全设置
参数示例说明
--user1000:1000指定运行用户(格式:`<name
--cap-addNET_ADMIN添加Linux能力(如:SYS_ADMIN, NET_RAW等)
--cap-dropCHOWN删除Linux能力(如:SETUID, SETGID等)
--security-optno-new-privileges安全选项(如:seccomp=unconfined, apparmor=unconfined
--read-only-将容器的根文件系统挂载为只读
环境变量
参数示例说明
-e, --envDB_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-interval30s健康检查间隔时间(单位:s/m/h)
--health-timeout10s单次健康检查超时时间(单位:s/m/h)
--health-retries3连续失败次数后标记为不健康
--blkio-weight500设置块IO权重(范围10-1000,默认500)
--ulimitnofile=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

组件说明

组件必选示例说明
REGISTRYregistry.example.com:5000私有仓库地址(默认使用 Docker Hub)
NAMESPACEmyorg组织/用户名称(官方镜像使用 library 命名空间,可省略)
REPOnginx镜像仓库名称(小写字母、数字、下划线和连字符组成)
TAGv1.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 mynet

volume - 卷管理

创建卷

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-image

inspect - 获取容器/镜像配置信息

语法格式

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 | jq

commint - 容器保存镜像

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 prune

build 构建镜像

基本语法

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 .