Docker學習(六): 網絡使用與配置
特別聲明:
博文主要是學習過程中的知識整理,以便之後的查閱回顧。部分內容來源於網絡(如有摘錄未標註請指出)。內容如有差錯,也歡迎指正!
=============系列文章=============
1. Docker學習(一): 基本概念
2. Docker學習(二): 鏡像的使用與構建
3. Docker學習(三): Dockerfile指令介紹
4. Docker學習(四): 操作容器
5. Docker學習(五): 倉庫與數據管理
6. Docker學習(六): 網絡使用與配置
=================================
一、端口映射
-p 或 -P 參數來指定端口映射,當-P標記時,Docker會隨機映射一個49000~49900的端口內部容器開放的網絡端口。
-p:可以指定要映射的端口,並且在一個指定端口上只可以綁定一個容器。
格式:ip:hosrtPort:containerPort | ip::containerPort | hostPort:containerPort
映射所有接口地址:默認綁定本地所有接口上的所有地址
docker run -d -p 5000:5000 IMAGE COMMAND
映射到指定地址的知道端口:
docker run -d -p 127.0.0.1:5000:5000 IMAGE COMMAND
映射到指定地址的任意端口:
docker run -d -p 127.0.0.1::5000 IAMGE COMMAND
查看映射端口配置:
docker port nostalgic_morse 5000
二·、容器互聯
容器的連接系統是除了端口映射外,另一種跟容器中應用交互的方式。該系統會在源和接收容器之間創建一個隧道,接收容器可以看到源容器指定的信息。
--link name:alias(name是要鏈接容器的名稱,alias是這個連接的別名)
docker run -d -P --name web --link db:db IAMGE COMMAND
Docker在兩個互聯的容器之間創建了一個安全隧道,而且不用映射它們的端口到宿主機上。Docker通過2中方式為容器公開連接信息:
1.環境變量,用env命令查看
docker run --rm --name web2 --link db:db IMAGE env
2.更新/etc/hosts文件
docker run -it --rm --link db:db IMAGE /bin/bash
cat /etc/hosts #查看主機配置包含了連接的兩個容器
三、網絡配置選項
指定容器掛在的網橋:-b BRIDGE 或 --bridge=BRIDGE
定制docker0的掩碼:--bip=CIDR
Docker服務端接收命令的通道:-H SOCKET... 或 --host=SOCKET...
是否支持容器之間進行通信:--icc=true|false
容器間通信:--ip-forward=true|false
是否允許添加iptables規則:--iptables=true|false
容器網絡中的MTU:--mtu=BYTES
以下2個選項既可以在啟動服務時指定,也可以Docker容器啟動時候指定。在Docker服務啟動的時候指定則會成為默認值,後面執行docker run時可以覆蓋設置的默認值。
指定DNS服務器:--dns=IP_ADDRESS...
指定DNS搜索域:--dns-search=DOMAIN...
以下選項只有在docker run執行時使用,針對容器的特性內容。
配置容器主機名:-h HOSTNAME 或 --hostname=HOSTNAME
添加到另一個容器的連接:--link=CONTAINER_NAME:ALIAS
配置容器的橋接模式:--net=bridge|none|container:NAME_or_ID|host
映射容器端口到宿主主機:-p SPEC 或 --publish=SPEC
映射容器所有端口到宿主主機:-P 或 --publish-all=true|false
四、容器訪問控制(iptables防火墻來實現)
容器訪問外部網路:需要本地系統的轉發支持。
sysctl net.ipv4.ip_forward #檢查轉發是否打開
net.ipv4.ip_forward = 1 #如果為0,說明沒有開啟
sysctl -w net.ipv4.ip_forward=1 #開啟轉發
在啟動Docker服務的時候設定--ip-forward=true,Docker就會自動開啟轉發。
容器之間訪問:容器的網絡拓撲是否已經互聯。默認情況下,所有容器都會被連接到docker0網橋上;本地系統的防火墻iptables是否允許通過。
訪問所有端口:當啟動Docker服務時候,默認會添加一條轉發策略到iptables的FORWARD鏈上。策略為通過(ACCEPT)還是禁止(DROP)取決於配置--icc=true(缺省值)還是--icc=false。如果收到指定--iptables=false則不會添加iptables規則。默認情況下,不同容器之間是允許網絡互通的。如果為了安全考慮,可以在/etc/default/docker文件中配置DOCKER_OPTS=--icc=false來禁止。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
參考:
1.《docker_practice》
Docker學習(六): 網絡使用與配置