Docker 常用命令指南
一、安装与基本概念
Docker 的核心概念:
- 镜像(Image):只读模板,用于创建容器
- 容器(Container):镜像的运行实例
- 仓库(Registry):存储镜像的服务,如 Docker Hub
验证安装:
docker --version
docker info
二、镜像管理
搜索与拉取镜像
# 搜索镜像
docker search nginx
# 拉取镜像(不指定 tag 默认 latest)
docker pull nginx
docker pull nginx:1.25
# 拉取指定平台的镜像
docker pull --platform linux/amd64 nginx
查看与删除镜像
# 列出本地所有镜像
docker images
docker image ls
# 查看镜像详细信息
docker inspect nginx
# 删除镜像
docker rmi nginx
docker rmi nginx:1.25
# 删除所有未使用的镜像(危险!请确认后执行)
docker image prune -a
构建镜像
# 根据当前目录的 Dockerfile 构建镜像
docker build -t myapp:1.0 .
# 指定 Dockerfile 路径
docker build -f ./docker/Dockerfile -t myapp:1.0 .
# 构建时不使用缓存
docker build --no-cache -t myapp:1.0 .
Dockerfile 基本示例:
FROM ubuntu:22.04
WORKDIR /app
COPY . .
RUN apt-get update && apt-get install -y python3
CMD ["python3", "main.py"]
三、容器管理
运行容器
# 运行容器(前台)
docker run nginx
# 后台运行(detach)
docker run -d nginx
# 指定容器名称
docker run -d --name my-nginx nginx
# 端口映射(宿主机端口:容器端口)
docker run -d -p 8080:80 nginx
# 挂载目录(宿主机路径:容器路径)
docker run -d -v /home/user/html:/usr/share/nginx/html nginx
# 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 限制资源
docker run -d --memory="512m" --cpus="1.0" nginx
# 运行后自动删除容器
docker run --rm ubuntu echo "hello"
# 交互式运行(进入 bash)
docker run -it ubuntu bash
查看容器状态
# 列出运行中的容器
docker ps
# 列出所有容器(包括已停止)
docker ps -a
# 查看容器详细信息
docker inspect my-nginx
# 查看容器资源占用(实时)
docker stats
# 查看容器日志
docker logs my-nginx
# 实时跟踪日志(类似 tail -f)
docker logs -f my-nginx
# 查看最近 100 行日志
docker logs --tail 100 my-nginx
控制容器生命周期
# 停止容器(发送 SIGTERM,等待优雅退出)
docker stop my-nginx
# 强制停止(发送 SIGKILL)
docker kill my-nginx
# 启动已停止的容器
docker start my-nginx
# 重启容器
docker restart my-nginx
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
进入运行中的容器
# 进入容器执行交互式 shell(推荐)
docker exec -it my-nginx bash
# 容器内没有 bash 时用 sh
docker exec -it my-nginx sh
# 在容器内执行单条命令
docker exec my-nginx ls /etc/nginx
# 以 root 用户进入
docker exec -it -u root my-nginx bash
四、数据卷管理
# 创建数据卷
docker volume create mydata
# 列出所有数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect mydata
# 使用数据卷运行容器
docker run -d -v mydata:/var/lib/mysql mysql
# 删除数据卷
docker volume rm mydata
# 删除所有未使用的数据卷(危险!)
docker volume prune
五、网络管理
# 列出所有网络
docker network ls
# 创建自定义桥接网络
docker network create mynetwork
# 将容器连接到网络
docker network connect mynetwork my-nginx
# 运行时指定网络(同一网络内容器可互相通信)
docker run -d --network mynetwork --name app1 myapp
docker run -d --network mynetwork --name app2 myapp
# 断开容器与网络的连接
docker network disconnect mynetwork my-nginx
# 删除网络
docker network rm mynetwork
六、Docker Compose
适合管理多容器应用,docker-compose.yml 示例:
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: mydb
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
常用 Compose 命令:
# 启动所有服务(后台)
docker compose up -d
# 停止并删除容器
docker compose down
# 停止并删除容器+数据卷
docker compose down -v
# 查看服务状态
docker compose ps
# 查看服务日志
docker compose logs -f
# 重新构建镜像
docker compose build
# 扩容(将 web 服务扩展到 3 个实例)
docker compose up -d --scale web=3
七、镜像导入导出
# 将镜像导出为 tar 文件(用于离线传输)
docker save -o nginx.tar nginx:latest
# 从 tar 文件导入镜像
docker load -i nginx.tar
# 将容器文件系统导出(不含镜像层信息)
docker export my-nginx > nginx-container.tar
# 从导出的文件创建镜像
cat nginx-container.tar | docker import - my-nginx:v1
八、清理空间
# 一键清理:停止的容器、未使用的网络、悬空镜像、构建缓存
docker system prune
# 同时清理未使用的镜像和数据卷(更彻底)
docker system prune -a --volumes
# 查看 Docker 占用的磁盘空间
docker system df
九、常用技巧
复制文件
# 从容器复制文件到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 从宿主机复制文件到容器
docker cp ./nginx.conf my-nginx:/etc/nginx/nginx.conf
查看容器 IP
docker inspect -f '' my-nginx
查看镜像构建历史
docker history nginx
给镜像打标签并推送
# 打标签
docker tag myapp:1.0 username/myapp:1.0
# 登录 Docker Hub
docker login
# 推送镜像
docker push username/myapp:1.0