docker学习 查询docker信息
查询docker版本
1 2 docker -v docker version
镜像images命令 Docker 镜像是一个只读模板,包含了运行容器所需要的文件系统和内容(如代码、运行时、库等)。
镜像可以层层叠加,节省空间。
镜像构建时是以分层式构建,多层叠加组合而成一个镜像,每次对镜像内容修改,都会叠加一层。
对镜像内容删除时,并不会真的删除,只是该层被遮盖了,并不是真正意义上的删除,所以镜像会越来越大。
查询所有镜像
查询镜像详细信息
1 docker image inspect 容器ID/容器名字
从仓库里搜索镜像
拉取镜像
删除镜像
import从本地导入镜像 1 docker import [OPTIONS] tar路径 镜像名:版本
参数名
简写
类型
说明
--change
-c
字符串,可以重复使用
设置镜像的元数据(相当于 Dockerfile 中的命令,如 CMD
, ENV
, EXPOSE
, ENTRYPOINT
等)
--message
-m
字符串
添加导入镜像的说明信息,用于记录镜像变更备注
1 2 3 4 5 6 7 8 docker import \ -c "ENV LANG C.UTF-8" \ -c "EXPOSE 80" \ -c "CMD [\"/usr/sbin/nginx\"]" \ -m "a demo" \ nginxfs.tar nginx:latest
build构建镜像 build命令需要搭配dockerfile文件来构建镜像。
Dockerfile指令详解
简易的centos镜像构建参数demo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 FROM centos:7 MAINTAINER yourname@example.comENV LANG en_US.UTF-8 ENV TZ Asia/ShanghaiRUN yum update -y && \ yum install -y vim curl wget net-tools && \ yum clean all COPY start.sh /usr/local/bin/start.sh WORKDIR /usr/local/bin RUN chmod +x start.sh CMD ["bash" , "start.sh" ]
build相关指令
1 2 3 4 5 docker build [OPTIONS] PATH docker build -t myapp:latest . . 表示当前目录中有 Dockerfile,作为构建上下文。
OPTIONS参数
参数 说明 示例 -t, --tag
为构建的镜像指定名称和标签(可多次使用) -t myimage:1.0
-f, --file
指定 Dockerfile 路径 -f Dockerfile.dev
--build-arg
构建时传递变量(Dockerfile 中 ARG
使用) --build-arg VERSION=1.2.3
--no-cache
构建时不使用缓存 --no-cache
--pull
始终尝试从远程拉取最新基础镜像 --pull
--target
指定构建多阶段 Dockerfile 中的某个阶段 --target builder
--platform
指定构建平台(如 amd64、arm64) --platform linux/amd64
--progress
构建时输出样式(plain 或 tty) --progress=plain
--output
指定构建产出位置,如本地目录或类型 --output type=local,dest=./out
1 2 3 4 docker build -t test :v2 -f ./Dockerfile.dev . docker build --no-cache -t nocache-image .
cp宿主机与容器文件复制 1 2 3 4 5 6 7 8 docker cp [OPTIONS] <源路径> <目标路径> docker cp 容器ID/容器名:/path/in/container /path/on/host docker cp /path/on/host 容器ID/容器名:/path/in/container
commit从容器创建新镜像 1 2 3 docker commit [OPTIONS] 容器ID或名字 新镜像的名称:标签(tag) docker commit mycontainer myimage:v1
OPTIONS参数
选项 含义 -a, --author
镜像作者 -m, --message
提交时的说明(类似 Git commit message) -p, --pause
提交时是否暂停容器(默认是 true
,安全性更高)
1 docker commit -a "treeman" -m "a demo app" -p false mycontainer myapp:v1
save导出 load导入镜像 常用在没有公网的时候离线导入导出镜像。
导出镜像
1 2 3 4 5 6 7 docker save [OPTIONS] IMAGE [IMAGE...] -o 指定导出的文件名 docker save -o nginx.tar nginx:latest docker save -o my_images.tar nginx:latest busybox alpine
导入镜像
1 2 3 4 5 docker load [OPTIONS] -i 指定要导入的 tar 文件名 docker load -i nginx.tar
容器container命令 容器资源限制与隔离 容器通过基于Linux底层的Namespace 技术来实现资源隔离 ,cgroups 技术实现资源限制 。
Namespace(命名空间)将内核的全局资源进行封装,使得每个namespace都有一份独立资源,因此不同的进程在各自的namespace内对同一种资源的使用不会相互干扰。
Namespace类型
系统调用参数
隔离内容
PID namespace
CLONE_NEWPID
进程空间(进程ID)
Mount namespace
CLONE_NEWNS
文件系统挂载点
Network namespace
CLONE_NEWNET
网络资源:网络设备、端口等
User namespace
CLONE NEWUSER
用户ID和用户组ID
UTS namespace
CLONE NEWUTS
主机名和域名
IPC namespace
CLONE_NEWIP
信号量、消息队列和共享内存
cgroups
是 Linux 内核的一个子系统,主要作用是:
限制资源 :限制某个进程组最多可以使用多少资源。
监控资源 :监控某个进程组当前使用了多少资源。
优先级控制 :例如通过 cpu.shares
来设置容器的 CPU 调度优先级。
进程分组 :将进程组织在一起,进行统一管理
cgroups内存限制参数
参数 说明 示例 --memory
或 -m
限制容器使用的最大内存 -m 512m
(512MB)--memory-swap
设置总的 swap + memory 限制,必须 ≥ memory,-1
表示无限制 --memory-swap 1g
--memory-reservation
设置软限制(低于 memory 的值) --memory-reservation 256m
--kernel-memory
(不推荐)限制内核内存使用(已弃用) --kernel-memory 50m
(已被移除)--oom-kill-disable
禁用 OOM Killer --oom-kill-disable=true
CPU 限制参数
参数 说明 示例 --cpus
限制使用的 CPU 数量(可为小数) --cpus=1.5
(最多使用 1.5 核)--cpu-shares
设置 CPU 权重(相对值,默认 1024) --cpu-shares=512
(权重为默认的一半)--cpuset-cpus
限制容器只能运行在哪些 CPU 核上 --cpuset-cpus="0,2"
--cpu-period
设置 CPU 周期(单位:微秒,默认 100000) --cpu-period=50000
--cpu-quota
设置 CPU 配额(必须与 period 配合) --cpu-quota=25000
--cpuset-mems
设置容器可用的内存节点(NUMA 系统使用) --cpuset-mems="0,1"
块设备 I/O 限制参数
参数 说明 示例 --blkio-weight
设置整体 I/O 权重(范围:10~1000) --blkio-weight=300
--device-read-bps
限制读取速率(按字节) --device-read-bps /dev/sda:1mb
--device-write-bps
限制写入速率 --device-write-bps /dev/sda:2mb
--device-read-iops
限制读取 IOPS --device-read-iops /dev/sda:100
--device-write-iops
限制写入 IOPS --device-write-iops /dev/sda:200
1 2 3 4 5 6 7 8 9 10 11 12 13 docker run -dt \ --memory="512m" \ --memory-swap="1g" \ --cpus="2" \ --cpuset-cpus="0,1" \ --cpu-shares="512" \ --blkio-weight=300 \ ubuntu bash docker inspect <容器名或ID> | grep -i -A 60 "HostConfig"
列出所有运行的容器
1 2 docker ps [OPTIONS] docker container list [OPTIONS]
OPTIONS参数
参数 描述 -a 查看所有容器的运行记录 -n=? 显示最近创建的n个容器 -q 只显示容器的id
删除指定容器
1 2 3 4 5 6 docker rm 容器id /容器名 docker rm -f $(docker ps -aq) docker ps -a -q|xargs docker rm
启动容器
重启容器
停止容器
强制停止容器
容器暂停和恢复
1 2 docker pause docker unpause
等待容器退出返回码
exec和attach进入容器内部命令 exec与attach的比较:
比较项
docker attach
docker exec
连接的是
容器主进程
容器中任意新命令
是否新开终端
❌ 否
✅ 是
多人同时使用
❌ 一般不推荐
✅ 支持多个并发
退出容器会关闭吗
✅ 有风险(看主进程)
❌ 不会影响主进程
exec命令
1 2 3 4 5 6 7 8 9 docker exec [OPTIONS] CONTAINER COMMAND [ARG ...] CONTAINER:目标容器的名字或 ID COMMAND:你想在容器中执行的命令 [ARG ...]:传给命令的参数 docker exec -it mycontainer bash
OPTIONS参数
选项 含义 应用示例 场景解释 -d, --detach
后台运行命令 docker exec -d mycontainer sh -c "sleep 30"
在容器中异步执行脚本,不阻塞主终端 --detach-keys
自定义退出快捷键 docker exec --detach-keys="ctrl-e,e" mycontainer bash
默认是 ctrl-p + ctrl-q
,可以改为你喜欢的组合 -e, --env
设置环境变量 docker exec -e ENV_MODE=debug mycontainer bash
临时在容器中注入变量(如调试模式) --env-file
从文件加载环境变量 docker exec --env-file ./env.list mycontainer bash
一次性设置多个变量,方便管理配置 -i, --interactive
保持标准输入打开 常与 -t
搭配使用 docker exec -it mycontainer bash
--privileged
提供更高权限 docker exec --privileged mycontainer bash
访问内核、挂载设备等高级操作(一般不常用) -t, --tty
分配伪终端 docker exec -t mycontainer bash
用于格式良好的输出(如颜色、界面) -u, --user
指定运行用户 docker exec -u root mycontainer bash
指定以 root 或其它用户身份运行 -w, --workdir
指定容器内工作目录 docker exec -w /usr/local mycontainer ls
控制命令在哪个目录执行
attach命令
1 docker attach [OPTIONS] 容器ID/容器名
attch进入容器后,可以使用默认退出方式:Ctrl + P
,然后 Ctrl + Q
(注意,不是 Ctrl+C )
重命名容器
run运行容器 1 docker run [OPTIONS] 镜像 [COMMAND] [ARG...]
OPTIONS参数
选项 含义 示例 -d
后台运行容器(Detached) -d
-it
交互模式 + 伪终端 -it
--name
为容器命名 --name myweb
-p
端口映射(主机:容器) -p 8080:80
-e
设置环境变量 -e ENV=prod
-v
挂载卷(宿主机:容器) -v /data:/data
--rm
容器退出后自动删除 --rm
--restart
容器异常重启策略 no,默认策略,在容器退出时不重启容器 on-failure,在容器非正常退出时(退出状态非0),才会重启容器 on-failure:3,在容器非正常退出时重启容器,最多重启3次 always,在容器退出时总是重启容器 unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器 --restart=always
--network
加入指定网络,默认网络类型有host、bridge、none --network=my_net
-u
指定用户 -u 1000:1000
-w
设置工作目录 -w /app
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 --dns:指定容器使用的自定义 DNS 服务器。 示例:docker run --dns 8.8.8.8 image_name --dns-search:指定容器的 DNS 搜索域。 示例:docker run --dns-search example.com image_name --cap-add 和 --cap-drop:增加或删除容器的 Linux 能力,用于控制容器的权限。 示例:docker run --cap-add=SYS_ADMIN image_name --privileged:给容器赋予特权,可以访问主机的设备。 示例:docker run --privileged image_name --tmpfs:在容器内创建临时文件系统,用于存储临时数据。 示例:docker run --tmpfs /tmp image_name --ulimit:设置容器的资源限制,如最大打开文件数、最大进程数等。 示例:docker run --ulimit nofile=1024:1024 image_name --security-opt:设置容器的安全选项,如 AppArmor 配置、Seccomp 配置等。 示例:docker run --security-opt seccomp:unconfined image_name --cpu-shares:设置容器的 CPU 份额,用于控制 CPU 资源的分配。 示例:docker run --cpu-shares 512 image_name --memory:设置容器可使用的内存限制。 示例:docker run --memory 1g image_name --network:指定容器使用的网络模式。 示例:docker run --network bridge image_name --hostname:设置容器的主机名。 示例:docker run --hostname my_container image_name --user :指定容器运行时的用户名或 UID。 示例:docker run --user username image_name --volume -driver:指定容器使用的卷驱动程序。 示例:docker run --volume-driver my_driver image_name --shm-size:设置容器的共享内存大小。 示例:docker run --shm-size 2g image_name --add -host:向容器的 /etc/hosts 文件添加自定义主机名和 IP 映射。 示例:docker run --add-host myhost:192.168.0.100 image_name --read-only:将容器的文件系统设置为只读模式。 示例:docker run --read-only image_name –cpu-quota:设置容器的 CPU 配额,以微秒为单位。 示例:docker run --cpu-quota=50000 image_name --cpu-period:设置容器的 CPU 周期,以微秒为单位。 示例:docker run --cpu-period=100000 image_name --dns-option:为容器的 DNS 配置添加自定义选项。 示例:docker run --dns-option=timeout :5 image_name --sysctl:设置容器的内核参数。 示例:docker run --sysctl net.ipv4.ip_forward=1 image_name --label :为容器添加标签,用于识别和组织容器。 示例:docker run --label env =production image_name --workdir :设置容器的工作目录。 示例:docker run --workdir /app image_name
网络network命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 docker常见的网络类型 host: 容器没有独立的网络命名空间。 使用宿主机的 IP 和端口(容器端口就是主机端口)。 bridge: Docker 会创建一个虚拟网桥(通常叫 docker0)。 容器会获得一个私有 IP 地址(通常是 172.17.0.0/16 网段)。 容器之间可以互相通信。 none: 容器没有网络接口,不能联网。 常用于生成随机密码等私密性高的服务,不对外联网 macvlan: 容器被分配一个和宿主机同一网段的 IP。 容器拥有自己的 MAC 地址。 适合一些需要真实网络接入的应用(如 DHCP、PXE)。 overlay: 在 Docker Swarm 或 Kubernetes 中,实现不同主机上的容器通信。 适用于跨主机部署。 需要 Docker Swarm 初始化集群(或 Kubernetes CNI 支持)。
网络类型对比
网络类型 适用场景 是否跨主机 是否分配独立 IP 是否需端口映射 bridge
单机容器通信 否 是(内部私网) 是 host
性能要求高、需与主机同网络 否 否 否 none
网络隔离、安全测试 否 否 否 overlay
集群容器通信(Swarm/K8s) 是 是 是 macvlan
容器模拟物理主机,连入真实网络 否 是(物理网段) 否
创建docker自定义网络 1 docker network create [OPTIONS] NETWORK_NAME
OPTIONS参数类型
参数 类型 作用说明 --driver
, -d
字符串 指定网络驱动类型 ,如 bridge
、overlay
、macvlan
、host
,默认是 bridge
。--subnet
字符串 指定自定义子网(如 192.168.100.0/24
),仅部分网络类型支持(如 bridge
、macvlan
)。 --gateway
字符串 指定网关 IP(如 192.168.100.1
),需与 --subnet
搭配使用。 --ip-range
字符串 指定 IP 分配范围,容器 IP 将从这个范围中选取。 --ipam-driver
字符串 指定 IP 地址管理(IPAM)驱动,默认是 default
。 --ipam-opt
多个键值对 为 IPAM 驱动指定自定义选项。 --aux-address
多个键值对 为某些保留地址指定名称(如为特殊设备保留地址)。 --internal
无 创建一个内部网络,不允许外部访问(常用于安全隔离)。 --attachable
无 允许非 swarm 服务的容器手动连接 overlay 网络(仅 overlay
类型有效)。 --ingress
无 标记该 overlay 网络为 ingress 网络(Swarm 路由负载均衡使用)。 --config-from
字符串 从已有网络复制配置。 --config-only
无 创建仅供配置使用的网络。 --label
多个键值对 给网络加标签(方便识别和管理)。 --opt
, -o
多个键值对 网络驱动的自定义选项(如 macvlan 的 parent=eth0
)。
1 2 3 4 5 6 7 8 9 10 11 12 13 docker network create \ --driver bridge \ --subnet=192.168.50.0/24 \ --gateway=192.168.50.1 \ my-bridge-net docker network create \ --driver overlay \ --attachable \ my-overlay-net
查询docker网络详细信息 docker network inspect 是一个用于查看 Docker 网络详细信息的命令,常用于排查网络问题、验证容器连接、查看 IP 配置、网桥名等信息。
1 2 3 docker network inspect [OPTIONS] NETWORK_NAME | NETWORK_ID docker network inspect bridge
inspect的查询信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [ { "Name" : "bridge" , "Id" : "e3e5c6e...4c98" , "Driver" : "bridge" , "Scope" : "local" , "IPAM" : { "Driver" : "default" , "Config" : [ { "Subnet" : "172.17.0.0/16" , "Gateway" : "172.17.0.1" } ] } , "Containers" : { "abc12345..." : { "Name" : "my-container" , "IPv4Address" : "172.17.0.2/16" , "MacAddress" : "02:42:ac:11:00:02" } } , ... } ]
查询信息的相关字段
字段名 含义 Name
网络名称 Id
网络的唯一标识符(UUID) Driver
网络驱动类型(如 bridge
, overlay
, macvlan
) Scope
网络的作用范围(local
表示本地,global
表示集群) IPAM
IP 地址分配信息(包括子网和网关) Containers
当前连接到此网络的容器列表及其网络信息 Options
网络创建时的自定义选项 Labels
用户设置的标签
容器连接多网络 docker network connect
是一个非常实用的命令,用于将已存在的容器连接到另一个网络 ,从而实现容器跨网络通信。它通常用于容器同时加入多个网络 的场景。
1 2 3 4 docker network connect [OPTIONS] NETWORK CONTAINER NETWORK:你要连接到的网络名称或 ID。 CONTAINER:你要加入该网络的容器名称或 ID。
也可以自定义加入的网络IP地址
参数
作用
--ip
手动指定容器在该网络下的 IPv4 地址(需要配合网络的 --subnet
使用)
--ip6
指定 IPv6 地址(如果网络支持)
--link
已废弃,不推荐使用
--alias
指定容器在该网络中的别名,其他容器可以用这个别名访问它
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 docker network create \ --subnet=192.168.100.0/24 \ custom-net docker run -dit --name test busybox docker network connect \ --ip 192.168.100.88 \ --alias db-alias \ custom-net \ test
希望容器的网络退出,可以使用disconnect,容器多网卡通信完毕后移除不需要的网络
1 2 3 4 docker network disconnect [OPTIONS] NETWORK CONTAINER NETWORK:你要取消连接到的网络名称或 ID。 CONTAINER:你要取消该网络的容器名称或 ID。
列出docker所有网络 1 docker network ls [OPTIONS]
OPTIONS相关参数
参数 含义 示例 -f, --filter
使用条件过滤网络(可以使用多个) --filter driver=bridge
--format
自定义输出格式(Go 模板语法) --format "{ {Name}}: { {Driver}}"
--no-trunc
不截断输出(完整显示 ID 等字段) --no-trunc
-q, --quiet
只列出网络 ID(适合脚本中使用) --quiet
或 -q
过滤支持的条件
字段 示例 含义 driver
--filter driver=bridge
根据网络类型过滤(如 bridge、overlay) name
--filter name=web
按网络名称(支持模糊匹配) id
--filter id=b129f4e4b8d3
根据网络 ID 过滤 label
--filter label=env=prod
根据标签过滤 scope
--filter scope=local
根据作用范围过滤(local/global) type
--filter type=custom
或 --filter type=builtin
自定义网络 or 系统内置网络
清理不需要的网络 docker network prune 是一个用于清理未被任何容器使用的网络 的命令。它非常适合日常清理工作环境中产生的多余网络,保持系统整洁。
执行删除时会跳过docker默认就有的网络类型:
1 docker network prune [OPTIONS]
OPTIONS相关参数
参数 简写 说明 示例 --force
-f
跳过用户确认,直接执行删除操作 docker network prune -f
--filter
无 添加过滤条件,仅清除匹配的网络 --filter "label!=keep"
过滤相关参数
条件名 示例 含义 label=<key>
label=env=test
只删除带有这个标签的网络 label!=<key>
label!=keep
忽略带有该标签的网络 until=<时间>
until=24h
仅删除 24 小时前创建的未使用网络。单位:s
, m
, h
, d
(秒/分/时/天)
1 docker network prune --filter "until=24h"
docker指定删除网络 与prune不同,rm可以删除多个指定的网络,但是网络必须是用户自定义的 ,非内建(不能删除 bridge
、host
、none
)。网络不能有容器连接 ,否则删除会失败。
1 2 3 4 5 6 7 docker network rm [NETWORK...] docker network create mynet docker network create mynet1 docekr network rm mynet mynet1
卷volume命令 Volume 是 Docker 推荐用于 持久化容器数据 的机制。与容器生命周期无关,容器删除时 Volume 不会消失,可复用、易于备份、可共享。具有以下特点:
特性
描述
生命周期独立
容器删了,volume 不会删
跨容器共享
多个容器可挂载同一个 volume
可备份易迁移
可复制到其他宿主机或存储中
性能好、权限安全
优于 bind mount(绑定宿主机路径)
可用于命名挂载
如 /data
, /var/lib/mysql
等
创建卷 1 docker volume create [OPTIONS] [VOLUME_NAME]
OPTIONS相关参数
参数名 说明 示例 --driver
, -d
使用的存储驱动,默认为 local
,也可为 nfs
, flocker
, tmpfs
等 --driver local
--label
为卷打标签 --label env=prod
--opt
, -o
为驱动传递选项参数 --opt type=tmpfs
默认使用 local
驱动,存储路径在:/var/lib/docker/volumes/卷名/_data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 docker volume create \ --label env =prod \ --label service=nginx \ nginx-vol docker volume create \ --driver local \ --opt type =tmpfs \ --opt device=tmpfs \ --opt o=size=200m \ tmpfs-vol docker volume create \ --driver local \ --opt type =nfs \ --opt o=addr=192.168.1.100,nolock,soft,rw \ --opt device=:/shared/data \ nfs-vol
卷相关命令
1 2 3 4 docker volume inspect 卷名 docker volume ls docker volume prune docker volume rm 卷名
其余命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 docker top 容器id docker config docker config create docker config inspect docker config ls docker config rm docker context docker context create docker context export docker context import docker context inspect docker context ls docker context rm docker context update docker context use docker create docker diff docker events docker export docker history docker login docker logout docker logs docker manifest docker manifest annotate docker manifest create docker manifest inspect docker manifest push docker manifest rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service rollback docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker trust docker trust inspect docker trust key docker trust key generate docker trust key load docker trust revoke docker trust sign docker trust signer docker trust signer add docker trust signer remove docker update