Docker 是现在开发、测试、部署中非常常见的容器工具。它可以把应用和依赖环境打包到镜像里,再通过容器运行起来。对开发者来说,掌握一些常用 Docker 命令,就可以完成镜像拉取、容器启动、日志查看、文件挂载、端口映射、服务排查等大部分日常工作。
这篇文章会按实际使用场景整理 Docker 常见命令。
一、查看 Docker 环境
安装 Docker 后,首先可以检查版本:
bash
docker --version
查看更详细的客户端和服务端信息:
bash
docker version
查看 Docker 当前系统状态:
bash
docker info
如果这些命令可以正常输出,说明 Docker 已经安装并可用。
二、镜像相关命令
镜像可以理解为容器的模板。容器是由镜像创建出来的运行实例。
1. 搜索镜像
bash
docker search nginx
这个命令会在 Docker Hub 中搜索 nginx 相关镜像。
2. 拉取镜像
bash
docker pull nginx
默认会拉取 latest 标签版本。
也可以指定版本:
bash
docker pull nginx:1.25
3. 查看本地镜像
bash
docker images
或者:
bash
docker image ls
输出中常见字段包括:
text
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像 ID
CREATED:创建时间
SIZE:镜像大小
4. 删除镜像
bash
docker rmi nginx
如果镜像正在被容器使用,需要先删除对应容器。
按镜像 ID 删除:
bash
docker rmi <image_id>
强制删除:
bash
docker rmi -f <image_id>
5. 清理无用镜像
bash
docker image prune
清理所有未被使用的镜像:
bash
docker image prune -a
这个命令会删除未被容器引用的镜像,执行前要确认没有误删风险。
三、容器相关命令
容器是镜像运行后的实例。
1. 创建并运行容器
bash
docker run nginx
这个命令会基于 nginx 镜像启动一个容器。如果本地没有镜像,Docker 会自动拉取。
2. 后台运行容器
bash
docker run -d nginx
-d 表示 detached mode,也就是后台运行。
3. 指定容器名称
bash
docker run -d --name my-nginx nginx
指定名称后,后续操作容器会更方便。
4. 查看正在运行的容器
bash
docker ps
查看所有容器,包括已停止的:
bash
docker ps -a
5. 停止容器
bash
docker stop my-nginx
也可以使用容器 ID:
bash
docker stop <container_id>
6. 启动已停止的容器
bash
docker start my-nginx
7. 重启容器
bash
docker restart my-nginx
8. 删除容器
删除前通常需要先停止:
bash
docker stop my-nginx
docker rm my-nginx
强制删除运行中的容器:
bash
docker rm -f my-nginx
9. 查看容器详细信息
bash
docker inspect my-nginx
这个命令会输出容器的完整配置信息,包括网络、挂载、环境变量、IP 地址等。
四、端口映射
容器内部服务默认只能在容器内部访问。要让宿主机访问容器服务,需要做端口映射。
例如运行 Nginx:
bash
docker run -d --name my-nginx -p 8080:80 nginx
含义是:
text
宿主机 8080 端口 -> 容器 80 端口
访问:
text
http://localhost:8080
如果想绑定到指定 IP:
bash
docker run -d --name my-nginx -p 127.0.0.1:8080:80 nginx
这样只有本机可以访问,外部机器无法直接访问。
五、目录挂载
容器删除后,容器内部写入的数据通常也会丢失。为了保存数据,可以把宿主机目录挂载到容器中。
bash
docker run -d \
--name my-nginx \
-p 8080:80 \
-v /host/html:/usr/share/nginx/html \
nginx
含义是:
text
宿主机 /host/html -> 容器 /usr/share/nginx/html
也可以使用 Docker volume:
bash
docker volume create nginx-data
运行容器时挂载 volume:
bash
docker run -d \
--name my-nginx \
-v nginx-data:/usr/share/nginx/html \
nginx
查看 volume:
bash
docker volume ls
删除 volume:
bash
docker volume rm nginx-data
清理未使用的 volume:
bash
docker volume prune
六、查看日志
查看容器日志:
bash
docker logs my-nginx
持续跟踪日志:
bash
docker logs -f my-nginx
查看最近 100 行:
bash
docker logs --tail 100 my-nginx
带时间戳:
bash
docker logs -f --timestamps my-nginx
排查服务异常时,docker logs 是最常用的命令之一。
七、进入容器
如果需要进入容器内部排查问题,可以使用:
bash
docker exec -it my-nginx bash
如果容器中没有 bash,可以使用 sh:
bash
docker exec -it my-nginx sh
参数说明:
text
-i:保持标准输入打开
-t:分配一个伪终端
进入后可以像在普通 Linux 环境中一样执行命令。
如果只是想在容器里执行单个命令:
bash
docker exec my-nginx ls /usr/share/nginx/html
八、复制文件
从宿主机复制文件到容器:
bash
docker cp ./index.html my-nginx:/usr/share/nginx/html/index.html
从容器复制文件到宿主机:
bash
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
docker cp 很适合临时调试,但生产环境更推荐通过挂载目录或构建镜像来管理文件。
九、环境变量
很多镜像可以通过环境变量配置应用。
例如运行 MySQL:
bash
docker run -d \
--name mysql-demo \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=demo \
mysql:8
-e 用来传递环境变量。
查看容器环境变量:
bash
docker exec mysql-demo env
十、容器网络
查看 Docker 网络:
bash
docker network ls
创建自定义网络:
bash
docker network create app-net
让容器加入网络:
bash
docker run -d --name app --network app-net nginx
查看网络详情:
bash
docker network inspect app-net
删除网络:
bash
docker network rm app-net
在同一个自定义网络中的容器,可以通过容器名称互相访问。例如应用容器可以通过 mysql-demo:3306 访问数据库容器。
十一、构建镜像
如果项目中有 Dockerfile,可以使用 docker build 构建镜像。
bash
docker build -t my-app:1.0 .
含义是:
text
-t my-app:1.0:镜像名称和标签
.:构建上下文是当前目录
查看构建出的镜像:
bash
docker images
运行自定义镜像:
bash
docker run -d --name my-app -p 3000:3000 my-app:1.0
常见 Dockerfile 示例:
dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
十二、Docker Compose 常用命令
Docker Compose 适合管理多个容器,例如 Web 服务、数据库、Redis、消息队列等。
常见 docker-compose.yml:
yaml
services:
web:
image: nginx
ports:
- "8080:80"
启动服务:
bash
docker compose up
后台启动:
bash
docker compose up -d
停止并删除服务容器:
bash
docker compose down
查看服务状态:
bash
docker compose ps
查看日志:
bash
docker compose logs
持续查看日志:
bash
docker compose logs -f
重启服务:
bash
docker compose restart
只重启某个服务:
bash
docker compose restart web
重新构建并启动:
bash
docker compose up -d --build
进入某个服务容器:
bash
docker compose exec web sh
十三、资源占用查看
查看容器实时资源占用:
bash
docker stats
查看指定容器:
bash
docker stats my-nginx
输出通常包括:
text
CPU 使用率
内存使用量
网络 IO
磁盘 IO
进程数量
如果发现某个容器 CPU 或内存异常,可以结合 docker logs 和 docker exec 继续排查。
十四、清理 Docker 资源
Docker 用久了会积累很多无用镜像、停止的容器、缓存和 volume。
清理停止的容器:
bash
docker container prune
清理无用镜像:
bash
docker image prune
清理无用网络:
bash
docker network prune
清理构建缓存:
bash
docker builder prune
一键清理未使用资源:
bash
docker system prune
清理更彻底,包括未使用镜像:
bash
docker system prune -a
注意:docker system prune -a 会删除所有未被容器使用的镜像,执行前要确认。
十五、常见组合命令示例
启动一个 Nginx 并映射端口:
bash
docker run -d --name nginx-demo -p 8080:80 nginx
查看日志:
bash
docker logs -f nginx-demo
进入容器:
bash
docker exec -it nginx-demo sh
停止并删除容器:
bash
docker stop nginx-demo
docker rm nginx-demo
拉取 Redis 并运行:
bash
docker run -d --name redis-demo -p 6379:6379 redis
运行 MySQL 并持久化数据:
bash
docker volume create mysql-data
docker run -d \
--name mysql-demo \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql-data:/var/lib/mysql \
mysql:8
十六、日常排查思路
当一个 Docker 服务无法正常访问时,可以按这个顺序排查:
text
1. docker ps:容器是否正在运行
2. docker logs:应用是否启动失败
3. docker inspect:端口、挂载、环境变量是否正确
4. docker exec:进入容器内部检查服务状态
5. curl localhost:端口:宿主机是否能访问
6. docker network inspect:容器之间网络是否连通
7. docker compose logs:多服务项目看整体日志
常见问题通常集中在:
text
端口没映射
端口被占用
环境变量错误
挂载目录权限不足
容器内服务监听地址错误
数据库或依赖服务未启动
镜像架构不匹配
结语
Docker 命令看起来很多,但日常最常用的其实就几类:
text
镜像:pull、images、rmi、build
容器:run、ps、stop、start、restart、rm、exec、logs
数据:volume、cp、-v
网络:network、-p
编排:docker compose up、down、logs、ps
清理:prune、system prune
掌握这些命令后,基本就能完成大多数 Docker 项目的启动、部署和排查。真正熟练 Docker 的关键,不是背下所有参数,而是理解镜像、容器、端口、挂载、网络这几个核心概念。