【知识回顾】Docker端口暴露的方式

 转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


知识点回顾

Docker要映射了端口,外部才能访问到容器服务。Docker映射端口有3个指令,含义分别为:

1. -p(--publish):将容器端口直接映射到宿主机端口,这是最常用、最灵活的方式。格式为:

-p [宿主机IP:][宿主机端口]:[容器端口]

2. -P( --publish-all):将 Dockerfile 中 EXPOSE 声明的所有端口随机映射到宿主机的高位端口(通常高于 32768)。

3. EXPOSE:在 Dockerfile 中使用的指令。它只是一个元数据(声明),用于说明容器预期会监听哪些端口,不会将端口映射到宿主机。

使用场景

1. 不暴露任何端口(默认场景)

命令

docker run -d [image]

这是最隔离的状态。容器内的端口完全封闭,只有容器自己可以访问。无论是宿主机还是外部网络,甚至是其他容器,都无法通过网络连接到这个容器服务。

网络可达:

2. 使用-P(大写)随机映射端口

前提: 要求使用的镜像的 Dockerfile 中已经用 EXPOSE 指令声明了要暴露的端口。

命令

docker run -d -P [image]

Docker 宿主机会随机选择一个未被占用的高位端口映射到容器的目标端口。

网络可达:

以minio为例子,编写Dockerfile如下:

FROM www.myharbor.com/library/asianux-7.6.1810:v1
RUN set -ex \
  && mkdir -p /data \
  && mkdir -p /minio
COPY minio /minio/
RUN chmod 777 /minio/minio
EXPOSE 9000 9001    ##声明暴露端口
CMD ["/minio/minio","server","/data","--console-address",":9001"]

构建一个镜像并启动:

# docker build . -t www.myharbor.com/minio:v1
# docker run -d -P www.myharbor.com/minio:v1

可以看到端口已经映射出来了,并且通过端口访问正常:

3. 使用 -p (小写,手动指定映射)

这是最常用的方式,有几种不同的用法:

3.1 映射到宿主机所有接口的随机端口

命令

docker run -d -p [容器端口] [image]

将容器的指定端口映射到宿主机所有网络接口的一个随机高位端口。效果类似-P,但只针对指定的一个端口。

例如:

图片

3.2 映射到宿主机所有接口的特定端口

命令

docker run -d -p [宿主机端口]:[容器端口] [image]

将容器的指定端口映射到宿主机所有网络接口(0.0.0.0)的指定端口。

例如:

图片

    3.3 映射到宿主机特定IP的特定端口

    命令

    docker run -d -p [宿主机IP]:[宿主机端口]:[容器端口] [image]

    将容器的某个端口映射到宿主机特定IP(例如:10.0.0.101)的指定端口。这样只有通过这个特定IP才能访问,增加了安全性。

    访问方式http://10.0.0.101:[映射端口] (通过宿主机其他IP无法访问)

    例如:

    图片

    3.4 指定协议映射端口

    命令

    docker run -d -p [宿主机端口]:[容器端口]/[协议] [image] 

    默认映射协议是 TCP,如果需要其它协议例如UDP,可以这样指定。

    例如:

    图片

    网络可达:

    4. 使用 --expose(运行时暴露端口)

    命令

    docker run -d --expose 80 --expose 443 nginx

    这个命令的效果类似于在 Dockerfile 中使用 EXPOSE 指令。它只是在运行时为容器打开这些端口,但并没有映射到宿主机。这些端口只对在同一个自定义网络中的其他容器开放,用于容器间通信。

    例如:

    图片

    网络可达:

    -p 隐含了 --expose 的功能。使用 -p 80:80 时,Docker 会自动--expose 80

    总结

    总结以上几种端口映射方式如下:

    欢迎关注SRE成长记一起探讨学习!↓↓↓

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值