国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Linking Containers Together

_DangJin / 1554人閱讀

摘要:可以更改容器的名字指要連接的容器,指目標容器簡稱能夠清除代碼中那個是目標容器,哪個是源容器,資源開放共享的方向這條命令中是要連接的容器,是源容器,是目標容器,是的別稱都是個人理解,可能有錯誤,還請指正。

Docker container中services/applications與主機或者其它containers之間通信的兩種方式

port mapping(端口映射)

container linking(容器連接)

Connect using Network port mapping

使用端口映射來連接

常用的命令(以training/webapp為例):

docker run -d -P traning/webapp ...
docker run -d -p traning/webapp ...
-Pflag

當container被創建并且運行時,-P標記立刻生效

它container內部的任意端口映射到docker host的port

Docker host的port是隨機的

它的生命力是短暫的(容器停止后端口映射就會失效)

e.g.

adolph@geek:~$ docker run -d -P training/webapp python app.py
3f30e81a01cdf9895a70828beebea32910f848ac00f92303e6af77faeee1db0a
adolph@geek:~$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS                     NAMES
3f30e81a01cd        training/webapp:latest   "python app.py"     8 seconds ago       Up 8 seconds        0.0.0.0:32769->5000/tcp   agitated_hawking

內部的5000端口映射到外部的主機的32769端口

-pflag

可以指定container內外的端口
內外的5000端口映射

docker run -d -p 5000:5000 training/webapp python app.py
adolph@geek:~$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS                    NAMES
cf6bd021034d        training/webapp:latest   "python app.py"     4 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   compassionate_lalande   

這樣做的不好的地方在于你只把congtainer內外的5000端口映射在一起,container內的其它端口被拋棄了

映射到主機的××端口

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

映射到主機的某個隨機端口

docker run -d -p 127.0.0.1::5000 training/webapp python app.py

注意127.0.0.1:有個冒號

-p參數使用的次數很多,主要用來配置多個端口

Connect with the linking system

Docker有自帶的linking system用來連接多個container,并且允許從一個container發送信息到另一個。發送信息的稱為source container,接收信息的稱為recipient container,recipient container智能看到一些經過篩選的關于source container的某些信息

The importance of naming

Docker依賴于容器的名字來建立連接,Docker啟動容器時會自動給它起個名字,當然你也可以自己命名

命名有兩個非常棒的好處:

告知container的作用或者屬于哪種類型,如traning/webapp可以看出是webapp的container

方便Docker通過name指定container

在運行container時通過--name標記來命名新的container

adolph@geek:~$ docker run -d -P --name web training/webapp python app.py
1be7fc1ca8f9b683a8c309a1f6315c65819db15e8105ffffd1b198e50c4082842f
adolph@geek:~$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS                     NAMES
1be7fc1ca8f9        training/webapp:latest   "python app.py"     4 seconds ago       Up 3 seconds        0.0.0.0:32770->5000/tcp   web
adolph@geek:~$ docker inspect -f "{{.Name}}" 1be7f
/web

注意:container的name必須是唯一的,比如說剛才的web,如果你想給另一個容器起名為web,那只能把原來的webcontainer刪除(docker rm [-f])。另外,docker run --rm --name..會在容器停止運行后立即刪除

Communication across links

通過連接通信

links允許容器發現對方并且建立安全的信息傳輸通道,link創建好后容器間通信的通道就建立好了。

注意事項:

需要運行的兩個容器不能重名

不能和其它已經存在的(不管有沒有運行)容器重名

docker ps -a查看所有容器的信息

docker rm [container name]刪除容器

link代碼

--link :alias

name or id指我們要連接的container的名字

shell1的代碼(我在一個shell中運行這些命令總會有1個容器在啟動后就EXIT(0)

adolph@geek:~$ docker run -i -t --name db adolph/ubuntu:14.04 
root@a1bb409128b9:/#

shell2

adolph@geek:~$ docker run -d -P --name web --link db:db training/webapp python app.py
09fed08b63e709e61d17f698ccec55a6d04ddb6e33c1aea3879f78d1970451ce
adolph@geek:~$ docker inspect -f "{{.HostConfig.Links}}" web
[/db:/web/db]

we can see that the web container is now linked to the db container web/db. Which allows it to access information about the db container.

recipient container source container
web db

為了做到容器間的通信,Docker沒有使用端口,而是自己建立了tunnel(隧道),使用link連接容器的好處是我們不需要將source container的端口暴露給網絡,Docker的tunnel使用兩種方式實現連接:

Environment variables(環境變量)

Updating the /etc/hosts file(更新/etc/hosts文件)

環境變量

當我們連接容器是Docker會創建很多環境變量,并且它會在目標容器自動基于--link后面的參數創建環境變量。Docker會公開來自source container的所有環境變量,這些變量包括:

the ENV commands in the source container"s Dockerfile(源容器Dockerfile中的ENV命令)

the -e, --env and --env-file options on the docker run command when the source container is started(容器運行時run后面的-e, --env--env-file參數)

這些環境變量允許我們通過編程從目標容器發現來自源容器的信息

警告:理解docker link連接容器的機制很重要,link允許所有目標容器獲得源容器的指定數據和信息,所以從安全性的角度,不建議在源容器中存儲敏感的數據

一些環境變量

_NAME

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

這個變量是為目標容器建立的,如上,--link db:dbweb容器被鏈接到db容器,這是Docker會在web容器中創建DB_NAME=/web/db

_PORT__
Docker為每一個源容器暴露的每一個端口。

指--link中指定的目標容器的別名

源容器暴露的端口號

TCP或UDP

Docker使用不同的前綴格式來規定3種不同的環境變量:

prefix_ADDR來自URL的ip地址。例如:WEBDB_PORT_8080_TCP_ADDR=172.17.0.82.

prefix_PORT來自URL的端口。例如:WEBDB_PORT_8080_TCP_PORT=8080.

prefix_PROTO來自URL的協議。例如:WEBDB_PORT_8080_TCP_PROTO=tcp.

每一組環境變量對應一個端口,如果容器公開多個端口(比如3個),Docker就會創建9個環境變量,每個端口3個。
此外,Docker還會為源容器第一個公開的端口創建_PORT,這里的第一個指的是具有lowest port的端口。例如:WEBDB_PORT=tcp://172.17.0.82:8080,如果它嗎滿足tcp和udp,那指的是tcp

最后,Docker還會創建這樣一個變量:_ENV_,用來連接源容器和目標容器的橋梁。Docker使用這個值來啟動源容器。

e.g:

adolph@geek:~$ sudo docker run --rm --name web2 --link db:db training/webapp env
[sudo] password for adolph: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=20fb0166d9c6
DB_NAME=/web2/db
HOME=/

我的電腦上并沒有看到環境變量!可能因為我的db容器和官網例子上的容器不一直吧,而且我的db容器中并沒有安裝數據庫。
Docker創建的這些變量有助于我們用來連接和配置源容器里的工具,比如連接數據庫...

Updating the /etc/hosts file

更新/etc/hosts文件

這部分自己有不懂的地方,以后慢慢看吧。

總結 連接容器的兩種方法 -p-P標記 link system

容器的命名是唯一的,不能重復。可以更改容器的名字

docker rename oldname newname

--link :alias,name指要連接的容器,alais指目標容器/簡稱

能夠清除代碼中那個是目標容器,哪個是源容器,資源開放共享的方向

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

這條命令中db是要連接的容器,是源容器,web是目標容器,webdb是web的別稱

adolph@geek:~$ docker inspect -f "{{.HostConfig.Links}}" web
[/db:/web/webdb]

都是個人理解,可能有錯誤,還請指正。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26387.html

相關文章

  • SegmentFault 技術周刊 Vol.5 - Docker丨Build, Ship, Run,

    摘要:此刻的后手指依舊飛速地敲打鍵盤,絲毫沒有要停不下來意思。閱讀本期技術周刊,你不光能弄明白什么是,使用的意義何在,還將被傳授秘籍,以達的境界。周刊篩選的每篇內容,是作者的獨到見解,踩坑總結和經驗分享。 showImg(https://segmentfault.com/img/bVC5qJ?w=900&h=385); 啪嗒啪嗒,啪嗒啪嗒,聽到后排動感十足的清脆鍵盤響,我就能猜到公司程序員定...

    Panda 評論0 收藏0
  • Docker多容器連接-以Nginx+PHP為例

    摘要:但網絡端口映射方式并不是中連接多個容器的唯一方式,還可以使用的連接系統連接多個容器,當容器連接到一起時,接受者容器就可以看到源容器的信息。與環境變量不同的是,如果源容器重啟了,接收容器中中的信息會自動更新。 Docker提供了多個容器直接訪問的方法,最簡單的方式是直接使用端口映射-p參數指定映射的端口或者-P映射所有端口,多個容器直接通過網絡端口進行訪問。 但網絡端口映射方式并不是D...

    tomorrowwu 評論0 收藏0
  • Docker多容器連接-以Nginx+PHP為例

    摘要:但網絡端口映射方式并不是中連接多個容器的唯一方式,還可以使用的連接系統連接多個容器,當容器連接到一起時,接受者容器就可以看到源容器的信息。與環境變量不同的是,如果源容器重啟了,接收容器中中的信息會自動更新。 Docker提供了多個容器直接訪問的方法,最簡單的方式是直接使用端口映射-p參數指定映射的端口或者-P映射所有端口,多個容器直接通過網絡端口進行訪問。 但網絡端口映射方式并不是D...

    thursday 評論0 收藏0
  • Docker多容器連接-以Nginx+PHP為例

    摘要:但網絡端口映射方式并不是中連接多個容器的唯一方式,還可以使用的連接系統連接多個容器,當容器連接到一起時,接受者容器就可以看到源容器的信息。與環境變量不同的是,如果源容器重啟了,接收容器中中的信息會自動更新。 Docker提供了多個容器直接訪問的方法,最簡單的方式是直接使用端口映射-p參數指定映射的端口或者-P映射所有端口,多個容器直接通過網絡端口進行訪問。 但網絡端口映射方式并不是D...

    netmou 評論0 收藏0
  • Angularjs 開發指南 自定義指令(custom directives)

    摘要:使用開發,很重要的一步是需要開發自定義的指令。接下來分幾個步驟記錄如何開發一個自定義的指令。對這個元素及其子元素進行變形之類的操作是安全的。鏈接函數鏈接函數負責注冊事件和更新。說明和是指令的關鍵部分,留在下一章中詳細討論。 使用Angularjs開發,很重要的一步是需要開發自定義的指令(custom directives)。接下來分幾個步驟記錄如何開發一個自定義的指令。 目錄: 指令...

    calx 評論0 收藏0

發表評論

0條評論

_DangJin

|高級講師

TA的文章

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