簡述docker容器、docker鏡像和網絡

一、Docker容器概述

1、docker中的容器技術演進

lxc --> libcontainer --> runC

2、容器的遵循協議規範Open Container Initiative

  • Linux基金會於2015年6月成立OCI(Open Container Initiative)組織,旨在圍繞容器格式和運行時制定一個開放的工業化標準。OCI規範包含兩個規格運行規範(runtime-spec)和形象規範(image-spec);

  • OCI定義了容器運行時標準,runC是Docker按照開放容器格式標準(OCF, Open Container Format)制定的一種具體實現。

  • runC是從Docker的libcontainer中遷移而來的,實現了容器啟停、資源隔離等功能。Docker默認提供了docker-runc實現,事實上,通過containerd的封裝,可以在Docker Daemon啟動的時候指定runc的實現。

3、 Docker應用

  • Docker是一個開源的引擎,可以輕鬆的為任何應用創建一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集群和其他的基礎應用平臺。

Docker通常用於如下場景:

  • web應用的自動化打包和發佈;

  • 自動化測試和持續集成、發佈;

  • 在服務型環境中部署和調整數據庫或其他的後臺應用;

  • 從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

4、docker的核心組件

簡述docker容器、docker鏡像和網絡

image.png

(1)、Docker daemon

  • Docker 守護進程(dockerd)偵聽請求和Docker的API,管理Docker核心對象,如鏡像、容器、網絡、和卷。

(2)、 Docker client

  • Docker客戶端,命令使用DockerAPI。

(3)、Docker registries

  • Docker註冊鏡像庫保存了Docker鏡像。

  • Docker公共鏡像庫和Docker雲是公共註冊中心,任何人都可以使用,配置後的Docker鏡像都可以上傳到註冊鏡像庫。

  • 你可以創建和運行自己的私有Docker鏡像庫。

5、docker的依賴基礎環境

依賴的基礎環境

  • 處理器要求 64 bits CPU

  • 內核要求 Linux Kernel 3.10+

  • Linux Kernel cgroups and namespaces

  • 發行版要求 CentOS 7

  • docker使用的倉庫必須有“Extras”倉庫

簡述docker容器、docker鏡像和網絡

單機上的docker

6、docker的守護進程安裝和啟動

#查詢是否有extras倉庫[root@node-65 ~]# yum repolistLoaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.tuna.tsinghua.edu.cn
repo id repo name status
!base/7/x86_64 CentOS-7 - Base 10,019
!extras/7/x86_64 CentOS-7 - Extras 314!updates/7/x86_64 CentOS-7 - Updates 598repolist: 10,931#安裝docker[root@node-65 ~]# yum install docker -y#配置文件目錄[root@node-65 ~]# vim /etc/sysconfig/docker#啟動[root@node-65 ~]# systemctl start docker.service#默認docker監聽在本機,不能遠程[root@node-65 ~]# ls /var/run/docker/libcontainerd/containerd docker-containerd.pid docker-containerd.soc

7、docker容器的簡單運行

#在公共庫查詢一個鏡像[root@node-65 ~]# docker search busyboxINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/busybox Busybox base image. 1470 [OK]
docker.io docker.io/progrium/busybox 68 [OK]
docker.io docker.io/hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with ... 45 docker.io docker.io/radial/busyboxplus Full-chain, Internet enabled, busybox made... 21

下載一個鏡像

[root@node-65 ~]# docker pull docker.io/busyboxUsing default tag: latest
Trying to pull repository docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
b4a6e23922dd: Pull complete
Digest: sha256:8ccbac733d19c0dd4d70b4f0c1e12245b5fa3ad24758a11035ee505c629c0796
Status: Downloaded newer image for docker.io/busybox:latest

查詢本地鏡像

[root@node-65 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/busybox latest 758ec7f3a1ee 15 hours ago 1.15 MB

啟動容器方法

方法一,docker create
方法二,docker run
格式: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name string 容器名稱
--rm 容器停止立即刪除
-i 交互界面
--tty 容器啟動自動添加一個終端
--network string 自動創建網絡

docker安裝後會自動生成一個網橋,並啟動DHCP服務,為生成的容器服務,容器啟動後會自動獲取ip地址並連接此網橋。

[root@node-65 ~]# ifconfigdocker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:46:9a:3b:6d txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

使用下載鏡像啟動docker容器

[root@node-65 ~]# docker run --name bbox1 -it docker.io/busybox/ # / # ifconfig #已經獲取到IP地址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............
/ # exit #退出

查詢運行的容器

[root@node-65 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1984d2b64a2 docker.io/busybox "sh" 3 minutes ago Exited (0) 2 minutes ago bbox1

容器的刪除

[root@node-65 ~]# docker rm bbox1或者ID號

查詢docker版本

[root@node-65 ~]# docker versionClient: #客戶端信息
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-88.git07f3374.el7.centos.x86_64
Go version: go1.9.4
Git commit: 07f3374/1.13.1
Built: Fri Dec 7 16:13:51 2018
OS/Arch: linux/amd64Server: #服務端信息
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-88.git07f3374.el7.centos.x86_64
Go version: go1.9.4
Git commit: 07f3374/1.13.1
Built: Fri Dec 7 16:13:51 2018
OS/Arch: linux/amd64 Experimental: false

查詢docker信息

[root@node-65 ~]# docker info

二、Docker容器應用

1、Docker組件:

物理組件有:客戶端Client 守護進程Daemon 鏡像庫Registry Server

邏輯組件有:Containers容器,Images鏡像、映像,Registry鏡像庫

2、常用的容器的相關命令

doker官方操作文檔:https://docs.docker.com/engine/reference/commandline/docker/

  • 容器的運行狀態

created:創建
runing:運行
paused:暫停
stopped:停止
deleted:刪除

  • docker容器命令

docker ps : 查詢運行的容器
docker run:創建並運行一個容器;
docker create:創建一個容器;
docker start:啟動一個處於停止狀態容器;
docker kill : 停止容器進程
docker stop:停止容器
docker restart:重啟重啟
docker pause:暫停容器
docker unpause:繼續運行容器
docker rm :刪除容器
docker run --rm:運行結束後自動刪除容器

  • 查看docker相關的信息命令:

docker version :查看版本

docker info :查看信息

  • 鏡像相關命令:

docker images 查詢
docker rm 刪除鏡像
docker pull 拉取鏡像

簡述docker容器、docker鏡像和網絡

docker命令流程

3、容器命令應用:

  • 創建容器是基於“鏡像文件”,鏡像文件中必須有默認要運行的程序,創建方法是聯合掛載分層鏡像;

注意:

  • 運行的容器內部必須有一個工作前臺的運行的進程;

  • docker的容器的通常也是僅為運行一個程序;

  • 要想在容器內運行多個程序,一般需要提供一個管控程序,例如supervised。

創建容器命令:

docker run
docker create
--name CT_NAME
--rm:容器運行終止即自行刪除
--network BRIDGE:讓容器加入的網絡;
默認為docker0;

交互式啟動一個容器:

-i:--interactive,交互式;
-t:Allocate a pseudo-TTY

從終端拆除容器:

ctrl+p, ctrl+q

附加至某運行狀態的容器的終端設備;

docker attach

讓運行中的容器運行一個額外的程序;

docker exec

查看容器內部程序運行時輸出到終端的信息;

[root@node-65 ~]# docker logs bbox1

查看運行的容器

docker ps -a
-a, --all:列出所有容器;
--filter, -f:過濾器條件顯示
name=XXXXXX
status={stopped|running|paused} #某種狀態的容器

動態方式顯示容器的資源佔用狀態:

[root@node-65 ~]# docker stats bbox1CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
bbox1 -- -- / -- -- -- -- --

顯示正在運行的流程的一個容器

[root@node-65 ~]# docker top bbox1

三、Docker的鏡像

簡述docker容器、docker鏡像和網絡

Docker的鏡像

1、概述和命令

  • Docker鏡像(Image):可理解為一個面向Docker引擎的只讀模板,包含了文件系統。如:一個鏡像可以只包含一個完整的操作系統環境,也可以安裝了其他的應用程序。通過版本管理和增量的文件系統,Docker提供了一套十分簡單的機制來創建和更新現有的鏡像。

  • 可見的字段信息:來源於哪一個倉庫、鏡像的標籤信息、鏡像的ID(唯一標識了鏡像)、創建的時間、鏡像的大小。

獲取鏡像:

docker pull; 命令格式為:docker pull NAME[:TAG], TAG是版本號。默認是latest最新版本。

查看鏡像信息:

docker images (查看本地主機上已有的鏡像)

為本地鏡像添加新的標籤:

docker tag(鏡像的指向一致,因為不同標籤的鏡像ID是完全一致的,只是別名不同)

獲取鏡像的詳細信息:

docker inspect, 返回的是JSON格式的消息,可以使用-f參數指定其中的一項內容(docker inspect -f {{“要查看的內容”}}) 鏡像ID,可以使用若干個字符組成的可區分字串來代替完整的ID。

搜索鏡像:

docker search。可以搜索遠端倉庫中共享的鏡像,默認搜索Docker Hub官方倉庫中的鏡像。用法為dockersearch TERM,包括的參數有鏡像的名字、描述、星級(鏡像受歡迎程度)、是否官方支持、是否自動創建。默認的輸出結果將按照星級評價進行排序。

刪除鏡像:

docker rmi IMAGE[IMAGE...], 其中IMAGE可以為標籤或ID。當同一個鏡像擁有多個標籤的時候,docker rmi命令只是刪除了該鏡像多個標籤中的指定標籤,並不影響鏡像文件。但當鏡像只剩下一個標籤的時候,再使用docker rmi命令會徹底刪除該鏡像,會刪除這個鏡像文件的所有AUFS層。

2、Docker Hub使用:

  • 使用docker最簡單的方式莫過於從現有的容器鏡像開始。Docker官方網站專門有一個頁面來存儲所有可用的鏡像,網址是:http://index.docker.io/你可以通過瀏覽這個網頁來查找你想要使用的鏡像,或者使用命令行的工具來檢索。


    簡述docker容器、docker鏡像和網絡

    Docker Hub

  • 首先到Docker Hub官方網站https://hub.docker.com/註冊用戶

docker login登錄docker hub

docker logout註銷登出docker hub

[root@node-65 ~]# docker login -u 用戶名#顯示docker hub上的鏡像[root@node-65 ~]# docker images

  • docker push 上傳到docker hub

  • #給指定的鏡像添加標籤[root@node-65 ~]# docker tag docker.io/busybox;latest docker.io/用戶名/bbox:v0.1.0#上傳鏡像到docker hub[root@node-65 ~]# docker push docker.io/用戶名/bbox:v0.1.0#顯示docker hub上的鏡像[root@node-65 ~]# docker images


docker pull 下載docker hub上的鏡像,如果是私有的需要登錄才可下載,公共的不需要登錄

[root@node-65 ~]# docker docker.io/用戶名/bbox:v.0.1.0#顯示docker hub上的鏡像[root@node-65 ~]# docker images

四、docker的卷

Docker Data Volume

  • Docker鏡像由多個只讀層疊加而成,啟動容器時,Docker會加
    載只讀鏡像層並在鏡像棧頂部添加一個讀寫層

  • 如果運行中的容器修改了現有的一個已經存在的文件,那該文
    件將會從讀寫層下面的只讀層複製到讀寫層,該文件的只讀版
    本仍然存在,只是已經被讀寫層中該文件的副本所隱藏,此即“寫時複製(COW)”機制

    簡述docker容器、docker鏡像和網絡

    可讀寫層

  • 關閉並重啟容器,其數據不受影響;但刪除Docker容器,則其更改將會全部丟失

1、 存在的問題

  • 存儲於聯合文件系統中,不易於宿主機訪問;

  • 容器間數據共享不便

  • 刪除容器其數據會丟失

2、 解決方案:“卷(volume)”

  • “卷”是容器上的一個或多個“目錄”,此類目錄可繞過聯合文件系統,與宿主機上的某目錄“綁定(關聯)”

    簡述docker容器、docker鏡像和網絡

    容器目錄綁定宿主機目錄

3、掛載卷分類

(1)docker自行掛載卷

  • 容器啟動後,docker會自動在宿主機上生成對應目錄,修改容器內部文件,只需修改宿主機上對應文件即可。

  • 有卷管理的docker,容器關閉後,在宿主機自動生成的卷也會自動刪除。

  • #啟動一個容器,創建一個可讀寫目錄[root@node-65 ~]# docker run --name h1 --rm -v /data/html -it docker.io/busybox/ # cd /data/html/data/html # vi index.html #編輯

    H1 Container

    #回到宿主機上,docker會自動在宿主機上創建對應的卷#列出當前所有的卷[root@node-65 ]# docker volume listDRIVER VOLUME NAMElocal c927500bb873a851e37cb8af94663252ea039a296e296a1f586defa9da674944#查看對應卷內容[root@node-65 ~]# cat /var/lib/docker/volumes/c927500bb873a851e37cb8af94663252ea039a296e296a1f586defa9da674944/_data/index.html

    H1 Container

    #與容器內部的內容一致 #探測卷的信息[root@node-65 ~]# docker inspect -f "{{.Mounts}}" h1[{volume c927500bb873a851e37cb8af94663252ea039a296e296a1f586defa9da674944 /var/lib/docker/volumes/c927500bb873a851e37cb8af94663252ea039a296e296a1f586defa9da674944/_data /data/html local true }]

(2)用戶指定的掛載卷

#在宿主機上創建卷[root@node-65 ~]# mkdir /appdata/html -pvmkdir: created directory ‘/appdata’


mkdir: created directory ‘/appdata/html’#編輯內容[root@node-65 ~]# vim /appdata/html/index.html

Test Page


~

#指定容器內部目錄和宿主機對應的卷,並啟動容器[root@node-65 ~]# docker run --name h2 -d -it -v /appdata/html:/data/html docker.io/hehe/bbox:v0.1.1-httpd #測試
[root@node-65 ~]# curl http://172.17.0.2

Test Page



4、刪除卷

  • 刪除容器之時刪除相關的卷
    為docker rm命令使用-v選項

  • 刪除指定的卷
    docker volume rm

  • [root@node-65 ~]# docker kill h2h2#刪除容器時,-v 同時刪除宿主機上的卷[root@node-65 ~]# docker rm -v h2h2


5、多個容器的卷使用同一個主機目錄

  • 例如

    簡述docker容器、docker鏡像和網絡

    多個容器的卷使用同一個主機目錄

  • ~]# docker run –it --name c1 -v /docker/volumes/v1:/data busybox


  • ~]# docker run –it --name c2 -v /docker/volumes/v1:/data busybox


6、複製使用其它容器的卷

  • 為docker run命令使用--volumes-from選項

    簡述docker容器、docker鏡像和網絡

    卷模板

  • ~]# docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox


  • ~]# docker run -it --name bbox2 --volumes-from bbox1 busybox


五、Docker容器的網絡

1、橋接Bridge類型

  • lsolated:隔離橋接,僅容器間網絡通信

  • Host-only:僅主機橋接,宿主機和各個容器網絡通信

  • NAT:地址轉換橋接,容器有內網地址,通過宿主機核心轉發,與外網主機網絡通信

  • Phy Bridged:物理橋接,使容器與物理網卡同一網絡地址的,與外網網絡通信

    簡述docker容器、docker鏡像和網絡

    docker容器網絡類型

2、Docker網橋類型

Docker安裝完成後,會自動創建三個網絡,可使用“dockernetwork ls”命令查看

bridge 橋接式網絡
host 開放式網絡
none 封閉式網絡

3、Docker網橋創建命令

  • 創建容器時,可為docker run命令使用--net選項指定要加入的網絡

(1) none 封閉式網絡

~]# docker run --rm --net none busybox:latest ifconfig -a

(2) bridge 橋接式網絡

  • 橋接式容器一般擁有兩個接口:一個環回接口和一個連接至主
    機上某橋設備的以太網接口

  • docker daemon啟動時默認會創建一個名為docker0的網絡橋,並且創建的容器為橋接式容器,其以太網接口橋接至docker0

  • --net bridge即為將容器接口添加至docker0橋

  • docker0橋為NAT橋,因此,橋接式容器可通過此橋接口訪問外部網絡,但防火牆規則阻止了一切從外部網絡訪問橋接式容器的請求

  • ~]# docker run --rm --net bridge busybox:latest ifconfig -a


配合docker run命令使用網絡選項

  • “--hostname HOSTNAME”選項為容器指定主機名

  • “--dns DNS_SERVER_IP”選項能夠為容器指定所使用的dns服務
    器地址

  • “--add-host HOSTNAME:IP”選項能夠為容器指定本地主機名解
    析項

  • [root@node-65 ~]# docker run --name bbox1 --rm --net bridge -it --hostname bbox1.hehe.com --dns 192.167.1.1 --add-host www.hehe.com:192.167.0.1 busybox / # cat /etc/hosts #主機名稱127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopback


  • fe00::0 ip6-localnet


  • ff00::0 ip6-mcastprefix


  • ff02::1 ip6-allnodes


  • ff02::2 ip6-allrouters192.167.0.1 www.hehe.com172.17.0.2 bbox1.hehe.com


  • / # cat /etc/resolv.conf #查詢dns解析nameserver 192.167.1.1/ # hostname #查詢主機名bbox1.hehe.com


(3)聯盟式橋接

  • 聯盟式容器是指使用某個已存在容器的網絡接口的容器,接口被聯盟內的各容器共享使用;因此,聯盟式容器彼此間完全無隔離

  • 例如

  • # 創建一個監聽於2222端口的http服務容器


  • ~]# docker run -d -it --rm -p 2222 busybox:latest /bin/httpd -p 2222 -f# 創建一個聯盟式容器,並查看其監聽的端口


  • ~]# docker run -it --rm --net container:web --name joined busybox:latestnetstat -tan


  • 聯盟式容器彼此間雖然共享同一個網絡名稱空間,但其它名稱空間
    如User、Mount等還是隔離的

  • 聯盟式容器彼此間存在端口衝突的可能性,因此,通常只會在多個容器上的程序需要程序loopback接口互相通信、或對某已存的容器的網絡屬性進行監控時才使用此種模式的網絡模型

(4) host 開放式網絡

  • 開放式容器共享主機網絡名稱空間的容器,它們對主機的網絡名稱空間擁有全部的訪問權限,包括訪問那些關鍵性服務,這對宿主機安全性有很大潛在威脅

  • 為docker run命令使用“--net host”選項即可創建開放式容器,


    例如:

  • ~]# docker run -it --rm --net host busybox:latest /bin/s


4、容器的端口暴露

  • 將指定的容器端口映射至主機所有地址的一個動態端口
    -p <hostport>:<containerport>/<hostport>

  • #將容器的80端口映射到宿主機的隨機端口[root@node-65 ~]# docker run --name h1 --rm --net bridge -d -p 80 docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html#查詢映射到那個隨機端口[root@node-65 ~]# docker port h180/tcp -> 0.0.0.0:32769#測試訪問[root@node-65 ~]# curl 192.168.1.65:32769

    BUSY BOX SERVER


  • 將容器端口<containerport>映射至指定的主機端口<hostport>
    -p ::<containerport>/<hostport>/<containerport>

  • #指明容器的80端口映射到宿主機的90端口[root@node-65 ~]# docker run --name h1 --rm --net bridge -d -p 90:80 docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html#查詢端口映射[root@node-65 ~]# docker port h180/tcp -> 0.0.0.0:90#測試[root@node-65 ~]# curl 192.168.1.65:90

    BUSY BOX SERVER


  • 將指定的容器端口<containerport>映射至主機指定的動態端口
    -p :<hostport>:<containerport>/<hostport>
    /<containerport>

  • #指定容器80端口映射到宿主機的指定ip的隨機端口[root@node-65 ~]# docker run --name h1 --rm --net bridge -d -p 192.168.1.65::80 docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html#查詢端口映射[root@node-65 ~]# docker port h180/tcp -> 192.168.1.65:32768#測試[root@node-65 ~]# curl 192.168.1.65:32768

    BUSY BOX SERVER


  • 將指定的容器端口<containerport>映射至主機指定的端口<hostport>/<containerport>

  • #指定容器的80端口映射到宿主機的指定ip的90端口[root@node-65 ~]# docker run --name h1 --rm --net bridge -d -p 192.168.1.65:90:80 docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html#查詢映射端口[root@node-65 ~]# docker port h180/tcp -> 192.168.1.65:90#測試[root@node-65 ~]# curl 192.168.1.65:90

    BUSY BOX SERVER


多端口暴露一

[root@node-65 ~]# docker run --name h1 --rm --net bridge -d -p 192.168.1.65:90:80 -p 8090:8080 -p 10080:10080 docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html#查詢映射端口[root@node-65 ~]# docker port h110080/tcp -> 0.0.0.0:1008080/tcp -> 192.168.1.65:908080/tcp -> 0.0.0.0:8090

多端口暴露二

  • 使用“-P”選項或“--publish-all”將容器的所有計劃要暴露端口全部映射至主機端口

  • 計劃要暴露的端口使用使用--expose選項指定

  • 例如:

  • [root@node-65 ~]# docker run --name h3 --rm --net bridge -d -P --expose 2222 --expose 3333 docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html#查詢映射端口[root@node-65 ~]# docker port h32222/tcp -> 0.0.0.0:327723333/tcp -> 0.0.0.0:32771


  • “動態端口”指隨機端口,具體的映射結果可使用docker port命令查看

5、docker默認網絡配置

  • 如果不想使用默認的docker0橋接口,或者需要修改此橋接口
    的網絡屬性,可通過為docker daemon命令使用-b、--bip、--
    fixed-cidr、--default-gateway、--dns以及--mtu等選項進行設定

  • #修改默認啟動容器的網絡配置[root@node-65 ~]# vim /etc/sysconfig/docker-network # /etc/sysconfig/docker-networkDOCKER_NETWORK_OPTIONS="添加--b、--dns、--bip等選項"


6、自定義網橋

docker創建一個新網橋

[root@node-65 ~]# docker network create -d bridge --subnet=172.16.0.0/16 --ip-range=172.16.0.0/16 --gateway=172.16.0.254 mybr06f3b263dfd24f2184209a7884a44caf151c3ed934eed7200ed0d491ae1c8f214#查詢docker網絡[root@node-65 ~]# docker network lsNETWORK ID NAME DRIVER SCOPE
..........6f3b263dfd24 mybr0 bridge local
...........

--subnet:指明子網
--driver:指明設備
--ip-range:容器加入時獲取的地址範圍
--gateway:指明網關

創建容器使用mybr0網橋

[root@node-65 ~]# docker run --name h2 --rm -it --net mybr0 -v /appdata/html:/data/html docker.io/hehe/bbox:v0.1.1-httpd / # ifconfigeth0 Link encap:Ethernet HWaddr 02:42:AC:10:00:01
inet addr:172.16.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 #以獲取ip地址

給運行的容器添加網橋

[root@node-65 ~]# docker network connect bridge h2#在容器內部查詢網絡/ # ifconfigeth0 Link encap:Ethernet HWaddr 02:42:AC:10:00:01
inet addr:172.16.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 #連接指定的mybr0網橋
.........
eth1 Link encap:Ethernet HWaddr 02:42:AC:11:00:03
inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0 #多出來一個設備連接默認docker的網橋.............

給運行的容器撤銷網橋

[root@node-65 ~]# docker network disconnect bridge h2#在容器內部查詢網絡/ # ifconfigeth0 Link encap:Ethernet HWaddr 02:42:AC:10:00:01
inet addr:172.16.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 #只剩下一個網橋了

7、docker的疊加網絡

$ docker network create -d overlay \\
--subnet=192.168.1.0/25 \\
--subnet=192.170.2.0/25 \\
--gateway=192.168.1.100 \\
--gateway=192.170.2.100 \\
--aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \\
--aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \\
my-multihost-network

--aux-address:輔助網絡地址


分享到:


相關文章: