成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

初學Docker容器網(wǎng)絡(luò)不得不看的學習筆記

fanux / 3022人閱讀

摘要:容器通過獲取一個與同網(wǎng)段的地址,并默認連接到網(wǎng)橋,并將的地址作為網(wǎng)關(guān)實現(xiàn)容器與宿主機的網(wǎng)絡(luò)互通,另外,同一個宿主機下同樣使用模式的容器可以直接通訊。

【技術(shù)沙龍002期】數(shù)據(jù)中臺:宜信敏捷數(shù)據(jù)中臺建設(shè)實踐|宜信技術(shù)沙龍 將于5月23日晚8點線上直播,點擊報名

一、關(guān)于Docker

Docker 是一個開源的應(yīng)用容器引擎,基于 Go 語言 并遵從Apache2.0協(xié)議開源。

Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

因為對比傳統(tǒng)虛擬機有啟動快、性能提升、運維成本等等絕對優(yōu)勢,越來越受開發(fā)運維童鞋的青睞。

二、關(guān)于Docker網(wǎng)絡(luò)模式分類

1、bridge模式,--net=bridge(默認)

2、host模式,--net=host

3、container模式 使用–net =container:指定容器名

4、none模式,--net=none

5、用戶自定義模式

三、關(guān)于Docker網(wǎng)絡(luò)模式詳解 3.1 bridge模式

Docker網(wǎng)絡(luò)的默認模式,在docker run啟動容器的時候,如果不加--net參數(shù),就默認采用這種網(wǎng)絡(luò)模式。安裝完docker,系統(tǒng)會自動添加一個供docker使用的網(wǎng)橋docker0。容器通過DHCP獲取一個與docker0同網(wǎng)段的IP地址,并默認連接到docker0網(wǎng)橋,并將docker0的IP地址作為網(wǎng)關(guān)實現(xiàn)容器與宿主機的網(wǎng)絡(luò)互通,另外,同一個宿主機下同樣使用bridge模式的容器可以直接通訊。

實驗部分

環(huán)境:VMware 安裝Centos7虛擬機。

首先在Centos虛擬機中安裝容器

yum -y install docker-io  ####安裝docker

啟動容器服務(wù)并檢查啟動狀態(tài)systemctl start docker

啟動docker服務(wù)后會發(fā)現(xiàn)主機多了一個docker0網(wǎng)卡
(PS:目前本機是通過192.168.32.129這個地址可以直接上網(wǎng)的)。

我們啟動一個Centos的容器并進入bash,由于我們沒有本地沒有centos的鏡像文件,默認就直接從Docker的官網(wǎng)鏡像倉庫下載。

[root@cesrc ~]# docker run -itd centos /bin/bash

查看啟動的容器

[root@cesrc ~]# docker ps –a

進入容器里面,查看IP配置。

[root@cesrc ~]# docker attach b670

默認沒有ifconfig命令,yum安裝下net-tools

yum install net-tools

查看容器的ip和路由配置,容器分到了與docker0同段地址并將默認路由指向docker0

此容器可以直接上網(wǎng)

iptables -t nat –vnL,查看docker生成的iptables,可以看出相當于docker0對容器做了SNAT,

再啟動一個容器

docker run -itd --name centos2 centos /bin/bash

此主機上的容器間可以直接通訊

此模式的網(wǎng)絡(luò)工作模式如下圖所示

3.2 host模式

容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是直接使用宿主機的IP和端口,但是文件系統(tǒng)是和宿主機隔離的

docker run -itd --net=host --name host-rq centos /bin/bash

進入容器

容器的進程如下,是和宿主機獨立。

3.3 Container模式

此模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個 Network,和已有指定的容器出了網(wǎng)絡(luò)方面其他都是獨立的。

創(chuàng)建原始的一個容器s-centos

[root@cesrc ~]# docker run -itd --name s-centos centos /bin/bash

be7425c3fac6845c9d8d150f9b8c710f9268611fa3a6d86d59444ea1e4bfe415

創(chuàng)建新容器d-centos并使用原有容器的網(wǎng)絡(luò)

[root@cesrc ~]# docker run -itd --net=container:s-centos --name d-centos centos /bin/bash

d576e3009391111688004f57c1549572fd534d33d0e7ee7cc1e02a785f6c8c14

分別進入容器內(nèi)部,查看IP配置和文件系統(tǒng)是否獨立

S-centos

D-centos

3.4 None模式

此模式下創(chuàng)建的不會創(chuàng)建網(wǎng)絡(luò),容器里面就不會有ip容器中只有l(wèi)o,用戶可以在此基礎(chǔ)上,對容器網(wǎng)絡(luò)做定制,若想使用pipework手工配置指定docker容器的ip地址,必須要在none模式下才可以

docker run -itd --net=none --name n-centos centos /bin/bash

None模式下生成的容器必須經(jīng)過手工配置后才可以上網(wǎng)。

3.5 用戶自定義模式

用戶自定義模式主要可選的有三種網(wǎng)絡(luò)驅(qū)動:bridge、overlay、macvlan。bridge驅(qū)動用于創(chuàng)建類似于前面提到的bridge網(wǎng)絡(luò);overlay和macvlan驅(qū)動用于創(chuàng)建跨主機的網(wǎng)絡(luò),本例中我們使用Flannel和etcd使用overlay技術(shù)實現(xiàn)docker跨物理機通信。

Flannel實現(xiàn)的容器的跨主機通信通過如下過程實現(xiàn):

在etcd中規(guī)劃配置所有主機的docker0子網(wǎng)范圍;每個主機上的flanneld根據(jù)etcd中的配置,為本主機的docker0分配子網(wǎng),保證所有主機上的docker0網(wǎng)段不重復(fù),并將結(jié)果(即本主機上的docker0子網(wǎng)信息和本主機IP的對應(yīng)關(guān)系)存入etcd庫中,這樣etcd庫中就保存了所有主機上的docker子網(wǎng)信息和本主機IP的對應(yīng)關(guān)系;當需要與其他主機上的容器進行通信時,查找etcd數(shù)據(jù)庫,找到目的容器的子網(wǎng)所對應(yīng)的outip(目的宿主機的IP),將原始數(shù)據(jù)包封裝在VXLAN或UDP數(shù)據(jù)包中,IP層以outip為目的IP進行封裝;由于目的IP是宿主機IP,因此路由是可達的,VXLAN或UDP數(shù)據(jù)包到達目的宿主機解封裝,解出原始數(shù)據(jù)包,最終到達目的容器。

(圖片摘自網(wǎng)絡(luò))

實驗規(guī)劃

Node1節(jié)點安裝etcd步驟如下

1、安裝etcd程序

yum install -y etcd

2、修改etcd配置文件,配置文件在/etc/etcd/etcd.conf,本實驗etcd單機部署,群集配置部分沒有做嚴格更改。配置如下:

#[Member]

#ETCD_CORS=""

ETCD_DATA_DIR="/var/lib/etcd/host129.etcd"  #etcd數(shù)據(jù)保存目錄

#ETCD_WAL_DIR=""

#ETCD_LISTEN_PEER_URLS=http://192.168.32.129:2380  #集群內(nèi)部通信使用的URL

ETCD_LISTEN_CLIENT_URLS=http://127.0.0.1:2379,http://192.168.32.129:2379    #供外部客戶端使用的URL

#ETCD_MAX_SNAPSHOTS="5"

#ETCD_MAX_WALS="5"

ETCD_NAME="host129"    #etcd實例名稱

3、設(shè)置后期分給docker容器的網(wǎng)段

etcdctl mk /network/config "{"Network":"172.18.0.0/16", "SubnetMin": "172.18.1.0", "SubnetMax": "172.18.254.0"}"

4、設(shè)置開機啟動etcd服務(wù)并啟動該服務(wù)

systemctl enable etcd

systemctl start etcd
Node2節(jié)點安裝etcd步驟如下

1、安裝Docker和Flannel服務(wù)

yum install -y docker flannel

2、修改Flannel配置文件如下

Flanneld configuration options

# etcd url location.  Point this to the server where etcd runs

FLANNEL_ETCD_ENDPOINTS="http://192.168.32.129:2379" ##設(shè)置etcd地址和端口信息

# etcd config key.  This is the configuration key that flannel queries

# For address range assignment

FLANNEL_ETCD_PREFIX="/network"

# Any additional options that you want to pass

FLANNEL_OPTIONS="-iface=ens33"     ##設(shè)置Flannel與etcd通訊網(wǎng)卡

3、設(shè)置啟動參數(shù)

cd /usr/libexec/flannel/ 
./mk-docker-opts.sh –i

4、啟動Docker和Flannel服務(wù)

systemctl enable docker flanneld

systemctl start docker flannel

5、開啟宿主機轉(zhuǎn)發(fā)功能{一定要打開,很多網(wǎng)上教程都沒有提這個,造成無法聯(lián)通}

iptables -PFORWARD ACCEPT

6、創(chuàng)建容器并進入容器,查看IP

docker run -itd centos /bin/bash

docker ps –a

docker attach 6c

在Node2節(jié)點上的操作同樣在Node3執(zhí)行一遍,最終看到Node3的獲取的IP如圖:

測試容器

Node2和node3上的容器是可以互相訪問

宿主機上生成了到各個node的路由條目

上述方式可以實現(xiàn)跨主機的docker通訊,除此之外還有其他兩種方式:

在宿主機上添加到其他主機容器的靜態(tài)路由方式

橋接方式

這兩種方式都比較好理解,參考網(wǎng)絡(luò)摘抄的兩張圖片

原文鏈接:https://www.cnblogs.com/yy-cx...

靜態(tài)路由方法:

橋接方法:

四、關(guān)于Docker的常用概念和命令總結(jié) 4.1 Docker 鏡像

我們都知道,操作系統(tǒng)分為內(nèi)核和用戶空間。對于 Linux 而言,內(nèi)核啟動后,會掛載 root 文件系統(tǒng)為其提供用戶空間支持。而 Docker 鏡像(Image),就相當于是一個 root 文件系統(tǒng)。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系統(tǒng)的 root 文件系統(tǒng)。

4.2 Docker 容器

鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的 類 和 實例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。

4.3 Docker Registry

鏡像構(gòu)建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務(wù)器上使用這個鏡像,我們就需要一個集中的存儲、分發(fā)鏡像的服務(wù),Docker Registry 就是這樣的服務(wù)。

有公有,有私有。

鏡像管理命令

1) 獲取鏡像

從 Docker 鏡像倉庫獲取鏡像的命令是 docker pull。其命令格式為:

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標簽]

命令參考 docker pull ubuntu:16.04

不指定tag默認就是下載最新的

docker pull mirrors.aliyun.com:ubuntu 從阿里云倉庫

2) 列出鏡像

docker image ls

列表包含了 倉庫名、標簽、鏡像 ID、創(chuàng)建時間 以及 所占用的空間。

3) 刪除鏡像

docker rmi 鏡像Id 刪除鏡像文件

docker rmi -f 鏡像ID強制刪除鏡像

4) 容器管理

docker create 創(chuàng)建不啟動

docker start啟動容器

docker stop 容器名稱 終止容器

docker restart 容器名稱重啟容器

docker rm id 刪除容器

docker run -it centos /bin/sh 創(chuàng)建并啟動容器 exit后容器自動退出,若想以守護進程方式繼續(xù)運行,需要改為docker run -itd centos /bin/sh

docker ps 查看運行中的容器

docker ps –a 查看所有容器,包含停止的容器。

5) 進入容器

docker attch 名字進入容器

docker exec -it``` 容器```id command | docker exec -it 7813e41ec005 /bin/sh

6) 導(dǎo)出容器至文件

docker export -o test_for_run_tar 容器ID

docker export 容器ID >test_for_stop_tar

7) 導(dǎo)入文件變成鏡像

docker import test_for_run_tar - test/ubuntu:v1.0

8) 數(shù)據(jù)管理

a)數(shù)據(jù)卷是一個可供容器使用的特殊目錄,將操作系統(tǒng)的目錄映射到容器

docker run -d -P --name web -v /src/webapp:/opt/webapp centos /bin/sh

掛載主機的/src/webapp到容器的/opt/webapp目錄,默認可讀寫

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro centos /bin/sh

只讀模式

b)數(shù)據(jù)卷容器,可供其他容器共享使用的容器

先建立一個數(shù)據(jù)卷容器

root@localhost /]# docker run -it -v /cunchu --name chuchurongqi centos

[root@90bd63b06074 /]# ls

bin cunchu dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

[root@90bd63b06074 /]# cd cunchu/

[root@90bd63b06074 cunchu]# vi qiang.txt

新建一個其他容器,使用--volumes-from 數(shù)據(jù)卷容器名字實現(xiàn)掛載容器卷里面的數(shù)據(jù)卷。

[root@localhost /]# docker run -it --volumes-from chuchurongqi --name db2 centos

作者:網(wǎng)絡(luò)安全-王志強

原文首發(fā)于:宜信安全應(yīng)急響應(yīng)中心

來源:宜信技術(shù)學院

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27831.html

相關(guān)文章

  • Docker 筆記(1):介紹、鏡像、容器及其基本操作

    摘要:由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。鏡像實際是由多層文件系統(tǒng)聯(lián)合組成。容器可以被創(chuàng)建啟動停止刪除暫停等。容器的實質(zhì)是進程,但與直接在宿主執(zhí)行的進程不同,容器進程運行于屬于自己的獨立的命名空間。 Docker簡介 Docker 使用 Google 公司推出的 Go 語言 進行開發(fā)實現(xiàn),基于 Linux 內(nèi)核的 cgroup,namespace,以及 AUFS ...

    khs1994 評論0 收藏0
  • Docker宣布擁抱k8s,k8s將一統(tǒng)天下?

    摘要:官方于上宣布將在下一個企業(yè)版中支持。本次上毫無疑問地成為一個劃時代的里程碑,本次大會最大的新聞莫過于官方宣布支持。容器技術(shù)作為云計算發(fā)展的新階段正改變著服務(wù)交付的方式,更影響著云計算的未來。 Docker官方于DockerCon EU 2017上宣布將在下一個Docker企業(yè)版中支持Kubernetes。容器編排之戰(zhàn)似乎勝負已分,Kubernetes即將一統(tǒng)天下?容器市場下一步會如何發(fā)...

    王陸寬 評論0 收藏0
  • Docker宣布擁抱k8s,k8s將一統(tǒng)天下?

    摘要:官方于上宣布將在下一個企業(yè)版中支持。本次上毫無疑問地成為一個劃時代的里程碑,本次大會最大的新聞莫過于官方宣布支持。容器技術(shù)作為云計算發(fā)展的新階段正改變著服務(wù)交付的方式,更影響著云計算的未來。 Docker官方于DockerCon EU 2017上宣布將在下一個Docker企業(yè)版中支持Kubernetes。容器編排之戰(zhàn)似乎勝負已分,Kubernetes即將一統(tǒng)天下?容器市場下一步會如何發(fā)...

    Tonny 評論0 收藏0
  • 從零開始學習 Docker

    摘要:此命令下載測試鏡像并在容器中運行它。國內(nèi)很多云服務(wù)商都提供了加速器服務(wù),例如阿里云加速器注冊用戶并且申請加速器,會獲得如這樣的地址。獲取鏡像阿里云鏡像庫上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像并運行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 這篇文章是我學習 Docker 的記錄...

    lily_wang 評論0 收藏0

發(fā)表評論

0條評論

fanux

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<