Docker 常用命令速查手册
快速查找 Docker 常用命令,提高工作效率
目录
镜像管理
搜索镜像
1 2 3 4 5 6 7 8 9 10 11
| docker search <镜像名>
docker search nginx
docker search --filter is-official=true nginx
docker search --limit 5 nginx
|
拉取镜像
1 2 3 4 5 6 7 8 9 10 11
| docker pull <镜像名>
docker pull <镜像名>:<标签>
docker pull nginx docker pull nginx:1.21 docker pull nginx:alpine docker pull nginx@sha256:abc123...
|
查看镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker images
docker images -a
docker images -q
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
docker inspect <镜像名或ID>
docker history <镜像名>
|
构建镜像
1 2 3 4 5 6 7 8 9 10 11 12
| docker build -t <镜像名>:<标签> <路径>
docker build -t myapp:1.0 . docker build -f Dockerfile.prod -t myapp:prod .
docker build --no-cache -t myapp:1.0 .
docker build --build-arg APP_VERSION=1.0 -t myapp .
|
删除镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker rmi <镜像名或ID>
docker rmi -f <镜像名或ID>
docker rmi <镜像1> <镜像2> <镜像3>
docker image prune
docker image prune -a
docker rmi $(docker images -q)
|
导出/导入镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker save -o <文件名>.tar <镜像名>
docker save -o nginx.tar nginx:latest
docker load -i <文件名>.tar
docker load -i nginx.tar
docker save <镜像名> > <文件名>.tar
docker load < <文件名>.tar
|
标记镜像
1 2 3 4 5 6
| docker tag <源镜像> <新镜像名>:<标签>
docker tag nginx:latest my-nginx:1.0 docker tag nginx:latest registry.example.com/my-nginx:1.0
|
容器管理
创建容器
1 2 3 4 5 6 7 8 9 10 11
| docker create [选项] <镜像名>
docker create \ --name my-container \ -p 8080:80 \ -v /host/path:/container/path \ -e KEY=VALUE \ -d \ <镜像名>
|
启动容器
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
| docker run [选项] <镜像名>
docker run -d --name my-nginx nginx
docker run -it --name my-ubuntu ubuntu /bin/bash
docker run -d -p 8080:80 nginx
docker run -d -v /data:/app/data nginx
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
docker run --rm -it ubuntu /bin/bash
docker run -d --restart=always nginx docker run -d --restart=on-failure:5 nginx docker run -d --restart=unless-stopped nginx
|
查看容器
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
| docker ps
docker ps -a
docker ps -q
docker ps -s
docker ps -l
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
docker inspect <容器名或ID>
docker top <容器名或ID>
docker port <容器名或ID>
|
启动/停止容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker start <容器名或ID>
docker stop <容器名或ID>
docker restart <容器名或ID>
docker kill <容器名或ID>
docker pause <容器名或ID>
docker unpause <容器名或ID>
|
删除容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker rm <容器名或ID>
docker rm -f <容器名或ID>
docker rm <容器1> <容器2> <容器3>
docker container prune
docker rm -f $(docker ps -aq)
docker rm $(docker ps -a -q)
|
容器重命名
1 2 3 4 5
| docker rename <旧名称> <新名称>
docker rename my-container new-container
|
容器操作
进入容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker exec -it <容器名或ID> /bin/bash
docker exec -it <容器名或ID> /bin/sh
sudo docker exec -it <容器名或ID> /bin/bash
docker exec -it -u root <容器名或ID> /bin/bash
docker exec -it -w /app <容器名或ID> /bin/bash
|
在容器中执行命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| docker exec <容器名或ID> <命令>
docker exec my-nginx ls -la docker exec my-nginx nginx -v docker exec mysql-db mysql -u root -p -e "SHOW DATABASES;"
docker exec -it <容器名或ID> <命令>
docker exec -d <容器名或ID> <命令>
docker exec <容器名或ID> /bin/sh -c "cd /tmp && ls -la"
docker exec -e DEBUG=true <容器名或ID> <命令>
|
查看日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| docker logs <容器名或ID>
docker logs -f <容器名或ID>
docker logs --tail 100 <容器名或ID>
docker logs -t <容器名或ID>
docker logs --since 10m <容器名或ID>
docker logs --since "2024-01-01T00:00:00" --until "2024-01-02T00:00:00" <容器名或ID>
docker logs -f --tail 50 -t <容器名或ID>
|
复制文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker cp <容器名或ID>:<容器内路径> <宿主机路径>
docker cp <宿主机路径> <容器名或ID>:<容器内路径>
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf docker cp ./index.html my-nginx:/usr/share/nginx/html/ docker cp my-nginx:/usr/share/nginx/html ./html_backup/
sudo docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
|
附加到容器
1 2 3 4
| docker attach <容器名或ID>
|
导出/导入容器
1 2 3 4 5 6 7 8 9 10 11
| docker export <容器名或ID> > <文件名>.tar
docker export my-container > my-container.tar
docker import <文件名>.tar <新镜像名>:<标签>
docker import my-container.tar my-image:1.0
|
更新容器
1 2 3 4 5 6 7 8 9
| docker update --restart=always <容器名或ID>
docker update --memory="512m" --cpus="1.0" <容器名或ID>
docker update --restart=unless-stopped my-nginx docker update --memory="1g" --cpus="2.0" my-app
|
网络管理
查看网络
1 2 3 4 5 6 7 8
| docker network ls
docker network inspect <网络名>
docker network inspect <网络名> --format '{{range .Containers}}{{.Name}}{{end}}'
|
创建网络
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| docker network create <网络名>
docker network create -d bridge <网络名>
docker network create \ --driver=bridge \ --subnet=172.20.0.0/16 \ --gateway=172.20.0.1 \ my-network
docker network create my-app-network docker network create --driver bridge --subnet=192.168.100.0/24 my-network
|
连接容器到网络
1 2 3 4 5 6 7 8 9
| docker network connect <网络名> <容器名或ID>
docker network connect --alias <别名> <网络名> <容器名或ID>
docker network connect my-network my-nginx docker network connect --alias web my-network my-nginx
|
断开容器网络
1 2 3 4 5 6 7 8
| docker network disconnect <网络名> <容器名或ID>
docker network disconnect -f <网络名> <容器名或ID>
docker network disconnect my-network my-nginx
|
删除网络
1 2 3 4 5 6 7 8 9 10 11
| docker network rm <网络名>
docker network rm <网络1> <网络2>
docker network prune
docker network rm $(docker network ls -q)
|
网络类型
| 网络类型 |
说明 |
用途 |
| bridge |
默认网络,容器间可通过IP通信 |
单机多容器通信 |
| host |
容器使用宿主机网络栈 |
高性能网络需求 |
| none |
容器无网络连接 |
完全隔离环境 |
| overlay |
跨主机网络 |
Docker Swarm 集群 |
| macvlan |
为容器分配MAC地址 |
需要容器像物理设备 |
数据卷管理
查看卷
1 2 3 4 5 6 7 8
| docker volume ls
docker volume inspect <卷名>
docker volume ls -f dangling=true
|
创建卷
1 2 3 4 5 6 7 8 9
| docker volume create <卷名>
docker volume create --label <标签>=<值> <卷名>
docker volume create my-data docker volume create --label env=prod my-prod-data
|
使用卷
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker run -d -v <卷名>:<容器内路径> <镜像名>
docker run -d -v <宿主机路径>:<容器内路径> <镜像名>
docker run -d -v <卷名>:<容器内路径>:ro <镜像名>
docker run -d -v my-data:/app/data nginx docker run -d -v /host/data:/container/data nginx docker run -d -v my-data:/app/data:ro nginx
|
删除卷
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker volume rm <卷名>
docker volume rm <卷1> <卷2>
docker volume prune
docker volume prune -a
docker volume rm $(docker volume ls -q)
|
卷备份与恢复
1 2 3 4 5 6 7 8
| docker run --rm -v <卷名>:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz /data
docker run --rm -v <卷名>:/data -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /
docker run --rm -v my-data:/data -v $(pwd):/backup alpine tar czf /backup/my-data-backup.tar.gz /data
|
日志与监控
查看日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker logs <容器名或ID>
docker logs -f <容器名或ID>
docker logs --tail 100 <容器名或ID>
docker logs -t <容器名或ID>
docker logs --since 10m <容器名或ID>
docker logs -f --tail 50 -t <容器名或ID>
|
查看资源使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| docker stats
docker stats <容器名或ID>
docker stats --no-stream
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
docker stats my-nginx docker stats --no-stream my-nginx
|
查看事件
1 2 3 4 5 6 7 8 9 10 11
| docker events
docker events --since 10m
docker events --filter container=<容器名或ID>
docker events --format "{{.Status}} {{.Actor.Attributes.name}}"
|
健康检查
1 2 3 4 5 6 7 8 9
| docker inspect --format='{{.State.Health.Status}}' <容器名或ID>
docker run --health-cmd="curl -f http://localhost/ || exit 1" \ --health-interval=5s \ --health-timeout=3s \ --health-retries=3 \ nginx
|
系统信息
查看 Docker 信息
1 2 3 4 5 6 7 8 9 10 11
| docker info
docker version
docker version --format '{{.Server.Version}}'
docker version --format 'Client: {{.Client.Version}}\nServer: {{.Server.Version}}'
|
查看磁盘使用
1 2 3 4 5 6 7 8
| docker system df
docker system df -v
docker system df --format "table {{.Type}}\t{{.TotalCount}}\t{{.Size}}"
|
登录/登出
1 2 3 4 5 6 7 8 9 10 11 12
| docker login
docker login <仓库地址>
docker login registry.example.com
docker logout docker logout <仓库地址>
|
推送镜像
1 2 3 4 5 6
| docker push <镜像名>:<标签>
docker push my-username/my-image:1.0 docker push registry.example.com/my-image:1.0
|
清理命令
清理未使用的资源
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
| docker system prune
docker system prune -a
docker system prune -a --volumes
docker image prune
docker container prune
docker network prune
docker volume prune
docker builder prune
docker builder prune -a
|
清理示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker container prune
docker image prune -a
docker volume prune
docker network prune
docker builder prune -a
docker system prune -a --volumes --force
|
实用技巧
批量操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -f "dangling=true" -q)
docker volume rm $(docker volume ls -q)
for container in $(docker ps -q); do echo "=== $container ===" docker logs --tail 10 $container done
docker restart $(docker ps -q)
|
查找容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker ps --filter name=my-container
docker ps --filter ancestor=nginx
docker ps --filter status=exited
docker ps --filter label=com.example.version=1.0
docker ps --filter name=my --filter status=running
|
资源限制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| docker run -d --memory="512m" nginx
docker run -d --cpus="1.5" nginx
docker run -d --cpuset-cpus="0,1" nginx
docker run -d \ --memory="1g" \ --cpus="2.0" \ --cpuset-cpus="0,1,2,3" \ nginx
|
端口映射
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker run -d -p 8080:80 nginx
docker run -d -p 8080:80 -p 8443:443 nginx
docker run -d -p 80 nginx
docker run -d -p 127.0.0.1:8080:80 nginx
docker run -d -p 53:53/udp nginx
|
环境变量
1 2 3 4 5 6 7 8 9 10 11 12
| docker run -d -e KEY=VALUE nginx
docker run -d -e KEY1=VALUE1 -e KEY2=VALUE2 nginx
docker run -d --env-file .env nginx
export MY_VAR="hello" docker run -d -e MY_VAR nginx
|
工作目录
1 2 3 4 5
| docker run -d -w /app nginx
docker run -d -w /app -v $(pwd):/app nginx
|
用户权限
1 2 3 4 5 6 7 8
| docker run -d -u nginx nginx
docker run -d -u 1000:1000 nginx
docker run -d -u root nginx
|
时间设置
1 2 3 4 5
| docker run -d -e TZ=Asia/Shanghai nginx
docker run -d -v /etc/localtime:/etc/localtime:ro nginx
|
容器互联
1 2 3 4 5 6 7 8
| docker run -d --name db postgres docker run -d --link db:db myapp
docker network create my-network docker run -d --name db --network my-network postgres docker run -d --name myapp --network my-network myapp
|
常用组合命令
快速启动常用服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| docker run -d --name nginx -p 80:80 -v $(pwd)/html:/usr/share/nginx/html nginx
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
docker run -d --name redis -p 6379:6379 redis:alpine
docker run -d --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo
docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.0.0
|
调试容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker exec -it <容器名或ID> /bin/bash
docker logs -f --tail 100 <容器名或ID>
docker top <容器名或ID>
docker stats <容器名或ID>
docker inspect <容器名或ID>
|
备份与恢复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker export <容器名或ID> > backup.tar
docker save -o backup.tar <镜像名>
docker run --rm -v <卷名>:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz /data
docker import backup.tar <新镜像名>:<标签>
docker load -i backup.tar
docker run --rm -v <卷名>:/data -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /
|
快速参考表
镜像命令
| 命令 |
说明 |
docker search <镜像> |
搜索镜像 |
docker pull <镜像> |
拉取镜像 |
docker images |
列出镜像 |
docker build -t <名> . |
构建镜像 |
docker rmi <镜像> |
删除镜像 |
docker save -o file.tar <镜像> |
导出镜像 |
docker load -i file.tar |
导入镜像 |
docker tag <源> <目标> |
标记镜像 |
容器命令
| 命令 |
说明 |
docker run <镜像> |
创建并启动容器 |
docker ps |
列出运行中的容器 |
docker ps -a |
列出所有容器 |
docker start <容器> |
启动容器 |
docker stop <容器> |
停止容器 |
docker restart <容器> |
重启容器 |
docker rm <容器> |
删除容器 |
docker exec -it <容器> /bin/bash |
进入容器 |
docker logs <容器> |
查看日志 |
docker cp <容器>:<路径> . |
复制文件 |
网络命令
| 命令 |
说明 |
docker network ls |
列出网络 |
docker network create <名> |
创建网络 |
docker network connect <网> <容> |
连接网络 |
docker network disconnect <网> <容> |
断开网络 |
docker network rm <网> |
删除网络 |
卷命令
| 命令 |
说明 |
docker volume ls |
列出卷 |
docker volume create <名> |
创建卷 |
docker volume inspect <名> |
查看卷详情 |
docker volume rm <名> |
删除卷 |
docker volume prune |
清理未使用的卷 |
系统命令
| 命令 |
说明 |
docker info |
查看系统信息 |
docker version |
查看版本 |
docker system df |
查看磁盘使用 |
docker system prune |
清理未使用资源 |
docker stats |
查看资源使用 |
常用参数速查
docker run 常用参数
| 参数 |
说明 |
示例 |
-d |
后台运行 |
docker run -d nginx |
-it |
交互式终端 |
docker run -it ubuntu bash |
--name |
指定名称 |
docker run --name my-nginx nginx |
-p |
端口映射 |
docker run -p 8080:80 nginx |
-v |
挂载卷 |
docker run -v /data:/app nginx |
-e |
环境变量 |
docker run -e KEY=VAL nginx |
--rm |
退出后删除 |
docker run --rm ubuntu bash |
--restart |
重启策略 |
docker run --restart=always nginx |
-u |
指定用户 |
docker run -u nginx nginx |
-w |
工作目录 |
docker run -w /app nginx |
docker exec 常用参数
| 参数 |
说明 |
示例 |
-i |
保持输入开启 |
docker exec -i my-nginx bash |
-t |
分配终端 |
docker exec -t my-nginx bash |
-d |
后台执行 |
docker exec -d my-nginx sleep 10 |
-u |
指定用户 |
docker exec -u root my-nginx bash |
-w |
工作目录 |
docker exec -w /tmp my-nginx ls |
-e |
环境变量 |
docker exec -e DEBUG=1 my-nginx bash |
docker logs 常用参数
| 参数 |
说明 |
示例 |
-f |
实时跟踪 |
docker logs -f my-nginx |
--tail |
显示最后N行 |
docker logs --tail 100 my-nginx |
-t |
显示时间戳 |
docker logs -t my-nginx |
--since |
显示最近时间 |
docker logs --since 10m my-nginx |
注意事项
权限问题
1 2 3 4 5 6 7 8
| sudo docker ps sudo docker images sudo docker run -d nginx
sudo usermod -aG docker $USER
|
容器命名
1 2 3 4
| docker run -d --name web-server nginx docker run -d --name db-server mysql docker run -d --name cache-server redis
|
数据持久化
1 2 3
| docker run -d -v mysql-data:/var/lib/mysql mysql docker run -d -v $(pwd)/data:/app/data nginx
|
资源限制
1 2 3 4 5 6
| docker run -d \ --memory="1g" \ --cpus="1.0" \ --restart=unless-stopped \ nginx
|
安全建议
1 2 3 4 5 6 7 8
| docker run -e PASSWORD=$(cat /path/to/password) myapp
docker run --read-only nginx
docker run -u nginx nginx
|
附录:常用镜像标签
| 镜像 |
常用标签 |
说明 |
| nginx |
latest, alpine, 1.21, stable |
Web 服务器 |
| mysql |
latest, 8.0, 5.7 |
数据库 |
| redis |
latest, alpine, 6.2 |
缓存 |
| postgres |
latest, 14, 13 |
数据库 |
| node |
latest, 18, alpine |
Node.js 运行时 |
| python |
latest, 3.11, 3.10, alpine |
Python 运行时 |
| ubuntu |
latest, 22.04, 20.04 |
Ubuntu 系统 |
| alpine |
latest, 3.18 |
轻量级 Linux |
| centos |
latest, 7, 8 |
CentOS 系统 |
| debian |
latest, bullseye, buster |
Debian 系统 |
提示:将此文档保存为书签,随时查阅 Docker 命令!