Docker介绍与常见指令

大家好,这里是程序员阿亮,今天做项目的时候对着宝塔终端搞了一下午,使用到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
...

默认有 bridgehostnone 三种网络。

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,最后用自定义网络让它们通信。只有通过实际操作,才能真正掌握容器化开发的精髓。

相关推荐
如意.7597 分钟前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣38 分钟前
智能体选型实战指南
运维·人工智能
yy552742 分钟前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔3 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密3 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20153 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑
卷福同学4 小时前
【养虾日记】QClaw操作浏览器自动化发文
运维·人工智能·程序人生·自动化
岁岁种桃花儿4 小时前
kubenetes从入门到上天系列第二十一篇:Kubernetes安装Ingress实战
云原生·容器·kubernetes
woho7788995 小时前
不同网段IP的网络打印机,打印、扫描设置
运维·服务器·网络