大家好,这里是程序员阿亮,今天做项目的时候对着宝塔终端搞了一下午,使用到docker的时候,发现很多docker指令有点忘记了....所以今天讲一下docker吧!
前言
Docker 是目前最流行的容器化技术之一,它通过轻量级的虚拟化方式,帮助开发者快速构建、部署和运行应用程序。无论你是刚接触 Docker 的新手,还是希望系统梳理常用命令的老手,本文将为你详细介绍 Docker 中最常见、最实用的指令,助你高效使用 Docker。
一、镜像(Image)相关命令
1. docker pull:从仓库拉取镜像
作用:下载指定镜像到本地
语法:
cpp
docker pull <image_name>:<tag>
示例:
cpp
# 拉取最新版 Nginx 镜像
docker pull nginx:latest
# 拉取指定版本的 Redis(如 7.0)
docker pull redis:7.0
# 不加tag默认lastest
2. docker images:列出本地所有镜像
作用 :查看已下载的镜像列表。
示例:
cpp
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 weeks ago 141MB
redis 7.0 7614ae9a5f8b 3 months ago 117MB
3. docker rmi:删除本地镜像
作用 :移除不再需要的镜像。
示例:
cpp
# 删除 Redis 7.0 镜像(通过名称)
docker rmi redis:7.0
# 强制删除(即使被容器引用)
docker rmi -f 605c77e624dd
# 注意:若镜像正被容器使用,需先删除容器或加 -f 强制删除。
4. docker build:基于 Dockerfile 构建镜像
作用 :从源码构建自定义镜像。
示例 :
假设当前目录下有 Dockerfile:
cpp
FROM alpine
RUN echo "Hello from custom image!" > /hello.txt
CMD cat /hello.txt
执行构建:
cpp
# 构建并打标签为 my-hello:v1
docker build -t my-hello:v1 .
构建成功:
cpp
docker run my-hello:v1
# 输出:Hello from custom image!
二、容器(Container)相关命令
1. docker run:创建并启动容器
作用 :从镜像运行一个新容器。
常用选项说明:
-d:后台运行-p:端口映射(宿主机:容器)--name:指定容器名-v:挂载数据卷-e:设置环境变量--rm:退出后自动删除
示例:
cpp
# 启动一个名为 web 的 Nginx 容器,映射 8080 端口
docker run -d --name web -p 8080:80 nginx
# 启动 Redis 并设置密码,退出后自动清理
docker run --rm --name myredis -e REDIS_PASSWORD=123456 redis:7.0 redis-server --requirepass 123456
2. docker ps:查看运行中的容器
作用 :列出当前正在运行的容器。
示例:
cpp
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx "/docker-entrypoint...." 2 minutes ago Up 2 mins 0.0.0.0:8080->80/tcp web
如果要查看已经关闭的容器:
cpp
docker ps -a
3. docker stop / start / restart:控制容器生命周期
示例:
cpp
# 停止名为 web 的容器
docker stop web
# 再次启动
docker start web
# 重启(常用于配置更新后)
docker restart web
4. docker exec:进入运行中的容器执行命令
作用 :在容器内执行交互式命令(如调试)。
示例:
cpp
# 进入 Nginx 容器的 shell
docker exec -it web /bin/bash
# 在容器内直接执行单条命令(不进入交互)
docker exec web cat /etc/nginx/nginx.conf
# -it 表示分配伪终端并保持 STDIN 打开。
5. docker logs:查看容器日志
作用 :排查应用输出或错误信息。
示例:
cpp
# 查看 Nginx 访问日志
docker logs web
# 实时跟踪日志(类似 tail -f)
docker logs -f web
6. docker rm:删除容器
作用 :清理不再需要的容器。
示例:
cpp
# 删除已停止的容器
docker rm web
# 强制删除正在运行的容器(先 stop 再 rm)
docker rm -f web
# 删除所有已停止的容器
docker container prune
三、网络(Network)相关命令
1. docker network ls:列出所有网络
示例:
cpp
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
abc123def456 bridge bridge local
xyz789uvw012 host host local
...
默认有 bridge、host、none 三种网络。
2. docker network create:创建自定义网络
作用 :让多个容器在同一网络下通过服务名通信。
示例:
cpp
# 创建名为 mynet 的桥接网络
docker network create mynet
3. docker run --network:将容器加入指定网络
示例:
cpp
# 启动两个容器到同一网络
docker run -d --name app1 --network=mynet alpine sleep 3600
docker run -d --name app2 --network=mynet alpine sleep 3600
# 在 app1 中 ping app2(验证连通性)
docker exec app1 ping -c 2 app2
容器间可通过容器名直接解析 IP,无需记 IP 地址。
四、数据卷(Volume)相关命令
1. docker volume create:创建命名卷
作用 :持久化容器数据(如数据库文件)。
示例:
cpp
# 创建名为 mysql_data 的卷
docker volume create mysql_data
2. docker volume ls:列出所有卷
示例:
cpp
$ docker volume ls
DRIVER VOLUME NAME
local mysql_data
3. docker run -v:挂载卷到容器
示例:
cpp
# 将 mysql_data 卷挂载到 MySQL 容器的 /var/lib/mysql
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql_data:/var/lib/mysql \
mysql:8.0
# 即使容器删除,数据仍保留在卷中。
4. docker volume inspect:查看卷详情
示例:
cpp
$ docker volume inspect mysql_data
[
{
"CreatedAt": "2026-01-25T10:00:00Z",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/mysql_data/_data",
"Name": "mysql_data",
...
}
]
5. docker volume prune:清理未使用的卷
示例:
cpp
# 删除所有未被容器引用的卷(谨慎操作!)
docker volume prune
五、系统与清理命令
1. docker info:查看 Docker 系统信息
示例:
cpp
docker info
# 输出包括:容器数量、镜像数量、存储驱动、CPU/内存等
2. docker stats:实时监控容器资源使用
示例:
cpp
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
a1b2c3d4e5f6 web 0.10% 2.5MiB / 15.6GiB 0.02% 1.2kB / 0B 0B / 0B
按q退出
3. docker system prune:一键清理无用资源
作用 :删除所有停止的容器、未被引用的网络、构建缓存等。
示例:
cpp
# 清理常规无用资源
docker system prune
# 彻底清理(包括未被任何容器使用的镜像)
docker system prune -a
总结
以上命令覆盖了 Docker 日常使用的 90% 场景。建议你在本地环境动手实践每一个示例------比如先跑一个 Nginx,再连接 Redis,最后用自定义网络让它们通信。只有通过实际操作,才能真正掌握容器化开发的精髓。