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

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。你需要选择一个未被占用的宿主机端口。

http://www.hskmm.com/?act=detail&tid=13574

相关文章:

  • linux重启mysql服务,几种常见的方法
  • opencv学习记录3
  • 统计分析神器 NCSS 2025 功能亮点+图文安装教程
  • mysql常用语句,常用的语句整理
  • 当写脚本循环更新几百万数据发现很慢怎么办 - 孙龙
  • 服装采购跟单系统的高效管理实践 - 详解
  • 和汽车相关的国内期刊
  • 服务器CPU、内存、磁盘、网络使用率,东方通CPU使用率东方通内存使用率监控脚本
  • 3 网络基础知识+web基础知识+部署Server
  • wxpython图形界面_01_最小基本结构
  • 服务器总资源监控脚本
  • 一个身体,两个身体
  • 006_字典操作
  • 简单理解java虚拟机
  • 东方通中间件嵌入式监控脚本
  • 004_元组操作
  • 个人作业-第二次软件工程作业
  • 代码流水线
  • 洛谷题单指南-进阶数论-P1516 青蛙的约会
  • electron中的几个概念
  • 实用指南:告别IP被封!分布式爬虫的“隐身”与“分身”术
  • 从 “盲调” 到 “精准优化”:SQL Server 表统计信息实战指南
  • 别的摄像机都能国标GB28181注册上,就这台海康摄像机注册不上来,国标配置都反复检查没问题
  • 保护眼睛小程序
  • CSP-2025游寄
  • [::-1]的用法
  • 003_for循环操作列表和元组
  • linux 文件传输命令
  • 新手也能轻松上手!midas Gen 2019 安装详细图解
  • Redis AOF原理