当前位置: 首页 > news >正文

docker学习(4)-Docker常用命令

docker学习(4)-Docker常用命令

2026-04-15 18:00  xiashengwang  阅读(0)  评论(0)    收藏  举报

核心任务:

  1. 镜像操作(拉取、查看、删除、打标签)
  2. 容器生命周期(创建、运行、停止、启动、删除)
  3. 容器交互与日志(进入容器、查看输出)
  4. 资源清理与查看
  5. 简单数据卷和网络体验

1、镜像操作

1.1 拉取镜像
标准镜像的名字和TAG名可以在https://hub.docker.com/查询到。
image

如果不带TAG,那么默认会用TAGlatest,比如下面的docker pull alpine,实际是:docker pull alpine:latest

docker pull nginx:1.28
docker pull alpine

image

1.2 查看本地docker镜像
docker images
image

1.3 给镜像打标签
nginx 镜像打一个新标签,例如 my-nginx:v1
docker tag nginx:1.28 my-nginx:v1

docker tag nginx:latest   my-nginx:v1源镜像         新镜像名:新标签

docker images查看下:
可以发现,新生成的my-nginx:v1nginx:1.28ID相同,这是docker节省硬盘空间的机制,相同的Layer内容只会存一份。
image

1.4 删除镜像
删除刚才创建的标签镜像(只是删除标签,不影响原镜像):
docker rmi my-nginx:v1

2、容器的生命周期

2.1 运行一个简单的容器(前台运行)
docker run hello-world
这个命令会拉取 hello-world 镜像(如果本地没有),并运行一个临时容器,打印一段欢迎文字后自动退出。
image

2.2 运行一个 Nginx 容器(后台运行,端口映射)
docker run -d --name my-nginx -p 8080:80 nginx:1.28
image

  • -d:后台运行。
  • --name my-nginx:给容器起名。
  • -p 8080:80:将主机的 8080 端口映射到容器的 80 端口。
    验证: 打开浏览器访问 http://localhost:8080,应该能看到 Nginx 欢迎页面。

2.3 查看运行中的容器
docker ps
image
状态是up,代表在运行之中。

2.4 查看所有容器(包括已停止的)
docker ps -a
image
这会显示所有容器,包括之前运行过的 hello-world 容器(已退出)。

2.5 停止容器
docker stop my-nginx
image
注意: docker stop 容器名字 或 ID,这里ID是模糊匹配,容器名字必须写全名才能匹配。

2.6 启动已停止的容器
docker start my-nginx

2.7 重启容器
docker restart my-nginx
相当于 stop + start
用于,服务莫名卡死,或者修改配置文件后需要重启服务等场景。

2.7 重启容器
先停止容器(如果还在运行):
docker stop my-nginx
docker rm my-nginx
也可以加一个-f,强制删除运行中的容器。
docker rm my-nginx -f

3、容器交互与日志

3.1 运行一个交互式容器(Ubuntu)
docker run -it --name my-ubuntu ubuntu bash

  • -it:分配一个交互式终端。
  • bash:容器启动后执行的命令(进入 bash)
    image
    执行ps,可以看到PID为1的主进程是bash。
    image
    输入exit容器会停止(因为主进程 bash 结束了)。docker ps -a 会看到该容器状态为 Exited
    image

3.2 查看容器日志
先启动一个后台 Nginx 容器:
docker run -d --name log-test nginx:1.28

查看该容器的日志:
docker logs log-test
image
默认输出 Nginx 启动日志。实时跟踪日志(类似 tail -f):
docker logs -f log-test
image
Ctrl + C 退出跟踪。

3.3 进入一个运行中的容器(exec)
确保 log-test 容器正在运行(如果停止了就 docker start log-test),然后执行:
docker exec -it log-test bash
image

可以看到nginx容器使用的是debian系统,各种linux命令都是通用的。
image

这里可以看到,exec执行的bash命令PID是26,而PID为1的主进程是nginx的守护进程。也就是说nginx这个镜像启动后,主进程是nginx,一个容器干一件事,需要查看里面的目录和文件,需要用exex bash的方式进来查看,初始化不是ubuntu镜像那样是直接交互的bash。
image

3.4 查看容器详情
docker inspect log-test
输出一个 JSON 格式的详细信息,包括网络、挂载、配置等。
image

4、资源清理与系统管理

4.1 查看 Docker 占用的磁盘空间
docker system df
df = disk free
image

4.2 清理未使用的资源
谨慎操作:删除所有停止的容器、未使用的网络、悬挂的镜像(dangling images):
docker system prune
输入 y 确认。如果要删除未使用的卷(可能会丢失数据),加上 --volumes 参数。
image

4.3 删除特定容器和镜像
docker container prune
image

5、简单数据卷体验

5.1 创建一个数据卷
docker volume create my-vol

5.2 查看所有卷
docker volume ls
image

5.3 运行一个容器,挂载该卷
docker run -d --name vol-test -v my-vol:/data alpine tail -f /dev/null

  • -v my-vol:/data:将卷 my-vol 挂载到容器的 /data 目录。
  • tail -f /dev/null:让容器保持运行(因为没有交互式进程)

5.4 在容器内写入数据
docker exec -it vol-test sh
image
在容器内执行:

echo "Hello Docker" > /data/test.txt
exit

image

5.5 停止并删除容器

docker stop vol-test
docker rm vol-test

5.6 创建新容器,挂载同一个卷,验证数据

docker run -it --rm -v my-vol:/data alpine cat /data/test.txt
  • --rm:容器退出后自动删除。
  • 应该输出 Hello Docker,说明数据持久化了。
    image

5.7 清理卷

docker volume rm my-vol

6、简单网络体验

6.1 查看 Docker 网络

docker network ls

你会看到 bridge、host、none 等默认网络。
image

6.2 创建自定义桥接网络

docker network create my-net

6.3 运行两个容器,连接到自定义网络

docker run -d --name c1 --network my-net alpine tail -f /dev/null
docker run -d --name c2 --network my-net alpine tail -f /dev/null

6.4 测试容器间通信
进入 c1,尝试 ping c2:

docker exec -it c1 sh

在容器内执行:

ping c2

按 Ctrl + C 停止 ping,你会看到成功通信(因为自定义网络提供了 DNS 解析)。
image

6.5 断开与网络的连接
进入 c1,尝试 ping c2:

docker network disconnect my-net c1

image

6.6 清理
进入 c1,尝试 ping c2:

docker stop c1 c2
docker rm c1 c2
docker network rm my-net

7、查看容器占用资源

7.1 查看内存占用情况

# 查看全部容器
docker stats --no-stream# 查看某一个容器
docker stats --no-stream 容器名和容器ID

image
7.2 查看Docker硬盘占用情况

docker system df

image