1. 程式人生 > >Docker基礎學習(六)-Docker容器的網路連線

Docker基礎學習(六)-Docker容器的網路連線

一.Docker容器的網路基礎

通過ifconfig檢視docker0的網路裝置,docker守護程序就是通過docker0為docker的容器提供網路連線的各種服務。

docker0是Linux虛擬網橋。

Linux虛擬網橋的特點:

  • 可以設定IP地址
  • 相當於擁有一個隱藏的虛擬網絡卡

docker0的地址劃分:

  • IP:172.17.42.1 子網掩碼: 255.255.0.0
  • MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
  • 總共提供65534個地址

docker守護程序在一個容器啟動時,實際上它要建立網路連線的兩端。一端是在容器中的網路裝置,而另一端是在執行docker守護程序的主機上開啟一個名為veth*的一個介面,用來實現docker這個網橋與容器的網路通訊。

需要檢視網橋,需要linux的網橋管理程式,在Ubuntu中通過 apt-get install bridge-utils。

$ sudo brctl show
bridge name    bridge id              STP    enabled    interfaces
docker0        8000.0242ed943d02      no

執行一個docker容器,在容器中檢視它的網路裝置(如果沒有ifconfig命令,通過apt-get install -y net-tools)

[email protected]:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:145 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:184985 (184.9 KB) TX bytes:4758 (4.7 KB)

lo Link encap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

docker已經自動建立了eth0的網絡卡,注意觀察ip地址和mac地址。不要退出容器,再執行如下檢視網橋的狀態

$ sudo brctl show
bridge name    bridge id           STP    enabled    interfaces
docker0    8000.0242ed943d02       no                veth95521e6

我們看到在interface中多了一個veth*的這樣一個介面。通過ifconfig命令同樣可以看到這個網路介面。

自定義docker0

  • 修改docker0預設分配的ip地址:
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0

修改完後,重啟docker服務 sudo service docker restart. 新執行的容器地址就變成了新的ip地址了。

  • 新增虛擬網橋
sudo brctl addbr br0
sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0

更改docker守護程序的啟動配置:

vim /etc/default/docker 中新增 DOCKER_OPS的值 -b=br0.

重啟docker服務即可。

二.Docker容器的互聯

用於測試的Docker映象 Dockerfile:

FROM ubuntu:14.04
RUN apt-get install -y ping
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y curl
EXPOSE 80
CMD /bin/bash

1.允許所有容器互聯

在同一宿主機下,docker的容器是通過虛擬網橋來進行連線的。那麼在預設情況下,在同一宿主機中執行的容器都是可以互相連線的。

--icc=true 預設

容器的ip地址實際上是一個不可靠的連線,因為它會隨著容器的啟動而改變。

--link

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]

CONTAINER_NAME: 需要連線的容器名字

ALIAS: 在容器中連線的代號

docker -run -it --link=container01:webtest nginx
ping webtest

檢視在容器中產生的哪些影響

$ env

檢視環境變數,可以看到大量以WEBTEST*開頭的環境變數,這些環境變數是在容器啟動時,由docker新增的。我們還可以檢視在/ect/host檔案,這裡添加了webtest的地址對映。當docker重啟啟動容器時 /ect/host所對應的ip地址發生了變化。也就是說,針對於指定了link選項的容器,在啟動時docker會自動修改ip地址和我們指定的別名之間的對映。環境變數也會做出相應的改變。

2.拒絕所有容器間互聯

Docker守護程序的啟動選項

--icc=false

修改vim /etc/default/docker,在末尾新增配置 DOCKER_OPTS="--icc=false"。

需要重啟docker的服務 sudo service docker restart.即使是link也ping不通。

3.允許特定容器間的連線

Docker守護程序的啟動選項

--icc=false --iptables=true

--link 在容器啟動時新增link

docker利用iptables中的機制,在icc=false時,阻斷所有的docker容器間的訪問,僅僅執行利用link選項配置的容器進行相互的訪問。

注: 如果出現ping不通的情況,可能為iptables的問題(DROP規則在docker之前了)。

sudo iptables -L -n    檢視iptables規則的情況
sudo iptables -F    清空iptables規則設定
sudo service docker restart 重新啟用docker的服務
sudo iptables -L -n 再來檢視iptables的設定,docker的規則鏈已經在第一位

重新啟動容器即可

三.Docker容器與外部網路的連線

  • ip_forward

    --ip-forward=true

sysctl net.ipv4.conf.all.forwarding

ip_forward本身是Linux系統中的一個變數,它的值決定了系統是否會轉發流量。在Docker守護程序的預設引數中也有ip_forward選項,預設值是true. 

  • iptables

iptables是與linux核心整合的包過濾防火牆系統,幾乎所有的linux發行版本都會包含iptables的功能。

每一個大的方塊中,就是iptables中的一個鏈(chain),每一個鏈實際上就是資料處理中的一個環節,而在每個環節中又包含了不同的操作。

  • 允許埠對映訪問
  • 限制IP訪問容器

實質都是通過iptables的規則來控制的。

相關推薦

Docker基礎學習-Docker容器網路連線

一.Docker容器的網路基礎 通過ifconfig檢視docker0的網路裝置,docker守護程序就是通過docker0為docker的容器提供網路連線的各種服務。 docker0是Linux虛擬網橋。 Linux虛擬網橋的特點: 可以設定IP地址 相當於擁

Docker基礎學習-Docker容器的跨主機連線

Docker網橋實現跨主機容器連線 docker網橋實現跨主機連線的網路拓撲圖如下: 在同一個docker主機中,docker容器通過虛擬網橋連線(docker0),如果將連線容器的網橋docker0也橋接到宿主機提供的網絡卡上,將docker0分配的IP地址和宿主機

Docker基礎學習-Docker容器

一,容器的基本操作 1,啟動容器: $ docker run IMAGE[COMMAND] [AEG...] IMAGE:指定容器執行的映象 COMMAND:指定執行的命令 ARG:執行的引數 例如: $ docker run ubuntu echo "Hell

Docker基礎學習-Docker的安裝和部署

一,在Windows中安裝 Docker 1,Docker的執行環境 (1)Linux容器技術 (2)作業系統級別的虛擬化 (3)依賴於Linux核心的Namespace和Cgroups 下面

docker學習—— docker儲存卷

參考:https://www.imooc.com/article/26316 Docker映象由多個只讀層疊加而成,啟動容器時,Docker會載入只讀映象層並在映象棧頂部新增一個讀寫層 如果執行中的容器修改了一個現有的一個已存在的檔案,那該檔案將會從讀寫層下面的只讀層複製到讀寫層,該

Docker基礎學習-Dockerfile命令詳解超全版本

製作Dockerfile為Docker入門學習的第一步(當然,除了環境搭建)。 本文收集、整理了官網關於製作Dockerfile的全部命令(除SHELL沒整理,這個就不弄了),可幫助大家快速進入Dockfile製作的學習。 以下為正文,下面進入學習姿勢吧!

Java基礎學習 網絡編程簡介

exc 個數 intern 時間 能夠 兩臺 接受 void connect 基礎知識:1、osi分層模型和TCP/IP分層模型對應關系 2、七層模型與協議的對應關系 網絡層 ------------ IP(網絡之間的互聯協議) 傳

linux菜鳥基礎學習 網絡

ice ping 9.1 del system fff 設定 ane sco linux下的網絡配置 1.什麽是IP ADDRESS internet protocol ADDRESS ##網絡協議地址 ipv4 internet protocol ver

linux菜鳥基礎學習 網路

linux下的網路配置 1.什麼是IP ADDRESS internet protocol ADDRESS ##網路協議地址 ipv4 internet protocol version 4 1.2x32 ip是由32個0和1組成 11111110.1111111

JavaWeb基礎學習--過濾器Filter

過濾器(Filter) Filter 的基本功能是對 Servlet 容器呼叫 Servlet 的過程進行攔截,從而在 Servlet 進行響應處理的前後實現一些特殊的功能。 在 Servlet API 中定義了三個介面供開發人員編寫 Filter 程式:Filter

python基礎學習函式基礎

函式的基本使用 函式的定義 def 函式名(): 函式封裝的程式碼 …… def 是英文 define 的縮寫 函式名稱 應該能夠表達 函式封裝程式碼 的功能,方便後續的呼叫 函式名稱 的命名應該 符合 識別符號的命名規則 可以由 字母、下劃線 和

docker基礎學習進入與退出docker容器--圖文結合

今天開始學習docker容器技術。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面,更重要的是容器效能開銷極低。所以容器技術是很重要的一門技術。 首先我們要在

Docker學習: 網絡使用與配置

sock AR -i 回顧 覆蓋 htm 參考 ble dock 特別聲明:   博文主要是學習過程中的知識整理,以便之後的查閱回顧。部分內容來源於網絡(如有摘錄未標註請指出)。內容如有差錯,也歡迎指正! =============系列文章============= 1

Docker入門學習4----Dockerfile製作第一個映象和容器中的第一個javaweb應用

我們可以通過編寫Dockerfile來製作自己的映象,下面先動手來操作一下,製作一個映象,然後基於該映象執行一個容器,在容器裡執行我們自己的javaweb應用。 <1>拉取tomcat映象 docker pull tomcat 檢視映象: roo

docker學習——docker基礎技術概念入門

容器:  container 容器是啥?https://zh.wikipedia.org/wiki/%E5%AE%B9%E5%99%A8 LXC:Linux Container 虛擬化的常用技術實現形式: 1.主機級虛擬化 Type

docker學習——docker的基本概念及基礎使用

一張圖概括整篇文章內容: 來自:https://medium.com/@nagarwal/lifecycle-of-docker-container-d2da9f85959 lxc->libcontainer->runC OCI(Open Container I

docker學習—— docker容器網路

 ip netns管理網路名稱空間 檢視幫助: [[email protected] ~]# ip netns help Usage: ip netns list ip netns add NAME ip netns set

docker學習筆記——docker網路

docker網路主要分為兩塊——容器對外服務和容器內部服務 對外服務很好理解,比如我啟動了一個mysql的容器,然後讓別的機器可以連線到這個mysql,就是對外服務;容器內部服務很好理解,就是幾個容器之間的互相通訊。 1 容器對外服務 當容

Docker筆記容器管理

原文地址:http://blog.jboost.cn/2019/07/21/docker-6.html   容器是Docker中的另一核心概念,在Docker中,應用的執行都是在容器內進行的,容器則基於映象建立。前面已對Docker映象做了基本介紹,本文對Docker容器管理的相關內容做一個梳理

Docker學習Dockerfile構建自定義映象

Docker學習(六)Dockerfile構建自定義映象 前言 通過前面一篇文章可以知道怎麼去使用一個映象搭建服務,但是,如何構造自己的一個映象呢,docker提供了dockerfile可以讓我們自己構造一個屬於自己的映象 什麼是dockerfile 是一個包含用於組合映象的命令的文字文件 Docker