Day 5 Docker 基础网路设定

容器技术具备了隔离性,若要与其他容器或是外部网路存取的话,那便需要一个虚拟的网路环境。docker 运用 Network Namespace 的方式,替每一个容器建立独立的环境,与宿主主机是完全隔离的。

Network Namespace

Network Namespace 可以提供独立的网路设备、IP路由表、连接埠通讯端...等支援。所以执行於 Network Namespace 下的应用程序,就如同有独立的网路硬体和设定。

虚拟网路 docker0

预设情况下,docker 启动时会在服务器上架设一个名为 docker0 的桥接器,并透过其内的 veth 跟每一个容器内的 eth0 相连接。如此一来便实现了容器和外部网路存取的可能,以及容器间彼此间的通讯。因为容器间会存在於同一个子网路中。
docker0

来源:https://www.linuxjournal.com/

查询网路设定

输入 sudo docker inspect <container id or name> 就可以查询。结果是位在 NetworkSettings 的栏位中。

{
    "NetworkSettings": {
    "Bridge": "",
    "SandboxID": "ded74f4bfdb7a6fe7f22ff7ccb37835fe7def71b95c087562f69bcfe48a3b071",
    "HairpinMode": false,
    "LinkLocalIPv6Address": "",
    "LinkLocalIPv6PrefixLen": 0,
    "Ports": {
        "443/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "443"
            },
            {
                "HostIp": "::",
                "HostPort": "443"
            }
        ],
        "80/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "80"
            },
            {
                "HostIp": "::",
                "HostPort": "80"
            }
        ]
    }
}

常用的指令

让外部网路得以存取容器

sudo docker run -d -P <container ID or name>
-P 是一种随机的连结策略,若你不想要如此的话,也可以自行指定
sudo docker run -d -p 80:80 -p 116.22.3.106:443:443 <container ID or name>
-p 需要一对对的输入,结构为 <限制特定IP?>:<宿主port?>:<容器port>
-p 116.22.3.106:443:443 代表的意思为:限制由 116.22.3.106 来源的请求,以 443 port 存取 docker 的 443 port

容器间的存取

# 建立一个 web 容器,允许其和 mysql 和 nginx 服务相连接
sudo docker run -d -p 80:80 -p 443:443 --name web --link mysql nginx

容器间的通讯仅需要告知容器名称,并不用告知连接埠和映射。这样便能确保容器内的连接埠仅应用於容器间,不会对外暴露於外网。

接下来的几篇,会从作业系统安装 docker 开始,一步步地加上 nginx 服务、 https 设定,然後进入 matomo, mautic ...等开源软件安装。


<<:  【Day5】重要底层系统篇-Discuss

>>:  Day20 javascript 阵列方法-2

23. 闲聊 x VFS 办理英签申请

今天去 VFS 办理英签申请,纪录一下流程骗一天文章。 有後续应该也不会在这里更新 XD 流水帐 V...

DAY29 欸你Git来Hub一下

昨天提到先将本机的档案列为版控,但是光在本机这样操作还是不太够,其他人要一起共同开发的时候,还是一样...

数位 AI 新时代

人的科技文明发展始终来自於人性 在数位的新时代浪潮席卷之下,世界各国不论是个人的发展,还是组织企业团...

缺乏计画的目标,只能叫做愿望。----目标设定篇(上)

缺乏计画的目标,只能叫做愿望。 A goal without a plan is just a wi...

Day -9 while与for

while 常见用法如下: //while count = 1 while count<=5:...