常见 Docker 命令介绍与使用指南

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 logsdocker 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 的关键,不是背下所有参数,而是理解镜像、容器、端口、挂载、网络这几个核心概念。

相关推荐
两点王爷2 小时前
使用命令行备份/还原docker运行的数据库 (MySQL、PostgreSQL)
mysql·docker·容器
张青贤2 小时前
Docker Remote 未授权访问漏洞修复方法
运维·docker·容器
小夏子_riotous2 小时前
Docker学习路径——10、Docker Compose 一站式编排:从入门到生产级部署
linux·运维·服务器·docker·容器·centos·云计算
smallcelebration2 小时前
132 docker入门学习
学习·docker·容器
AI服务老曹2 小时前
突破芯片壁垒:基于 Docker 与异构计算架构的工业级 AI 视频管理平台深度解析
人工智能·docker·架构
旧故新长3 小时前
部署自动发卡网站的问题和解决方案
linux·docker
hiwb3 小时前
Docker 安装 MySQL,DBeaver 连接 MySQL
mysql·docker·容器
AI服务老曹4 小时前
【架构深度解析】从X86到ARM的异构算力调度:如何利用 Docker 与 GB28181 构建高可用的私有化AI视频管理平台(含源码交付方案)
arm开发·docker·架构
杨云龙UP4 小时前
Docker MySQL 5.7 全库备份到异地服务器实践记录_20260427
linux·运维·服务器·数据库·mysql·docker·容器