当前位置: 首页 > 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.zskr.cn/news/9713.html

相关文章:

  • linux重启mysql服务,几种常见的方法
  • mysql常用语句,常用的语句整理
  • 2025年9月Java后端招聘市场技术风向标:666份招聘数据深度解读
  • 和汽车相关的国内期刊
  • 服务器总资源监控脚本
  • 一个身体,两个身体
  • 004_元组操作
  • 代码流水线
  • 详细介绍:PHP基础-数据类型(第九天)
  • 从 “盲调” 到 “精准优化”:SQL Server 表统计信息实战指南
  • CSP-2025游寄
  • [::-1]的用法
  • 新手也能轻松上手!midas Gen 2019 安装详细图解
  • glTF/glb:现在和未来
  • bpftrace测量函数耗时
  • libero 2025.1 Run PROGRAM_SPI_IMAGE_Action 导出 SPI auto 自动升级文件
  • 负载均衡+Tomcat集群+MySQL主从 实验
  • 2025年运营商数据分类分级最佳实践、案例与方案
  • day14-Trae之一键换脸APP开发04
  • 面试常问问题——索引是不是越多越好
  • ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池
  • allegro17.4 布线鼠标拖动变成了ployline,重启后恢复,记得有地方设置但是一时找不到在哪儿了,有知道的网友吗?
  • 一天一款实用的AI工具,第2期,AI摘要生成工具
  • 压测指标和结果分析
  • 完整教程:Android 自定义电池组件(BatteryView)
  • 中文乱码速查表
  • 使用PySide6/PyQt6实现全国省市区的级联选择组件
  • .NET驾驭Word之力:结构化文档元素操作
  • 行稳、致远 | 技术驱动下的思考感悟
  • JDK从8升级到21的问题集