Docker 常用命令详细教程
目录
- [1. Docker 基础命令](#1. Docker 基础命令)
- [2. 镜像管理命令](#2. 镜像管理命令)
- [3. 容器管理命令](#3. 容器管理命令)
- [4. 网络管理命令](#4. 网络管理命令)
- [5. 数据卷管理命令](#5. 数据卷管理命令)
- [6. Docker Compose 命令](#6. Docker Compose 命令)
- [7. 系统管理命令](#7. 系统管理命令)
- [8. 实用技巧与最佳实践](#8. 实用技巧与最佳实践)
1. Docker 基础命令
1.1 查看 Docker 版本
bash
docker --version
docker version
说明:
--version
: 显示简短版本信息version
: 显示详细的客户端和服务端版本信息
1.2 查看 Docker 系统信息
bash
docker info
说明: 显示 Docker 系统的详细信息,包括容器数量、镜像数量、存储驱动、网络配置等。
1.3 查看帮助信息
bash
docker --help
docker <command> --help
示例:
bash
docker run --help # 查看 run 命令的帮助
2. 镜像管理命令
2.1 搜索镜像
bash
docker search <镜像名>
docker search --filter stars=100 <镜像名>
docker search --limit 10 <镜像名>
示例:
bash
docker search nginx
docker search --filter stars=500 python
2.2 拉取镜像
bash
docker pull <镜像名>[:标签]
示例:
bash
docker pull nginx
docker pull nginx:1.21.6
docker pull mysql:8.0
docker pull redis:alpine
2.3 查看本地镜像
bash
docker images
docker image ls
docker images -a # 显示所有镜像(包括中间层)
docker images -q # 只显示镜像ID
docker images --no-trunc # 显示完整的镜像ID
示例:
bash
docker images
docker images nginx
docker images --filter "dangling=true" # 查看悬空镜像
2.4 删除镜像
bash
docker rmi <镜像ID/镜像名>
docker rmi -f <镜像ID> # 强制删除
docker image prune # 删除所有悬空镜像
docker image prune -a # 删除所有未使用的镜像
示例:
bash
docker rmi nginx:latest
docker rmi $(docker images -q) # 删除所有镜像
2.5 构建镜像
bash
docker build -t <镜像名>[:标签] <Dockerfile路径>
docker build -t <镜像名> .
docker build --no-cache -t <镜像名> .
docker build --build-arg VERSION=1.0 -t <镜像名> .
参数说明:
-t, --tag
: 指定镜像名称和标签-f, --file
: 指定 Dockerfile 文件--no-cache
: 不使用缓存--build-arg
: 设置构建参数
示例:
bash
docker build -t myapp:1.0 .
docker build -t myapp:latest -f Dockerfile.prod .
2.6 保存和加载镜像
bash
# 导出镜像到文件
docker save -o <文件名.tar> <镜像名>
docker save <镜像名> > <文件名.tar>
# 从文件加载镜像
docker load -i <文件名.tar>
docker load < <文件名.tar>
示例:
bash
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar
2.7 标记镜像
bash
docker tag <源镜像>[:标签] <目标镜像>[:标签]
示例:
bash
docker tag nginx:latest myregistry.com/nginx:v1
docker tag myapp:latest myapp:1.0.0
2.8 查看镜像历史
bash
docker history <镜像名>
docker history --no-trunc <镜像名>
2.9 查看镜像详细信息
bash
docker inspect <镜像名/镜像ID>
docker image inspect <镜像名>
示例:
bash
docker inspect nginx:latest
docker inspect --format='{{.Config.ExposedPorts}}' nginx
3. 容器管理命令
3.1 创建并运行容器
bash
docker run [选项] <镜像名> [命令]
常用参数:
-d, --detach
: 后台运行-it
: 交互式终端--name
: 指定容器名称-p
: 端口映射(主机端口:容器端口)-P
: 随机映射端口-v
: 挂载数据卷(主机路径:容器路径)-e
: 设置环境变量--rm
: 容器停止后自动删除--restart
: 重启策略(no/on-failure/always/unless-stopped)--network
: 指定网络-m, --memory
: 限制内存--cpus
: 限制CPU
示例:
bash
# 基本运行
docker run nginx
# 后台运行并命名
docker run -d --name my-nginx nginx
# 端口映射
docker run -d -p 8080:80 --name web nginx
# 多端口映射
docker run -d -p 8080:80 -p 8443:443 nginx
# 挂载数据卷
docker run -d -v /host/path:/container/path nginx
docker run -d -v my-volume:/data nginx
# 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 交互式运行
docker run -it ubuntu /bin/bash
# 容器停止后自动删除
docker run --rm -it ubuntu /bin/bash
# 设置重启策略
docker run -d --restart=always nginx
# 资源限制
docker run -d --memory="512m" --cpus="1.5" nginx
# 综合示例
docker run -d \
--name my-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root123 \
-v mysql-data:/var/lib/mysql \
--restart=always \
mysql:8.0
3.2 查看容器
bash
# 查看运行中的容器
docker ps
docker container ls
# 查看所有容器(包括停止的)
docker ps -a
docker container ls -a
# 只显示容器ID
docker ps -q
# 查看最近创建的容器
docker ps -l
# 显示容器大小
docker ps -s
参数说明:
-a, --all
: 显示所有容器-q, --quiet
: 只显示容器ID-l, --latest
: 显示最近创建的容器-s, --size
: 显示容器大小
示例:
bash
docker ps
docker ps -a
docker ps --filter "status=exited"
docker ps --filter "name=nginx"
3.3 启动和停止容器
bash
# 启动容器
docker start <容器ID/容器名>
# 停止容器
docker stop <容器ID/容器名>
# 重启容器
docker restart <容器ID/容器名>
# 强制停止容器
docker kill <容器ID/容器名>
# 暂停容器
docker pause <容器ID/容器名>
# 恢复容器
docker unpause <容器ID/容器名>
示例:
bash
docker start my-nginx
docker stop my-nginx
docker restart my-nginx
# 批量操作
docker start $(docker ps -a -q) # 启动所有容器
docker stop $(docker ps -q) # 停止所有运行中的容器
3.4 删除容器
bash
docker rm <容器ID/容器名>
docker rm -f <容器ID> # 强制删除运行中的容器
docker rm -v <容器ID> # 删除容器并删除关联的匿名卷
docker container prune # 删除所有停止的容器
示例:
bash
docker rm my-nginx
docker rm -f my-nginx
docker rm $(docker ps -a -q) # 删除所有容器
docker rm $(docker ps -a -q -f status=exited) # 删除所有已停止的容器
3.5 进入容器
bash
# 执行命令(推荐)
docker exec -it <容器ID/容器名> /bin/bash
docker exec -it <容器ID/容器名> sh
# 附加到容器(不推荐)
docker attach <容器ID/容器名>
区别说明:
exec
: 在容器中启动新进程,退出不会停止容器attach
: 附加到容器主进程,退出会停止容器
示例:
bash
docker exec -it my-nginx /bin/bash
docker exec -it my-mysql mysql -uroot -p
docker exec my-nginx ls /etc/nginx
3.6 查看容器日志
bash
docker logs <容器ID/容器名>
docker logs -f <容器ID> # 实时查看日志
docker logs --tail 100 <容器ID> # 查看最后100行
docker logs --since "2024-01-01" <容器ID> # 查看指定时间后的日志
docker logs -t <容器ID> # 显示时间戳
参数说明:
-f, --follow
: 实时跟踪日志--tail
: 显示最后N行--since
: 显示指定时间后的日志--until
: 显示指定时间前的日志-t, --timestamps
: 显示时间戳
示例:
bash
docker logs my-nginx
docker logs -f --tail 50 my-nginx
docker logs --since "2024-10-20T00:00:00" my-nginx
3.7 查看容器详细信息
bash
docker inspect <容器ID/容器名>
docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名>
示例:
bash
docker inspect my-nginx
docker inspect --format='{{.State.Status}}' my-nginx
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx
3.8 查看容器进程
bash
docker top <容器ID/容器名>
3.9 查看容器资源使用
bash
docker stats # 查看所有容器的资源使用
docker stats <容器ID> # 查看指定容器
docker stats --no-stream # 只显示一次
3.10 复制文件
bash
# 从容器复制到主机
docker cp <容器ID>:<容器路径> <主机路径>
# 从主机复制到容器
docker cp <主机路径> <容器ID>:<容器路径>
示例:
bash
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
docker cp ./app.conf my-nginx:/etc/nginx/conf.d/
3.11 导出和导入容器
bash
# 导出容器为tar文件
docker export <容器ID> > <文件名.tar>
docker export -o <文件名.tar> <容器ID>
# 导入容器快照为镜像
docker import <文件名.tar> <镜像名>[:标签]
3.12 容器提交为镜像
bash
docker commit [选项] <容器ID> <镜像名>[:标签]
参数说明:
-a, --author
: 作者信息-m, --message
: 提交信息
示例:
bash
docker commit my-nginx my-nginx-custom:v1
docker commit -a "author" -m "add custom config" my-nginx my-nginx:v2
3.13 容器重命名
bash
docker rename <旧容器名> <新容器名>
3.14 更新容器配置
bash
docker update [选项] <容器ID>
示例:
bash
docker update --restart=always my-nginx
docker update --memory="1g" --cpus="2" my-nginx
4. 网络管理命令
4.1 查看网络
bash
docker network ls
docker network ls --filter driver=bridge
4.2 创建网络
bash
docker network create <网络名>
docker network create --driver <驱动类型> <网络名>
docker network create --subnet <子网> <网络名>
驱动类型:
bridge
: 桥接网络(默认)host
: 主机网络overlay
: 覆盖网络(Swarm)macvlan
: MAC地址网络none
: 无网络
示例:
bash
docker network create my-network
docker network create --driver bridge my-bridge
docker network create --subnet=172.18.0.0/16 my-net
docker network create --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1 custom-net
4.3 查看网络详情
bash
docker network inspect <网络名>
4.4 连接和断开网络
bash
# 连接容器到网络
docker network connect <网络名> <容器名>
# 断开容器网络连接
docker network disconnect <网络名> <容器名>
4.5 删除网络
bash
docker network rm <网络名>
docker network prune # 删除所有未使用的网络
4.6 创建容器时指定网络
bash
docker run -d --network <网络名> --name <容器名> <镜像名>
示例:
bash
docker run -d --network my-network --name web nginx
docker run -d --network host --name app myapp
5. 数据卷管理命令
5.1 查看数据卷
bash
docker volume ls
docker volume ls -q
docker volume ls --filter dangling=true
5.2 创建数据卷
bash
docker volume create <卷名>
docker volume create --driver <驱动> <卷名>
示例:
bash
docker volume create my-volume
docker volume create --driver local my-data
5.3 查看数据卷详情
bash
docker volume inspect <卷名>
5.4 删除数据卷
bash
docker volume rm <卷名>
docker volume prune # 删除所有未使用的数据卷
5.5 使用数据卷
bash
# 命名卷
docker run -d -v <卷名>:<容器路径> <镜像名>
# 绑定挂载
docker run -d -v <主机路径>:<容器路径> <镜像名>
# 只读挂载
docker run -d -v <卷名>:<容器路径>:ro <镜像名>
示例:
bash
docker run -d -v mysql-data:/var/lib/mysql mysql
docker run -d -v /host/data:/app/data nginx
docker run -d -v config:/etc/nginx:ro nginx
6. Docker Compose 命令
6.1 启动服务
bash
docker-compose up
docker-compose up -d # 后台运行
docker-compose up --build # 构建并启动
docker-compose up --force-recreate # 强制重新创建容器
docker-compose up --scale <服务名>=<数量> # 扩展服务
6.2 停止服务
bash
docker-compose down # 停止并删除容器
docker-compose down -v # 同时删除数据卷
docker-compose down --rmi all # 同时删除镜像
docker-compose stop # 仅停止容器
6.3 查看服务
bash
docker-compose ps
docker-compose ps -a
6.4 查看日志
bash
docker-compose logs
docker-compose logs -f # 实时查看
docker-compose logs -f <服务名> # 查看指定服务
docker-compose logs --tail=100
6.5 执行命令
bash
docker-compose exec <服务名> <命令>
docker-compose exec -it <服务名> /bin/bash
6.6 构建服务
bash
docker-compose build
docker-compose build --no-cache
docker-compose build <服务名>
6.7 其他命令
bash
docker-compose restart # 重启服务
docker-compose pause # 暂停服务
docker-compose unpause # 恢复服务
docker-compose top # 查看进程
docker-compose config # 验证配置文件
docker-compose pull # 拉取镜像
docker-compose push # 推送镜像
7. 系统管理命令
7.1 清理系统
bash
# 清理未使用的数据
docker system prune
# 清理所有未使用的数据(包括未使用的镜像)
docker system prune -a
# 清理所有数据(包括数据卷)
docker system prune -a --volumes
# 强制清理(不提示确认)
docker system prune -f
7.2 查看磁盘使用
bash
docker system df
docker system df -v # 详细信息
7.3 查看系统事件
bash
docker events
docker events --since '2024-10-20'
docker events --filter 'type=container'
7.4 登录和登出镜像仓库
bash
# 登录 Docker Hub
docker login
# 登录私有仓库
docker login <仓库地址>
# 登出
docker logout
7.5 推送和拉取镜像
bash
# 推送镜像
docker push <镜像名>[:标签]
# 拉取镜像
docker pull <镜像名>[:标签]
8. 实用技巧与最佳实践
8.1 批量操作
停止所有容器
bash
docker stop $(docker ps -q)
删除所有容器
bash
docker rm $(docker ps -a -q)
删除所有镜像
bash
docker rmi $(docker images -q)
删除所有未使用的资源
bash
docker system prune -a --volumes
删除悬空镜像
bash
docker rmi $(docker images -f "dangling=true" -q)
删除已停止的容器
bash
docker rm $(docker ps -a -q -f status=exited)
8.2 常用组合命令
构建并运行
bash
docker build -t myapp . && docker run -d -p 8080:80 myapp
停止并删除容器
bash
docker stop my-nginx && docker rm my-nginx
查看容器IP地址
bash
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名>
查看容器环境变量
bash
docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' <容器名>
8.3 常用 Dockerfile 指令
dockerfile
# 基础镜像
FROM nginx:alpine
# 维护者信息
LABEL maintainer="your@email.com"
# 设置工作目录
WORKDIR /app
# 复制文件
COPY . /app
ADD archive.tar.gz /app
# 运行命令
RUN apk add --no-cache python3
# 设置环境变量
ENV NODE_ENV=production
# 暴露端口
EXPOSE 80 443
# 挂载点
VOLUME ["/data"]
# 设置用户
USER nginx
# 容器启动命令
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["nginx"]
8.4 常用 docker-compose.yml 模板
yaml
version: '3.8'
services:
web:
image: nginx:alpine
container_name: web
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- app-network
restart: always
environment:
- TZ=Asia/Shanghai
depends_on:
- db
db:
image: mysql:8.0
container_name: mysql
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: password
networks:
- app-network
restart: always
redis:
image: redis:alpine
container_name: redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- app-network
restart: always
networks:
app-network:
driver: bridge
volumes:
mysql-data:
redis-data:
8.5 性能优化技巧
1. 减小镜像体积 - 使用多阶段构建
dockerfile
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
2. 使用 .dockerignore
node_modules
npm-debug.log
.git
.gitignore
README.md
.env
*.md
3. 合并 RUN 命令
dockerfile
# 推荐
RUN apt-get update && \
apt-get install -y nginx && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
8.6 安全最佳实践
1. 使用非 root 用户
dockerfile
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
2. 限制容器资源
bash
docker run -d \
--memory="512m" \
--memory-swap="1g" \
--cpus="1.0" \
--pids-limit=100 \
nginx
3. 只读文件系统
bash
docker run -d --read-only --tmpfs /tmp nginx
8.7 常用调试命令
bash
# 查看容器详细信息
docker inspect <容器名>
# 查看容器日志
docker logs -f --tail 100 <容器名>
# 进入容器调试
docker exec -it <容器名> /bin/sh
# 查看容器进程
docker top <容器名>
# 查看资源使用
docker stats <容器名>
# 查看端口映射
docker port <容器名>
# 查看容器文件系统变化
docker diff <容器名>
8.8 数据备份与恢复
备份容器数据
bash
# 备份数据卷
docker run --rm -v <卷名>:/data -v $(pwd):/backup ubuntu tar czf /backup/backup.tar.gz /data
# 备份容器
docker export <容器名> > container-backup.tar
恢复数据
bash
# 恢复数据卷
docker run --rm -v <卷名>:/data -v $(pwd):/backup ubuntu tar xzf /backup/backup.tar.gz -C /
# 恢复容器
docker import container-backup.tar <镜像名>
附录:快速参考
镜像命令快查
命令 | 说明 |
---|---|
docker pull |
拉取镜像 |
docker build |
构建镜像 |
docker images |
查看镜像 |
docker rmi |
删除镜像 |
docker tag |
标记镜像 |
docker save |
保存镜像 |
docker load |
加载镜像 |
容器命令快查
命令 | 说明 |
---|---|
docker run |
创建并运行容器 |
docker ps |
查看容器 |
docker start |
启动容器 |
docker stop |
停止容器 |
docker restart |
重启容器 |
docker rm |
删除容器 |
docker exec |
进入容器 |
docker logs |
查看日志 |
常用参数快查
参数 | 说明 |
---|---|
-d |
后台运行 |
-it |
交互式终端 |
-p |
端口映射 |
-v |
数据卷挂载 |
-e |
环境变量 |
--name |
容器名称 |
--restart |
重启策略 |
--network |
网络设置 |