Docker 命令大全 🐳 目录 📚 ✨ Docker 简介 📦 一、安装与卸载
Docker 命令大全 🐳
目录 📚
✨ Docker 简介
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖打包到轻量级、可移植的容器中。这些容器可以在任何支持 Docker 的系统中运行,确保环境一致性并简化部署流程。
🎯 Docker 的核心优势:
- 环境一致性:开发、测试、生产环境完全一致
- 快速部署:秒级启动和停止容器
- 资源隔离:每个容器拥有独立的运行环境
- 易于扩展:快速复制和扩展容器实例
- 版本控制:镜像版本管理,轻松回滚
🔧 Docker 核心组件:
- Docker Engine:核心容器运行时
- Docker Images:只读模板,用于创建容器
- Docker Containers:镜像的运行实例
- Docker Registry:镜像存储和分发服务
- Docker Compose:多容器应用定义和管理工具
📦 一、安装与卸载
1️⃣ 卸载 Docker
1
2
3
4
5
6
7
8
9
10
11
|
# Ubuntu/Debian 系统卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get purge docker-ce docker-ce-cli containerd.io
# CentOS/RHEL 系统卸载
sudo yum remove docker-ce docker-ce-cli containerd.io
# 清除 Docker 相关文件和配置
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker
|
2️⃣ 安装 Docker (Ubuntu/Debian)
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
|
# 更新软件包索引
sudo apt-get update
# 安装依赖包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker run hello-world
|
3️⃣ 安装 Docker (CentOS/RHEL)
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
|
# 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装依赖包
sudo yum install -y yum-utils
# 设置稳定的仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker run hello-world
|
4️⃣ 安装 Docker Compose
1
2
3
4
5
6
7
8
|
# 下载最新版本的 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
|
🔍 二、基本信息与版本
1️⃣ 版本信息查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 查看 Docker 版本信息
docker --version
# 查看详细的 Docker 版本信息(客户端和服务器)
docker version
# 查看 Docker 系统信息
docker info
# 查看 Docker 磁盘使用情况
docker system df
# 查看详细的磁盘使用情况
docker system df -v
|
2️⃣ 系统状态检查
1
2
3
4
5
6
7
8
9
10
11
|
# 检查 Docker 服务状态
sudo systemctl status docker
# 查看 Docker 运行时信息
docker info | grep -E "(Server Version|Storage Driver|Total Memory)"
# 查看 Docker 容器运行状态
docker stats --no-stream
# 查看 Docker 事件流
docker events
|
🐋 三、容器管理
1️⃣ 容器生命周期管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 运行一个新容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 示例:运行一个交互式的 Ubuntu 容器
docker run -it --name my-ubuntu ubuntu:20.04 /bin/bash
# 示例:在后台运行一个 Nginx 容器
docker run -d --name my-nginx -p 8080:80 nginx:latest
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看最近创建的容器
docker ps -l
# 查看容器大小
docker ps -s
# 格式化输出容器信息
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
|
2️⃣ 容器启停管理
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 stop <容器名或ID>
# 强制停止容器(发送 SIGKILL)
docker kill <容器名或ID>
# 启动已停止的容器
docker start <容器名或ID>
# 重启容器
docker restart <容器名或ID>
# 暂停容器
docker pause <容器名或ID>
# 恢复暂停的容器
docker unpause <容器名或ID>
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 批量操作示例
docker stop $(docker ps -aq) # 停止所有容器
docker start $(docker ps -aq) # 启动所有容器
|
3️⃣ 容器删除管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 删除已停止的容器
docker rm <容器名或ID>
# 强制删除容器(包括运行中的)
docker rm -f <容器名或ID>
# 删除所有已停止的容器
docker container prune
# 删除所有容器(包括运行中的)
docker rm -f $(docker ps -aq)
# 删除容器时同时删除关联的匿名卷
docker rm -v <容器名或ID>
|
4️⃣ 容器监控与日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 查看容器日志
docker logs <容器名或ID>
# 实时查看日志(跟随输出)
docker logs -f <容器名或ID>
# 查看最后 N 行日志
docker logs --tail 100 <容器名或ID>
# 查看指定时间后的日志
docker logs --since 2023-01-01T00:00:00 <容器名或ID>
# 查看容器资源使用情况
docker stats <容器名或ID>
# 查看所有容器资源使用(实时更新)
docker stats --all
# 只查看一次资源使用情况
docker stats --no-stream
# 查看容器进程信息
docker top <容器名或ID>
|
🖥️ 四、容器操作
1️⃣ 容器交互与执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 进入运行中的容器(使用 bash)
docker exec -it <容器名或ID> bash
# 进入运行中的容器(使用 sh)
docker exec -it <容器名或ID> sh
# 在容器中执行单条命令
docker exec <容器名或ID> <命令>
# 示例:在容器中查看文件列表
docker exec <容器名或ID> ls -la
# 示例:在容器中查看进程
docker exec <容器名或ID> ps aux
# 以特权模式进入容器(有系统权限)
docker exec -it --privileged <容器名或ID> bash
|
2️⃣ 文件操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 从容器复制文件到本地
docker cp <容器名或ID>:<容器内路径> <本地路径>
# 从本地复制文件到容器
docker cp <本地路径> <容器名或ID>:<容器内路径>
# 示例:复制容器中的日志文件
docker cp my-nginx:/var/log/nginx/access.log ./nginx-access.log
# 示例:复制配置文件到容器
docker cp nginx.conf my-nginx:/etc/nginx/nginx.conf
# 复制目录(递归复制)
docker cp ./config/ my-nginx:/etc/nginx/conf.d/
|
3️⃣ 容器配置管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 重命名容器
docker rename <旧容器名> <新容器名>
# 更新容器配置
docker update --memory 512m <容器名或ID>
docker update --cpus 2 <容器名或ID>
# 查看容器详细信息
docker inspect <容器名或ID>
# 查看容器特定信息(如IP地址)
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名或ID>
# 查看容器日志路径
docker inspect --format='{{.LogPath}}' <容器名或ID>
# 导出容器为tar包
docker export <容器名或ID> > container.tar
# 从tar包导入为镜像
docker import container.tar my-image:latest
|
🏞️ 五、镜像管理
1️⃣ 镜像基本操作
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
|
# 查看本地镜像列表
docker images
# 查看所有镜像(包括中间层镜像)
docker images -a
# 显示镜像ID
docker images -q
# 拉取镜像
docker pull <镜像名>:<标签>
# 示例:拉取特定版本的 Ubuntu
docker pull ubuntu:20.04
# 搜索 Docker Hub 上的镜像
docker search <关键词>
# 示例:搜索 Nginx 相关镜像
docker search nginx
# 删除镜像
docker rmi <镜像名或ID>
# 强制删除镜像
docker rmi -f <镜像名或ID>
# 删除所有未使用的镜像
docker image prune -a
# 删除悬空镜像(无标签镜像)
docker image prune
|
2️⃣ 镜像构建与导出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 构建镜像
docker build -t <镜像名>:<标签> <Dockerfile路径>
# 示例:构建并标签镜像
docker build -t my-app:1.0.0 .
# 从 Dockerfile 构建(指定文件)
docker build -f Dockerfile.prod -t my-app:prod .
# 查看镜像构建历史
docker history <镜像名或ID>
# 保存镜像为 tar 文件
docker save -o <文件名>.tar <镜像名>
# 从 tar 文件加载镜像
docker load -i <文件名>.tar
# 导出容器文件系统
docker export <容器名或ID> > container.tar
# 导入容器文件系统为镜像
docker import container.tar my-imported-image:latest
|
3️⃣ 镜像标签与推送
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 给镜像打标签
docker tag <源镜像名> <新镜像名>:<标签>
# 示例:为镜像添加版本标签
docker tag my-app:latest my-app:1.0.0
# 登录到 Docker Registry
docker login
# 登出 Docker Registry
docker logout
# 推送镜像到 Registry
docker push <用户名>/<镜像名>:<标签>
# 示例:推送镜像到 Docker Hub
docker push myusername/my-app:1.0.0
|
🌐 六、网络管理
1️⃣ 网络基本操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 查看网络列表
docker network ls
# 查看网络详细信息
docker network inspect <网络名>
# 创建网络
docker network create <网络名>
# 创建带自定义子网的网络
docker network create --subnet=192.168.100.0/24 my-network
# 删除网络
docker network rm <网络名>
# 删除所有未使用的网络
docker network prune
# 查看网络驱动信息
docker network ls --filter driver=bridge
|
2️⃣ 容器网络连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 将容器连接到网络
docker network connect <网络名> <容器名>
# 断开容器与网络的连接
docker network disconnect <网络名> <容器名>
# 创建容器时指定网络
docker run -d --name my-app --network my-network nginx:latest
# 查看容器网络信息
docker inspect -f '{{json .NetworkSettings.Networks}}' <容器名>
# 为容器指定静态IP
docker network create --subnet=172.20.0.0/16 my-net
docker run --network my-net --ip 172.20.0.10 -d nginx:latest
|
3️⃣ 网络类型与配置
1
2
3
4
5
6
7
8
9
10
11
12
|
# 查看所有网络类型
docker network ls
# 创建不同驱动类型的网络
docker network create -d bridge my-bridge-network
docker network create -d overlay my-overlay-network
# 查看网络详情(包括连接的容器)
docker network inspect <网络名> --format='{{json .Containers}}'
# 检查网络连通性
docker exec <容器名> ping <目标容器名>
|
💾 七、数据卷管理
1️⃣ 数据卷基本操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 查看数据卷列表
docker volume ls
# 创建数据卷
docker volume create <卷名>
# 查看数据卷详细信息
docker volume inspect <卷名>
# 删除数据卷
docker volume rm <卷名>
# 删除所有未使用的数据卷
docker volume prune
# 查看数据卷使用情况
docker system df -v
|
2️⃣ 数据卷挂载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 运行容器并挂载数据卷
docker run -v <卷名>:<容器内路径> <镜像名>
# 示例:挂载数据卷到 Nginx
docker run -d -v nginx-data:/usr/share/nginx/html nginx:latest
# 挂载主机目录到容器
docker run -v <主机路径>:<容器内路径> <镜像名>
# 示例:挂载主机目录
docker run -v /host/data:/container/data nginx:latest
# 只读挂载
docker run -v <卷名>:<容器内路径>:ro <镜像名>
# 创建容器时指定多个卷
docker run -v vol1:/data1 -v vol2:/data2 nginx:latest
|
3️⃣ 数据卷高级用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 使用 --mount 语法(更详细的选项)
docker run --mount source=<卷名>,target=<容器内路径> <镜像名>
# 示例:使用 --mount 语法
docker run --mount source=my-volume,target=/app/data nginx:latest
# 创建带有标签的卷
docker volume create --label env=prod app-data
# 根据标签过滤卷
docker volume ls --filter label=env=prod
# 备份数据卷
docker run --rm -v <卷名>:/volume -v $(pwd):/backup alpine \
tar -czf /backup/backup.tar.gz -C /volume ./
# 恢复数据卷
docker run --rm -v <卷名>:/volume -v $(pwd):/backup alpine \
tar -xzf /backup/backup.tar.gz -C /volume
|
🛠️ 八、Docker Compose 命令
1️⃣ Compose 基本操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 启动所有服务(前台运行)
docker-compose up
# 启动所有服务(后台运行)
docker-compose up -d
# 使用特定的 compose 文件
docker-compose -f docker-compose.prod.yml up -d
# 停止并删除所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
# 查看特定服务的日志
docker-compose logs <服务名>
# 实时查看日志
docker-compose logs -f
|
2️⃣ Compose 服务管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 启动特定服务
docker-compose start <服务名>
# 停止特定服务
docker-compose stop <服务名>
# 重启特定服务
docker-compose restart <服务名>
# 暂停特定服务
docker-compose pause <服务名>
# 恢复特定服务
docker-compose unpause <服务名>
# 重建并启动服务
docker-compose up --build <服务名>
# 强制重建服务
docker-compose build --no-cache <服务名>
|
3️⃣ Compose 高级操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 在服务中执行命令
docker-compose exec <服务名> <命令>
# 示例:在 web 服务中执行 bash
docker-compose exec web bash
# 查看服务配置
docker-compose config
# 验证 compose 文件语法
docker-compose config --no-interpolate
# 拉取服务镜像
docker-compose pull
# 推送服务镜像
docker-compose push
# 扩展服务实例数量
docker-compose up --scale <服务名>=3 -d
|
🧹 九、清理与维护
1️⃣ 系统清理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 删除所有未使用的资源
docker system prune
# 删除所有未使用的资源(包括未使用的镜像)
docker system prune -a
# 删除悬空镜像
docker image prune
# 删除所有停止的容器
docker container prune
# 删除所有未使用的网络
docker network prune
# 删除所有未使用的数据卷
docker volume prune
# 删除构建缓存
docker builder prune
|
2️⃣ 系统信息与监控
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 查看 Docker 磁盘使用详情
docker system df -v
# 查看容器资源使用统计
docker stats
# 查看事件流
docker events
# 查看版本信息
docker version
# 查看系统信息
docker info
# 检查 Docker 安装
docker info | grep -E "(Server Version|Containers|Images|Storage Driver)"
|
🔐 十、安全相关
1️⃣ 容器安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 以非 root 用户运行容器
docker run -u 1000:1000 <镜像名>
# 设置容器用户
docker run --user <用户名> <镜像名>
# 限制容器权限
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE <镜像名>
# 设置容器安全选项
docker run --security-opt no-new-privileges <镜像名>
# 只读根文件系统
docker run --read-only <镜像名>
# 临时文件系统挂载
docker run --tmpfs /tmp:rw,size=64m <镜像名>
|
2️⃣ 镜像安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 扫描镜像漏洞
docker scan <镜像名>
# 查看镜像历史
docker history <镜像名>
# 检查镜像签名
docker trust inspect <镜像名>
# 使用内容信任
export DOCKER_CONTENT_TRUST=1
# 查看镜像详细信息
docker inspect <镜像名>
|
3️⃣ 网络与资源安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 限制容器资源
docker run --memory=512m --cpus=1.5 <镜像名>
# 设置容器重启策略
docker run --restart unless-stopped <镜像名>
# 设置容器资源限制
docker run --memory-swap=1g <镜像名>
# 设置容器 OOM 优先级
docker run --oom-score-adj=500 <镜像名>
# 生成随机密钥
openssl rand -base64 32
|
💡 十一、实用技巧与示例
1️⃣ 批量操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有镜像
docker rmi $(docker images -q)
# 清理所有 Docker 资源
docker system prune -af
# 批量打标签
for image in $(docker images -q); do docker tag $image myregistry/$image; done
# 批量推送镜像
docker images | grep myregistry | awk '{print $1":"$2}' | xargs -I {} docker push {}
|
2️⃣ 实用示例
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 run -it --rm alpine:latest sh
# 端口映射示例
docker run -p 8080:80 -p 8443:443 nginx:latest
# 环境变量设置
docker run -e "ENV=production" -e "DEBUG=false" my-app:latest
# 数据卷挂载示例
docker run -v /host/data:/container/data -v config:/app/config nginx:latest
# 资源限制示例
docker run --memory=1g --cpus=2 --cpu-shares=512 my-app:latest
# 网络配置示例
docker run --network=host --dns=8.8.8.8 nginx:latest
# 健康检查示例
docker run --health-cmd="curl -f http://localhost/ || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
nginx:latest
|
3️⃣ 监控与调试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 实时监控容器资源使用
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
# 查看容器日志并过滤
docker logs <容器名> 2>&1 | grep -i error
# 检查容器健康状态
docker inspect --format='{{json .State.Health}}' <容器名>
# 性能分析
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
docker.io/docker/docker-bench-security
# 网络诊断
docker run --rm -it --network container:<容器名> nicolaka/netshoot
|
🚨 十二、注意事项
1️⃣ 安全注意事项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 1. 不要在生产环境中使用特权容器
# 错误示例:
docker run --privileged my-app:latest
# 2. 避免使用 root 用户运行容器
# 正确做法:
docker run -u 1000:1000 my-app:latest
# 3. 定期更新基础镜像以获取安全补丁
docker pull ubuntu:20.04
# 4. 使用内容信任验证镜像
export DOCKER_CONTENT_TRUST=1
# 5. 限制容器资源使用
docker run --memory=512m --cpus=1.0 my-app:latest
|
2️⃣ 数据持久化注意事项
1
2
3
4
5
6
7
8
9
|
# 1. 重要数据要使用数据卷持久化
docker run -v important-data:/app/data my-app:latest
# 2. 定期备份数据卷
docker run --rm -v important-data:/volume -v $(pwd):/backup alpine \
tar -czf /backup/backup-$(date +%Y%m%d).tar.gz -C /volume ./
# 3. 避免在容器内存储重要数据
# 容器停止后,写入容器层的数据会丢失
|
3️⃣ 性能优化注意事项
1
2
3
4
5
6
7
8
9
10
11
12
|
# 1. 使用 .dockerignore 文件减少构建上下文
echo "node_modules" >> .dockerignore
echo ".git" >> .dockerignore
# 2. 使用多阶段构建减少镜像大小
# 在 Dockerfile 中使用多阶段构建
# 3. 合理使用缓存加速构建
# 将不经常变化的指令放在 Dockerfile 前面
# 4. 选择合适的基础镜像
# 使用 alpine 等轻量级基础镜像
|
📚 十三、学习资源
1️⃣ 官方资源
2️⃣ 教程与指南
3️⃣ 社区与论坛
4️⃣ 工具与扩展
5️⃣ 认证与培训
💡 提示: Docker 命令和功能会随着版本更新而变化,建议定期查阅官方文档获取最新信息。同时,在生产环境中使用 Docker 时,务必遵循安全最佳实践,定期更新镜像和容器,并做好数据备份工作。
希望这份完整的 Docker 命令大全能帮助您更高效地使用和管理 Docker 容器!如有任何问题,请参考 Docker 官方文档或社区资源。🐳