docker 常用命令与端口映射

搜索镜像:从 Docker Hub 查找镜像

docker search <镜像名称>
# 例如:docker search nginx

拉取镜像:从仓库下载镜像到本地

docker pull <镜像名称:标签>
# 例如:docker pull nginx:latest
# 如果不写标签,默认拉取 latest 版本

列出本地镜像:查看已下载的镜像

docker images
# 或者
docker image ls

删除镜像:删除本地镜像

docker rmi <镜像ID或镜像名:标签>
# 例如:docker rmi nginx
# 强制删除(如果镜像正在被使用):docker rmi -f nginx

构建镜像:通过 Dockerfile 创建自定义镜像

docker build -t <镜像名:标签> <Dockerfile路径>
# 例如:docker build -t my-app:1.0 .
# `-t` 用于指定镜像名称和标签,`.` 表示当前目录

 

容器生命周期管理 (Container Lifecycle Management)

创建并启动容器:最核心的命令

docker run [选项] <镜像名称> [命令]

常用选项:

  • -d:后台运行容器(守护态)

  • --name:为容器指定一个名称

  • -it:交互式运行容器(通常与 /bin/bash 连用)

  • -p:设置端口映射(详见第二部分)

  • -v:设置数据卷挂载(持久化数据)

  • -e:设置环境变量

  • --rm:容器停止后自动删除

# 后台运行一个名为 my-nginx 的容器,并进行端口映射
docker run -d --name my-nginx -p 8080:80 nginx

# 交互式运行一个 Ubuntu 容器,并进入其终端
docker run -it --name my-ubuntu ubuntu /bin/bash

列出容器:

docker ps      # 查看正在运行的容器
docker ps -a   # 查看所有容器(包括已停止的)

启动/停止/重启容器:

docker start <容器ID或名称>
docker stop <容器ID或名称>     # 优雅停止
docker restart <容器ID或名称>
docker kill <容器ID或名称>     # 强制立即停止

进入运行中的容器:

docker exec -it <容器ID或名称> /bin/bash
# `exec` 是在已运行的容器中执行命令,`-it` 保证我们有一个交互式终端

查看容器日志:

docker logs <容器ID或名称>
docker logs -f <容器ID或名称> # 实时追踪日志(类似 tail -f)

查看资源使用情况:

docker stats

清理资源:

docker system prune      # 清理所有已停止的容器、未被使用的网络、构建缓存
docker system prune -a   # 额外清理所有未被容器使用的镜像
# 注意:这个命令很强大,使用前请确认!

 

端口映射规则

-p:手动指定映射端口(最常用)

docker run -p <宿主机端口>:<容器端口> ...

示例:docker run -d -p 8080:80 nginx

  • 将容器内部的 80 端口映射到宿主机的 8080 端口。

  • 访问方式:在宿主机浏览器中打开 http://localhost:8080 或 http://<宿主机IP>:8080

-p <宿主机IP>::<容器端口>
# 示例:-p 127.0.0.1:8080:80
# 只有通过宿主机的 127.0.0.1:8080 才能访问,更安全。
  • 原理:Docker 通过在主机的 iptables 中创建规则来实现端口转发。当外部请求到达宿主机的映射端口时,iptables 规则会将数据包转发到容器的虚拟 IP 和端口上。

  • 安全问题:默认映射 (-p 8080:80) 会绑定到宿主机的所有 IP (0.0.0.0),这意味着所有能访问到这台主机的客户端都可以连接。在生产环境中,如果宿主机有公网IP,建议使用 -p 127.0.0.1:8080:80 或通过防火墙策略来限制访问来源,以提高安全性。

  • 端口冲突:如果宿主机上的某个端口已经被其他进程占用(如已有另一个 Nginx 占用了 80 端口),你就不能再将它映射给容器,否则会报错 Bind for 0.0.0.0:80 failed: port is already allocated。你需要选择一个未被占用的宿主机端口。

posted @ 2025-09-22 17:39  wangssd  阅读(109)  评论(0)    收藏  举报