最有用的命令
| 命令 | 说明 | 例子 |
|---|
| 1. docker | 查询所有可用的docker命令 | docker |
| 2. docker version | 显示docker版本 | docker version |
| 3. docker info | 显示系统信息 | docker info |
| 4. docker pull | 从docker hub下载镜像 | docker pull hello-world:latest |
| 5. docker build | 通过Dockerfile构建docker镜像 | docker build . |
| 6. docker run | 通过镜像创建一个容器 | docker run hello-world |
| 7. docker commit | 将容器变化保存到容器文件或者创建一个新的镜像文件 | docker commit : |
| 8. docker ps | 显示所有正在运行的容器 | docker ps |
| 9. docker start | 启动一个容器 | |
| 10. docker stop | 停止一个容器 | |
| 11. docker logs | 显示容器的日志 | |
| 12. docker rename | 修改容器的名称 | |
| 13. docker rm | 删除一个容器,删除前要先停止运行 | |
Docker Container 容器生命周期命令
| 命令 | 说明 |
|---|
| docker create | 创建一个新的容器 |
| docker ps | 列出正在运行的容器 |
| docker run | 通过镜像创建一个容器 |
| docker start | 启动一个容器 |
| docker stop | 停止一个容器 |
| docker restart | 重启一个容器 |
| docker pause | 暂停容器 |
| docker unpause | 恢复容器运行 |
| docker attach | 将终端附着到容器 |
| docker inspect | 显示容器信息 |
| docker wait | 堵塞一个或多个容器,并打印他们的退出代码 |
| docker rm | 删除一个容器,删除前要先停止运行 |
| docker kill | 停止并删除一个容器 |
| docker cp | 在本地系统和容器之间复制文件 |
Docker Image 镜像命令
| 命令 | 说明 |
|---|
| docker build | 通过Dockerfile构建docker镜像 |
| docker pull | 从docker hub下载镜像 |
| docker tag | 为镜像添加标签 |
| docker images | 显示所有镜像 |
| docker push | 推送镜像到 |
| docker history | 查看镜像到历史 |
| docker inspect | 显示镜像的信息,是json格式的 |
| docker save | 保存到镜像文件 |
| docker import | 从打包文件导入镜像 |
| docker export | 导出镜像到打包文件 |
| docker load | 加载镜像文件 |
| docker rmi | 删除镜像文件 |
Docker Volume 数据卷命令
| 命令 | 说明 |
|---|
| docker volume create | 创建数据卷 |
| docker volume inspect | 查看数据卷信息 |
| docker volume rm | 删除数据卷 |
Docker Networking 网络命令
| 命令 | 说明 |
|---|
| docker network create | 创建一个docker网络 |
| docker network ls | 列表显示docker网络 |
| docker network inspecrt | 显示docker网络的细节 |
Docker Logs and Monitoring 日志和监控命令
| 命令 | 说明 |
|---|
| docker ps -a | 显示所有运行中或者已经停止的容器 |
| docker logs | 显示容器的日志 |
| docker events | 获取所有容器的事件 |
| docker top | 显示容器中的所有进程 |
| docker stats | 检查cpu,内存和网络I/O的使用情况 |
| docker port | 显示容器所有公共端口 |
Docker Prune 清理命令
| 命令 | 说明 |
|---|
| docker system prune | 清除所有悬空的资源活着未绑定到容器的资源 |
| docker image prune | 删除悬空的镜像 |
| docker container prune | 删除悬空的容器 |
| docker volume prune | 删除悬空的数据卷 |
| docker network prune | 删除悬空的网络 |
Docker Compose命令
| 命令 | 说明 |
|---|
| docker-compose build | 创建docker compose文件 |
| docker-compose up | 运行docker compose文件 |
| docker-compose ls | 显示docker compose定义的相关镜像 |
| docker-compose start | 启动所有docker compose定义的容器 |
| docker-compose run | 运行docker compose里面的其中一个应用程序 |
| docker-compose rm | 删除compose里面的容器 |
| docker-compose ps | 通过compose来检查容器运行状态 |
Docker Hub命令
| 命令 | 说明 |
|---|
| docker search | 查找docker镜像 |
| docker pull | 从docker hub下载镜像 |
| docker login | 登录docker hub |
| docker push | 推送镜像或者整改repository到docker hub |
| docker tag | 为镜像添加标签 |
| docker logout | 退出docker hub |
Docker 高级命令详解
容器生命周期管理
创建和启动容器
# 创建但不启动容器
docker create --name mycontainer nginx:latest
# 启动已创建的容器
docker start mycontainer
# 创建并启动(最常用)
docker run -d --name webserver -p 8080:80 nginx:latest
# 交互式运行
docker run -it --name myshell ubuntu:latest /bin/bash
# 运行后自动删除
docker run --rm -it ubuntu:latest echo "Hello"
# 指定资源限制
docker run -d --name limited \
--memory="512m" \
--cpus="1.0" \
--restart=always \
nginx:latest
容器状态管理
# 暂停容器(冻结进程)
docker pause mycontainer
# 恢复暂停的容器
docker unpause mycontainer
# 重启容器
docker restart mycontainer
# 重启并设置超时
docker restart -t 30 mycontainer
# 停止容器(优雅停止)
docker stop mycontainer
# 强制停止容器
docker kill mycontainer
# 等待容器停止
docker wait mycontainer
容器信息查询
基本信息查询
# 列出所有容器
docker ps -a
# 列出运行中的容器
docker ps
# 显示最近创建的5个容器
docker ps -n 5
# 显示容器大小
docker ps -s
# 格式化输出
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
# JSON格式输出
docker ps --format '{{json .}}'
详细信息查询
# 查看容器详细信息
docker inspect mycontainer
# 查看容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mycontainer
# 查看容器日志
docker logs mycontainer
# 实时查看日志
docker logs -f mycontainer
# 查看最近100行日志
docker logs --tail 100 mycontainer
# 查看特定时间后的日志
docker logs --since "2024-01-01T00:00:00" mycontainer
# 查看容器进程
docker top mycontainer
# 查看容器资源使用
docker stats mycontainer
# 实时监控所有容器
docker stats
容器文件操作
文件复制
# 从容器复制到主机
docker cp mycontainer:/app/data.txt ./data.txt
# 从主机复制到容器
docker cp ./config.json mycontainer:/app/config.json
# 复制整个目录
docker cp mycontainer:/var/log ./logs
# 复制时保留权限
docker cp -a mycontainer:/data ./data
在容器中执行命令
# 在运行中的容器执行命令
docker exec mycontainer ls -la /app
# 交互式执行
docker exec -it mycontainer /bin/bash
# 以root用户执行
docker exec -u root mycontainer apt update
# 执行多个命令
docker exec mycontainer sh -c "cd /app && ls -la"
# 执行命令并捕获输出
docker exec mycontainer cat /etc/os-release > os_info.txt
Docker 网络管理
网络创建和管理
# 列出所有网络
docker network ls
# 创建自定义网络
docker network create mynetwork
# 创建指定子网的网络
docker network create --subnet=192.168.1.0/24 mynetwork
# 创建bridge网络
docker network create --driver bridge mybridge
# 创建overlay网络(用于Swarm)
docker network create --driver overlay myoverlay
# 删除网络
docker network rm mynetwork
# 删除未使用的网络
docker network prune
# 查看网络详情
docker network inspect mynetwork
# 连接容器到网络
docker network connect mynetwork mycontainer
# 断开容器与网络
docker network disconnect mynetwork mycontainer
网络调试
# 查看容器网络配置
docker inspect mycontainer | grep -A 20 "NetworkSettings"
# 进入容器网络命名空间
docker exec -it mycontainer ip addr
# 测试容器间网络连通性
docker exec mycontainer ping othercontainer
# 查看网络流量
docker exec mycontainer netstat -tuln
Docker 存储管理
数据卷管理
# 列出所有数据卷
docker volume ls
# 创建数据卷
docker volume create mydata
# 查看数据卷详情
docker volume inspect mydata
# 删除数据卷
docker volume rm mydata
# 删除未使用的数据卷
docker volume prune
# 使用数据卷运行容器
docker run -d -v mydata:/var/lib/mysql mysql:latest
# 使用绑定挂载
docker run -d -v /host/path:/container/path nginx:latest
# 使用tmpfs挂载
docker run -d --tmpfs /tmp:rw,size=100m nginx:latest
存储清理
# 查看Docker磁盘使用
docker system df
# 详细查看磁盘使用
docker system df -v
# 清理未使用的资源
docker system prune
# 清理所有未使用的资源(包括镜像)
docker system prune -a
# 清理并确认
docker system prune -a -f
# 只清理镜像
docker image prune -a
# 只清理容器
docker container prune
# 只清理网络
docker network prune
# 只清理构建缓存
docker builder prune
Docker 镜像管理
镜像构建和标记
# 构建镜像
docker build -t myapp:1.0 .
# 构建时不缓存
docker build --no-cache -t myapp:1.0 .
# 标记镜像
docker tag myapp:1.0 myregistry.com/myapp:1.0
# 删除镜像
docker rmi myapp:1.0
# 强制删除镜像
docker rmi -f myapp:1.0
# 删除悬空镜像
docker image prune
# 删除所有未使用的镜像
docker image prune -a
镜像信息查看
# 列出所有镜像
docker images
# 列出特定镜像
docker images nginx
# 查看镜像历史
docker history nginx:latest
# 查看镜像详情
docker inspect nginx:latest
# 查看镜像层
docker history --no-trunc nginx:latest
Docker Compose 高级用法
多容器编排
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
depends_on:
- app
app:
build: ./app
environment:
- DB_HOST=db
- DB_PORT=3306
networks:
- frontend
- backend
depends_on:
- db
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
volumes:
- db_data:/var/lib/mysql
networks:
- backend
networks:
frontend:
backend:
volumes:
db_data:
Compose命令
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 重启服务
docker-compose restart
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f web
# 进入服务容器
docker-compose exec web bash
# 构建服务
docker-compose build
# 不使用缓存构建
docker-compose build --no-cache
# 扩展服务
docker-compose up -d --scale web=3
# 暂停服务
docker-compose pause
# 恢复服务
docker-compose unpause
Docker Swarm 集群管理
初始化和加入集群
# 初始化Swarm管理器
docker swarm init
# 获取加入命令
docker swarm join-token worker
docker swarm join-token manager
# 加入集群
docker swarm join --token <token> <manager-ip>:2377
# 离开集群
docker swarm leave
# 强制离开
docker swarm leave --force
服务管理
# 创建服务
docker service create --name web --replicas 3 nginx:latest
# 列出服务
docker service ls
# 查看服务详情
docker service inspect web
# 查看服务日志
docker service logs web
# 更新服务
docker service update --image nginx:1.19 web
# 扩展服务
docker service scale web=5
# 删除服务
docker service rm web
# 滚动更新
docker service update --image nginx:1.20 --update-parallelism 2 web
Docker 安全命令
安全扫描
# 扫描镜像漏洞(需要Docker Scout)
docker scout cves myimage:latest
# 扫描容器
docker scout cves --container mycontainer
# 查看镜像策略
docker scout policy myimage:latest
# 比较镜像
docker scout compare myimage:1.0 myimage:2.0
权限管理
# 以非root用户运行
docker run -u 1000:1000 myapp
# 删除所有capabilities
docker run --cap-drop=ALL myapp
# 添加特定capability
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp
# 只读文件系统
docker run --read-only myapp
# 限制PID数量
docker run --pids-limit 100 myapp
# 禁用网络
docker run --network none myapp
Docker 调试命令
容器调试
# 进入运行中的容器
docker exec -it mycontainer /bin/sh
# 查看容器进程树
docker top mycontainer
# 查看容器资源使用
docker stats mycontainer
# 查看容器事件
docker events --filter container=mycontainer
# 导出容器
docker export mycontainer > mycontainer.tar
# 导入容器
docker import mycontainer.tar myimage:latest
镜像调试
# 查看镜像层
docker history myimage
# 保存镜像
docker save myimage > myimage.tar
# 加载镜像
docker load < myimage.tar
# 构建时调试
docker build --progress=plain -t myapp .
Docker 监控和日志
实时监控
# 监控所有容器
docker stats
# 监控特定容器
docker stats mycontainer
# 查看系统事件
docker events
# 过滤事件
docker events --filter type=container
# 查看Docker系统信息
docker system info
# 查看Docker版本
docker version
日志管理
# 配置日志驱动
docker run --log-driver=json-file --log-opt max-size=10m myapp
# 使用syslog
docker run --log-driver=syslog --log-opt syslog-address=udp://localhost:514 myapp
# 使用journald
docker run --log-driver=journald myapp
# 查看日志配置
docker inspect -f '{{.HostConfig.LogConfig}}' mycontainer
Docker API和远程管理
启用远程API
# 编辑Docker服务文件
sudo systemctl edit docker
# 添加以下内容
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
使用远程API
# 列出容器
curl -H "Content-Type: application/json" http://localhost:2375/containers/json
# 创建容器
curl -X POST -H "Content-Type: application/json" \
http://localhost:2375/containers/create?name=mycontainer \
-d '{"Image":"nginx:latest"}'
# 启动容器
curl -X POST http://localhost:2375/containers/mycontainer/start
常用别名和脚本
创建有用别名
# 添加到 ~/.bashrc 或 ~/.zshrc
alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dimg='docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"'
alias dlogs='docker logs -f'
alias dexec='docker exec -it'
alias dstop='docker stop'
alias drm='docker rm'
alias drmi='docker rmi'
alias dclean='docker system prune -a -f'
# 一键清理所有未使用的资源
alias dcleanall='docker system prune -a -f --volumes'
实用脚本
#!/bin/bash
# 批量停止并删除所有容器
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
# 删除所有悬空镜像
docker rmi $(docker images -f "dangling=true" -q)
# 导出所有容器日志
for container in $(docker ps -q); do
docker logs $container > logs_${container}.log 2>&1
done
# 备份所有数据卷
for volume in $(docker volume ls -q); do
docker run --rm -v ${volume}:/volume -v $(pwd):/backup alpine \
tar czf /backup/volume_${volume}.tar.gz -C /volume .
done
总结
Docker命令虽然众多,但掌握核心命令就能应对大部分场景:
日常使用:
docker run - 运行容器
docker ps - 查看容器
docker logs - 查看日志
docker exec - 进入容器
docker stop/start - 停止/启动容器
开发调试:
docker build - 构建镜像
docker-compose - 多容器编排
docker inspect - 查看详情
docker cp - 文件复制
运维管理:
docker system prune - 清理资源
docker stats - 监控资源
docker network - 网络管理
docker volume - 存储管理
最佳实践:
- 使用有意义的容器名称
- 定期清理未使用的资源
- 使用docker-compose管理复杂应用
- 配置日志轮转避免磁盘满
- 使用健康检查确保服务可用
掌握这些命令,你就能高效地使用Docker进行容器化应用的开发、部署和运维!
相关资源: