以下是常用的 Docker 运维命令的详细说明,包括所有主要参数、使用形式、使用场景以及注意事项。
1. Docker 镜像操作命令
1.1 拉取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
参数:
NAME
:镜像名称。TAG
:镜像标签(默认为latest
)。@DIGEST
:镜像的内容地址。--all-tags
,-a
:拉取仓库中的所有标签。--disable-content-trust
:忽略镜像验证 (默认开启)。--platform
:设置平台(例如,linux/amd64)。
案例:
docker pull nginx:latest
docker pull --all-tags ubuntu
使用场景:
从 Docker Hub 或其他镜像仓库下载所需的镜像。
注意事项:
- 确保网络连接正常,拉取镜像需要访问外部仓库。
- 使用
--all-tags
参数会拉取镜像仓库中的所有标签,占用较多存储空间。
1.2 列出镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
参数:
-a
,--all
:显示所有镜像(默认隐藏中间层)。--digests
:显示镜像摘要。-f
,--filter
:根据条件过滤显示内容。--format
:指定返回值的格式。--no-trunc
:显示完整的镜像信息。REPOSITORY
:仓库名称。TAG
:镜像标签。
案例:
docker images
docker images --digests
使用场景:
查看本地已有的 Docker 镜像。
注意事项:
- 使用
--filter
参数可以方便地过滤出特定条件的镜像。 --no-trunc
参数会显示完整的镜像信息,有助于详细检查镜像。
1.3 删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
参数:
IMAGE
:镜像 ID 或名称。-f
,--force
:强制删除镜像。--no-prune
:不要删除悬空的父镜像。
案例:
docker rmi nginx:latest
docker rmi -f $(docker images -q)
使用场景:
删除本地不再需要的 Docker 镜像,释放存储空间。
注意事项:
- 强制删除运行中的镜像会导致相关容器停止运行。
- 删除镜像前确保没有容器在使用,否则需要使用
-f
参数强制删除。
2. 容器操作命令
2.1 运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数:
-d
,--detach
:后台运行容器并返回容器 ID。-i
,--interactive
:保持标准输入打开。-t
,--tty
:分配一个伪终端。--name
:为容器指定名称。-p
,--publish
:映射端口(格式:hostPort:containerPort)。-P
,--publish-all
:随机映射所有端口。-v
,--volume
:绑定挂载一个卷。--rm
:容器停止后自动删除。-e
,--env
:设置环境变量。--env-file
:从文件读取环境变量。--network
:连接到指定网络。--restart
:容器重启策略(如:no, on-failure, always, unless-stopped)。
案例:
docker run -d -p 80:80 --name mynginx nginx:latest
docker run -it --rm ubuntu:latest /bin/bash
使用场景:
启动一个新的 Docker 容器,运行指定的镜像。
注意事项:
-d
参数后台运行容器,可以通过docker ps
查看运行状态。--rm
参数在容器退出时自动删除容器。
2.2 列出容器
docker ps [OPTIONS]
参数:
-a
,--all
:显示所有容器(默认只显示运行中的容器)。-q
,--quiet
:只显示容器 ID。-f
,--filter
:根据条件过滤显示内容。--format
:指定返回值的格式。-n
,--last
:显示最后 n 个容器。--no-trunc
:显示完整的容器信息。
案例:
docker ps -a
docker ps -q
使用场景:
查看当前运行中的容器或所有容器的状态。
注意事项:
- 使用
-a
参数可以查看所有容器,包括停止的容器。 -q
参数只显示容器 ID,便于批量操作。
2.3 停止容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
参数:
CONTAINER
:容器 ID 或名称。-t
,--time
:等待容器停止的时间(秒),默认 10。
案例:
docker stop mynginx
docker stop -t 5 $(docker ps -q)
使用场景:
停止一个或多个正在运行的 Docker 容器。
注意事项:
- 停止容器会给其发送 SIGTERM 信号,等待一段时间后发送 SIGKILL。
- 可以使用
-t
参数指定等待时间。
2.4 删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
参数:
CONTAINER
:容器 ID 或名称。-f
,--force
:强制删除运行中的容器(使用 SIGKILL)。-l
,--link
:删除链接。-v
,--volumes
:删除与容器关联的卷。
案例:
docker rm mynginx
docker rm -f $(docker ps -a -q)
使用场景:
删除一个或多个停止的 Docker 容器,释放存储空间。
注意事项:
- 删除运行中的容器需要使用
-f
参数。 - 确保没有需要的数据在容器内,删除操作不可恢复。
3. 容器管理命令
3.1 查看容器日志
docker logs [OPTIONS] CONTAINER
参数:
-f
,--follow
:跟随日志输出。--since
:显示指定时间后的日志。--tail
:显示最后多少行日志。--timestamps
:显示日志时间戳。--until
:显示指定时间前的日志。
案例:
docker logs -f --tail 100 mynginx
docker logs --since 2021-09-01T00:00:00 mynginx
使用场景:
查看容器的日志输出,排查容器运行中的问题。
注意事项:
- 使用
-f
参数可以实时查看日志输出。 --since
和--until
参数可以指定时间范围,有助于定位问题。
3.2 进入运行中的容器
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
参数:
-i
,--interactive
:保持标准输入打开。-t
,--tty
:分配一个伪终端。--detach-keys
:指定容器分离的按键组合。
案例:
docker exec -it mynginx /bin/bash
docker exec -i mynginx sh -c 'echo "Hello, World!"'
使用场景:
在运行中的容器内执行命令,进行调试或维护。
注意事项:
-it
参数用于交互模式,分配一个伪终端。- 执行命令时需确保容器内有相应的命令可执行。
3.3 复制文件到容器
docker cp [OPTIONS] SRC_PATH DEST_PATH
参数:
SRC_PATH
:源文件路径。DEST_PATH
:目标文件路径。
案例:
docker cp myfile.txt mynginx:/usr/share/nginx/html
docker cp mynginx:/usr/share/nginx/html/myfile.txt .
使用场景:
将本地文件复制到容器中,或从容器中复制文件
到本地。
注意事项:
- 确保目标路径存在且具有适当的权限。
- 大量文件复制可能会影响容器性能。
4. 网络和存储管理命令
4.1 创建网络
docker network create [OPTIONS] NETWORK
参数:
NETWORK
:网络名称。--driver
:指定网络驱动程序。--subnet
:指定子网(CIDR 格式)。--gateway
:指定网关。--ip-range
:指定 IP 地址范围。--opt
:设置网络驱动选项。--attachable
:使网络可连接。
案例:
docker network create mynetwork
docker network create --driver bridge --subnet 192.168.1.0/24 mynetwork
使用场景:
创建一个新的 Docker 网络,便于容器之间的通信。
注意事项:
- 使用
--subnet
和--gateway
参数可以自定义网络配置。 - 不同网络驱动程序提供不同的功能。
4.2 查看网络
docker network ls
参数:
-f
,--filter
:根据条件过滤显示内容。--format
:指定返回值的格式。
案例:
docker network ls
docker network ls --filter driver=bridge
使用场景:
查看现有的 Docker 网络。
注意事项:
- 可以使用
--filter
参数按条件过滤网络列表。 - 详细信息可以通过
docker network inspect NETWORK
查看。
4.3 创建数据卷
docker volume create [OPTIONS] [VOLUME]
参数:
VOLUME
:数据卷名称。--driver
:指定卷驱动程序。--label
:为卷设置标签。--opt
:设置卷驱动程序选项。
案例:
docker volume create myvolume
docker volume create --label app=data myvolume
使用场景:
创建一个 Docker 数据卷,用于数据持久化存储。
注意事项:
- 使用
--label
参数可以为数据卷打标签,便于管理。 - 数据卷的生命周期与容器分离,数据不会因容器删除而丢失。
4.4 查看数据卷
docker volume ls
参数:
-f
,--filter
:根据条件过滤显示内容。--format
:指定返回值的格式。
案例:
docker volume ls
docker volume ls --filter label=app=data
使用场景:
查看现有的 Docker 数据卷。
注意事项:
- 可以使用
--filter
参数按条件过滤数据卷列表。 - 详细信息可以通过
docker volume inspect VOLUME
查看。
5. Docker Compose 命令
5.1 启动服务
docker-compose up [OPTIONS]
参数:
-d
,--detach
:后台运行容器。--build
:构建镜像。--force-recreate
:强制重新创建容器。--no-deps
:不启动链接的服务。--remove-orphans
:删除孤立的容器。-t
,--timeout
:设置容器停止等待时间(秒)。
案例:
docker-compose up -d
docker-compose up --build
使用场景:
启动基于 docker-compose.yml
定义的多个容器服务。
注意事项:
-d
参数后台运行服务,可以通过docker-compose ps
查看状态。- 使用
--build
参数强制重新构建镜像。
5.2 停止服务
docker-compose down [OPTIONS]
参数:
--rmi
:删除相关镜像(none、local、all)。-v
,--volumes
:删除相关卷。--remove-orphans
:删除孤立的容器。
案例:
docker-compose down
docker-compose down --rmi all --volumes
使用场景:
停止并删除基于 docker-compose.yml
启动的容器和网络。
注意事项:
--rmi
参数可以指定是否删除相关镜像。--volumes
参数删除相关卷。
5.3 查看服务日志
docker-compose logs [OPTIONS] [SERVICE...]
参数:
-f
,--follow
:跟随日志输出。-t
,--timestamps
:显示日志时间戳。--tail
:显示最后多少行日志。
案例:
docker-compose logs -f
docker-compose logs --tail 100
使用场景:
查看 docker-compose
启动的服务容器日志。
注意事项:
- 使用
-f
参数可以实时查看日志输出。 - 可以指定具体服务名查看特定服务的日志。
6. Docker Swarm 命令
6.1 初始化 Swarm
docker swarm init [OPTIONS]
参数:
--advertise-addr
:指定广告地址。--autolock
:启用自动锁定。--cert-expiry
:设置证书过期时间。--dispatcher-heartbeat
:设置调度心跳间隔。--external-ca
:指定外部 CA。--listen-addr
:指定监听地址。
案例:
docker swarm init --advertise-addr 192.168.1.100
使用场景:
初始化 Docker Swarm 集群,将当前节点设为管理节点。
注意事项:
- 使用
--advertise-addr
指定管理节点的地址,供其他节点加入。 - Swarm 集群初始化后,可以通过
docker node ls
查看集群节点。
6.2 加入 Swarm
docker swarm join [OPTIONS] HOST:PORT
参数:
--token
:指定加入的令牌。--advertise-addr
:指定广告地址。--listen-addr
:指定监听地址。
案例:
docker swarm join --token SWMTKN-1-xxxxx 192.168.1.100:2377
使用场景:
将当前节点加入到已有的 Docker Swarm 集群。
注意事项:
- 确保加入的节点可以通过网络访问管理节点。
- 使用
--token
参数提供管理节点生成的令牌。
6.3 查看节点
docker node ls
参数:
-f
,--filter
:根据条件过滤显示内容。--format
:指定返回值的格式。-q
,--quiet
:只显示节点 ID。
案例:
docker node ls
docker node ls -q
使用场景:
查看 Docker Swarm 集群中的节点列表和状态。
注意事项:
- 使用
--filter
参数可以按条件过滤节点列表。 --format
参数自定义输出格式。
6.4 创建服务
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
参数:
--name
:指定服务名称。--replicas
:指定副本数量。--network
:指定连接的网络。--constraint
:设置服务约束。--endpoint-mode
:设置终端模式。--env
:设置环境变量。--label
:设置服务标签。--limit-cpu
:设置 CPU 限制。--limit-memory
:设置内存限制。
案例:
docker service create --name myservice --replicas 3 nginx
使用场景:
在 Docker Swarm 集群中创建一个新的服务。
注意事项:
- 使用
--replicas
参数指定服务的副本数量。 --env
和--label
参数用于设置环境变量和标签。
6.5 查看服务
docker service ls
参数:
-f
,--filter
:根据条件过滤显示内容。--format
:指定返回值的格式。-q
,--quiet
:只显示服务 ID。
案例:
docker service ls
docker service ls -q
使用场景:
查看 Docker Swarm 集群中已部署的服务。
注意事项:
- 使用
--filter
参数可以按条件过滤服务列表。 --format
参数自定义输出格式。
通过这些命令和参数,可以高效地管理 Docker 容器、镜像、网络和数据卷等资源。