Docker (5)

176 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

这次继续 Docker 容器技术的梳理,之前讲了 Dcoekr 容器技术的基本概念以及 Docker 的安装过程:包括安装步骤、安装成功的判断.....今天主要涉及一下 Docker 的网络

Docker 网络

网络介绍

我们知道 Docker 的隔离性,网络也是个隔离性的一部分,Linux 使用了命名空间来进行资源的隔离,比如 pid-namespace 就是用来隔离进程的,mount-namespace 是用来隔离文件系统的,network-namespace 是用来隔离网络的.每一个 network-namespace 都提供了一个独立的网络环境,包括网卡路由 iptable 规则等等,都是与以其它的 network-space 隔离的.

  1. Docker 容器在默认情况下,一般会分配一个独立的 network-namespace,也就是网络类型中的 Bridge 模式.

    在使用 Bridge 时就涉及到了一个问题,既然它有独立的 namesapce,这就需要一种技术使容器内的端口可以在主机上访问到,这种技术就是端口映射,Docker 可以指定你想把容器内的某一个端口可以在容器所在主机上的某一个端口它俩之间做一个映射,当你在访问主机上的端口时,其实就是访问容器里面的端口。

  2. 还有一种类型是 Host 模式,如果在启动容器的时候指定使用 Host 模式,那么这个容器将不会获得一个独立的 network-namespace,而是和主机共同使用一个,这个时候容器将不会虚拟出自己的网卡,配置出自己的 ip。而是使用宿主机上的 ip 和端口。也就是说在 Docker 上使用网络和在主机上使用网络是一样的。

  3. 还有一种网络类型是 None。也就是没有网络,这种情况 Docker 将不会和外界的任何东西进行通讯。

image.png

实际访问的端口

  1. -p (小写)是开放一个容器的端口到主机上

    在后台运行,开放主机 8080 端口映射到容器的 80 端口上。

        docker run -d -p 8080:80 hub.c.163.com/library/nginx
    

    查看主机8080端口是否开启

        netstat -na |grep 8080
    

    如下图,是开启的那么访问 主机 ip:8080 即可访问到 nginx。

image.png

  1. -P (大写)是开放容器所有的端口到主机上一个随机的端口

    停掉刚才的 Docker 服务。

        docker stop containerId
    

    使用大P

        docker run -d -P hub.c.163.com/library/nginx
    

    从下图可以看到,随机给的端口是 32768,然后用 ip:32768 去访问即可访问到nginx。

image.png

今天主要就是梳理了一下 Docker 容器中的网络,东西也不是很多,还是那句话,重在理解!......
希望本文能够帮到你,如有错误,望指正!
我向你敬礼啊,Salute!