簡述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的核心組件

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

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

#查詢是否有extras倉庫
[root@node-65 ~]# yum repolist
Loaded 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                598
repolist: 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 busybox
INDEX       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/busybox
Using 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 images
REPOSITORY          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 ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  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 -a
CONTAINER 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 version
Client:       #客戶端信息
 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/amd64

Server:        #服務端信息
 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命令流程

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 bbox1

CONTAINER           CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
bbox1               --                  -- / --             --                  --                  --                  --

顯示正在運行的流程的一個容器
[root@node-65 ~]# docker top bbox1

三、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 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容器,則其更改將會全部丟失

1、 存在的問題

  • 存儲于聯合文件系統中,不易于宿主機訪問;
  • 容器間數據共享不便
  • 刪除容器其數據會丟失

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

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


    容器目錄綁定宿主機目錄

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>H1 Container</h1>

#回到宿主機上,docker會自動在宿主機上創建對應的卷

#列出當前所有的卷
[root@node-65 ]# docker volume list
DRIVER              VOLUME NAME
local               c927500bb873a851e37cb8af94663252ea039a296e296a1f586defa9da674944

#查看對應卷內容
[root@node-65 ~]# cat /var/lib/docker/volumes/c927500bb873a851e37cb8af94663252ea039a296e296a1f586defa9da674944/_data/index.html 
<h1>H1 Container</h1>   #與容器內部的內容一致  

#探測卷的信息
[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 -pv
mkdir: created directory ‘/appdata’
mkdir: created directory ‘/appdata/html’

#編輯內容
[root@node-65 ~]# vim /appdata/html/index.html
<h1> Test Page </h1>
~  

#指定容器內部目錄和宿主機對應的卷,并啟動容器
[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
 <h1> Test Page </h1>           

4、刪除卷

  • 刪除容器之時刪除相關的卷
    為docker rm命令使用-v選項
  • 刪除指定的卷
    docker volume rm
[root@node-65 ~]# docker kill h2
h2

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

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

  • 例如


    多個容器的卷使用同一個主機目錄
 ~]# 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 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容器網絡類型

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-allrouters
192.167.0.1 www.hehe.com
172.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:latest
netstat -tan
  • 聯盟式容器彼此間雖然共享同一個網絡名稱空間,但其它名稱空間
    如User、Mount等還是隔離的
  • 聯盟式容器彼此間存在端口沖突的可能性,因此,通常只會在多個容器上的程序需要程序loopback接口互相通信、或對某已存的容器的網絡屬性進行監控時才使用此種模式的網絡模型
(4) host 開放式網絡
  • 開放式容器共享主機網絡名稱空間的容器,它們對主機的網絡名稱空間擁有全部的訪問權限,包括訪問那些關鍵性服務,這對宿主機安全性有很大潛在威脅
  • 為docker run命令使用“--net host”選項即可創建開放式容器,
    例如:
 ~]# docker run -it --rm --net host busybox:latest /bin/s

4、容器的端口暴露

  • 將指定的容器端口映射至主機所有地址的一個動態端口
    -p <hostPort>:<containerPort>
#將容器的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 h1
80/tcp -> 0.0.0.0:32769

#測試訪問
[root@node-65 ~]# curl 192.168.1.65:32769
<h1>BUSY BOX SERVER<h1>

  • 將容器端口<containerPort>映射至指定的主機端口<hostPort>
    -p <ip>::<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 h1
80/tcp -> 0.0.0.0:90

#測試
[root@node-65 ~]# curl 192.168.1.65:90
<h1>BUSY BOX SERVER<h1>


  • 將指定的容器端口<containerPort>映射至主機指定<ip>的動態端口
    -p <ip>:<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 h1
80/tcp -> 192.168.1.65:32768

#測試
[root@node-65 ~]# curl 192.168.1.65:32768
<h1>BUSY BOX SERVER<h1>

  • 將指定的容器端口<containerPort>映射至主機指定<ip>的端口<hostPort>
#指定容器的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 h1
80/tcp -> 192.168.1.65:90

#測試
[root@node-65 ~]# curl 192.168.1.65:90
<h1>BUSY BOX SERVER<h1>

多端口暴露一
[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 h1
10080/tcp -> 0.0.0.0:10080
80/tcp -> 192.168.1.65:90
8080/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 h3
2222/tcp -> 0.0.0.0:32772
3333/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-network
DOCKER_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 mybr0
6f3b263dfd24f2184209a7884a44caf151c3ed934eed7200ed0d491ae1c8f214

#查詢docker網絡
[root@node-65 ~]# docker network ls
NETWORK 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 
/ # ifconfig
eth0      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


#在容器內部查詢網絡
/ # ifconfig
eth0      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

#在容器內部查詢網絡
/ # ifconfig
eth0      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:輔助網絡地址

參考鏈接:https://docs.docker.com/engine/reference/commandline/docker/
https://www.douban.com/note/527688389/
https://blog.csdn.net/qq_27211267/article/details/81160706

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容

  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,520評論 0 120
  • 本文是篇翻譯。原文:https://docs.docker.com/engine/userguide/networ...
    周立_itmuch閱讀 905評論 0 4
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統的并且容器的端口非本地主機是訪問不到的。此外,除了...
    R_X閱讀 1,773評論 0 7
  • Docker — 云時代的程序分發方式 要說最近一年云計算業界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,562評論 15 147
  • 人世紛華,滿眼是沙,物欲縱橫的時代,如何才能保持自我?樹欲靜而風不止,子欲養而親不待,燈紅酒綠、金錢美女、香車豪宅...
    愜意永不放棄閱讀 398評論 0 0