<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    方槍槍的java世界

    不要因?yàn)轱L(fēng)雨飄落就停止了你的腳步,真正的得失就在你的心中。 做喜歡做的事,不輕言放棄!

    Docker學(xué)習(xí)筆記(七)鏈接容器

    九、鏈接容器

    docker 允許把多個(gè)容器連接在一起,相互交互信息。docker 鏈接會創(chuàng)建一種容器父子級別的關(guān)系,其中父容器可以看到其子容器提供的信息。

    9.1 容器命名

    在創(chuàng)建容器時(shí),如果不指定容器的名字,則默認(rèn)會自動創(chuàng)建一個(gè)名字,這里推薦給容器命名:

    • 1、給容器命名方便記憶,如命名運(yùn)行 web 應(yīng)用的容器為 web
    • 2、為 docker 容器提供一個(gè)參考,允許方便其他容器調(diào)用,如把容器 web 鏈接到容器 db

    可以通過--name選項(xiàng)給容器自定義命名:

    $ sudo docker run -d -t -i --name test ubuntu:14.04 bash              
    $ sudo docker  inspect --format="{{ .Nmae }}" test
    /test

    注:容器名稱必須唯一,即你只能命名一個(gè)叫test的容器。如果你想復(fù)用容器名,則必須在創(chuàng)建新的容器前通過docker rm刪除舊的容器或者創(chuàng)建容器時(shí)添加--rm選項(xiàng)。

    9.2 鏈接容器

    鏈接允許容器間安全通信,使用--link選項(xiàng)創(chuàng)建鏈接。

    $ sudo docker run -d --name db training/postgres

    基于 training/postgres 鏡像創(chuàng)建一個(gè)名為 db 的容器,然后下面創(chuàng)建一個(gè)叫做 web 的容器,并且將它與 db 相互連接在一起

    $ sudo docker run -d -P --name web --link db:db training/webapp python app.py

    --link <name or id>:alias選項(xiàng)指定鏈接到的容器。

    查看 web 容器的鏈接關(guān)系:

    $ sudo docker inspect -f "{{ .HostConfig.Links }}" web
    [/db:/web/db]

    可以看到 web 容器被鏈接到 db 容器為/web/db,這允許 web 容器訪問 db 容器的信息。

    容器之間的鏈接實(shí)際做了什么?一個(gè)鏈接允許一個(gè)源容器提供信息訪問給一個(gè)接收容器。在本例中,web 容器作為一個(gè)接收者,允許訪問源容器 db 的相關(guān)服務(wù)信息。Docker 創(chuàng)建了一個(gè)安全隧道而不需要對外公開任何端口給外部容器,因此不需要在創(chuàng)建容器的時(shí)候添加-p或-P指定對外公開的端口,這也是鏈接容器的最大好處,本例為 PostgreSQL 數(shù)據(jù)庫。

    Docker 主要通過以下兩個(gè)方式提供連接信息給接收容器:

    • 環(huán)境變量
    • 更新/etc/hosts文件

    環(huán)境變量

    當(dāng)兩個(gè)容器鏈接,Docker 會在目標(biāo)容器上設(shè)置一些環(huán)境變量,以獲取源容器的相關(guān)信息。

    首先,Docker 會在每個(gè)通過--link選項(xiàng)指定別名的目標(biāo)容器上設(shè)置一個(gè)<alias>_NAME環(huán)境變量。如果一個(gè)名為 web 的容器通過--link db:webdb被鏈接到一個(gè)名為 db 的數(shù)據(jù)庫容器,那么 web 容器上會設(shè)置一個(gè)環(huán)境變量為WEBDB_NAME=/web/webdb.

    以之前的為例,Docker 還會設(shè)置端口變量:

    $ sudo docker run --rm --name web2 --link db:db training/webapp env
    . . .
    DB_NAME=/web2/db
    DB_PORT=tcp://172.17.0.5:5432           
    DB_PORT_5432_TCP=tcp://172.17.0.5:5432  # <name>_PORT_<port>_<protocol> 協(xié)議可以是 TCP 或 UDP
    DB_PORT_5432_TCP_PROTO=tcp
    DB_PORT_5432_TCP_PORT=5432
    DB_PORT_5432_TCP_ADDR=172.17.0.5
    . . .

    注:這些環(huán)境變量只設(shè)置給容器中的第一個(gè)進(jìn)程,類似一些守護(hù)進(jìn)程 (如 sshd ) 當(dāng)他們派生 shells 時(shí)會清除這些變量

    更新/etc/hosts文件

    除了環(huán)境變量,Docker 會在目標(biāo)容器上添加相關(guān)主機(jī)條目到/etc/hosts中,上例中就是 web 容器。

    $ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash
    root@aed84ee21bde:/opt/webapp# cat /etc/hosts
    172.17.0.7  aed84ee21bde
    . . .
    172.17.0.5  db

    /etc/host文件在源容器被重啟之后會自動更新 IP 地址,而環(huán)境變量中的 IP 地址則不會自動更新的。

    posted on 2016-12-27 21:40 做強(qiáng)大的自己 閱讀(142) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV香蕉一区区二区三区| 视频免费1区二区三区| 国产亚洲精品xxx| 成人午夜大片免费7777| 久艹视频在线免费观看| 高潮毛片无遮挡高清免费视频| 亚洲无人区视频大全| 亚洲欧洲精品无码AV| 免费日韩在线视频| 欧美最猛性xxxxx免费| 日韩插啊免费视频在线观看| 一级做a爰片久久毛片免费看| 亚洲成AV人影片在线观看| 亚洲最大免费视频网| 亚洲一区二区电影| 亚洲精品蜜桃久久久久久| 亚洲福利中文字幕在线网址| 嫩草影院免费观看| 国内免费高清在线观看| 免费h片在线观看网址最新 | 免费观看毛片视频| 在线观看无码AV网站永久免费| 无码av免费一区二区三区| 中文在线免费不卡视频| 本免费AV无码专区一区| 国产精品福利在线观看免费不卡| 亚洲成a人片在线不卡一二三区| 亚洲中文无码永久免| 亚洲第一区二区快射影院| 亚洲xxxx18| 亚洲日产乱码一二三区别| 亚洲日本va一区二区三区 | 久久WWW色情成人免费观看| 动漫黄网站免费永久在线观看| 91精品免费不卡在线观看| 一级毛片免费观看不卡视频| 日本xxxx色视频在线观看免费| 无码人妻丰满熟妇区免费| 最近高清中文字幕免费| 日韩欧毛片免费视频| 成人黄页网站免费观看大全|