中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker端口映射與容器的互訪

發布時間:2020-05-21 13:42:50 來源:億速云 閱讀:479 作者:鴿子 欄目:系統運維

端口映射與容器關聯

docker除了通過網絡訪問外,還提供了兩個功能來滿足服務訪問的基本需求:一個是允許映射容器內應用的服務端口到本地宿主主機;另一個是互聯機制實現多個容器間通過容器名來快速訪問。

端口映射容器訪問

1、從外部訪問容器應用,從啟動容器的時候,如果不指定對應參數,在容器外部是無法通過網絡來訪問容器內的網絡應用和服務的。可以通過-P或-p參數來指定端口映射。
-P:會隨機映射一個49000~49900的端口到內部容器開放的網絡端口

[root@docker01 ~]# docker run -d -P training/webapp python app.py
75b2c32292d290aa3004b5b6cbb49775cc6f360796736473978cc32a682fdad9
[root@docker01 ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
75b2c32292d2        training/webapp     "python app.py"     3 seconds ago       Up 2 seconds        0.0.0.0:32770->5000/tcp   musing_carson

查看應用的信息

[root@docker01 ~]# docker logs -f musing_carson
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

2、映射所有接口地址,使用HostPort:ContainerPort吧本地的5000端口映射到容器的5000端口

[root@docker01 ~]# docker run -d -p 5000:5000 training/webapp python app.py
6368e0f567714ad90d2b20ff71afb2231e404b35639055a665cc3715a85f010a

或使用連續的-p綁定多個端口

[root@docker01 ~]# docker run -d -p 5000:5000 -p3000:80 training/webapp python app.py
80bfe8e1f7fd53099e3f350c5efd1160a7247d065233965cc2bc2130e2fdcbb2

3、映射到指定地址的指定端口,使用IP:HostPort:ContainerPort格式指定映射使用一個特定地址。

[root@docker01 ~]# docker run -d -p 10.10.17.199:5000:5000 training/webapp python app.py
ac228c0f2334a59856d9993e6a3eb652b50eb08ec41cedff87b331aa8d5d5f86
[root@docker01 ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                         NAMES
ac228c0f2334        training/webapp     "python app.py"     5 seconds ago       Up 5 seconds        10.10.17.199:5000->5000/tcp   eager_noether

4、映射到指定地址的任意端口,使用IP::ContainerPort綁定localhost的任意端口到容器的5000端口,本地主機會自動分配一個端口

[root@docker01 ~]# docker run -d -p 127.0.0.1::5000 training/webapp python app.py
e72dec38ae77c113418156c4ad50b601fe31d0a38b4b8f995aabdcfcc510fdcc

使用UDP標記來指定udp端口

[root@docker01 ~]# docker run -d -p 127.0.0.1:5001:5001/udp training/webapp python app.py
581ff1531c6b604c1b66ece82c87529a02c8da0b7b19e98bd336122c151b524f

5、查看映射端口配置,使用docker port來查看映射的端口配置

[root@docker01 ~]# docker port laughing_faraday 5000
127.0.0.1:32768

互聯機制便捷互訪

容器的互聯是一種讓多個容器中的應用進行快捷交互的方式,它會在源和接收容器之間創建連接關系,接收容器可以通過容器名快速訪問到源容器,而不用指定具體的IP地址。
1、自定義容器命名,連接系統依據容器的名稱來執行。首先需要一個好記的容器命名,雖然不指定系統會默認分配一個,但是指定的好處在于:名稱好記,基于應用來取名如web。需要連接其他容器時,也可以使用容器名而不用改變。

[root@docker01 ~]# docker run -d -P --name web training/webapp python app.py
6ae6d11614f99762a519d55beb8b38f3fbff667af34be90b33d6a11477b8d99a
[root@docker01 ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
6ae6d11614f9        training/webapp     "python app.py"     7 seconds ago       Up 6 seconds        0.0.0.0:32771->5000/tcp   web

2、容器互聯,使用--link參數可以讓容器之間安全的進行交互
創建一個新的數據庫容器

[root@docker01 ~]# docker run -d --name db training/postgres
Unable to find image 'training/postgres:latest' locally
latest: Pulling from training/postgres
Image docker.io/training/postgres:latest uses outdated schema1 manifest format. Please upgrade to atibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
a3ed95caeb02: Pull complete 
6e71c809542e: Pull complete 
2978d9af87ba: Pull complete 
e1bca35b062f: Pull complete 
500b6decf741: Pull complete 
74b14ef2151f: Pull complete 
7afd5ed3826e: Pull complete 
3c69bb244f5e: Pull complete 
d86f9ec5aedf: Pull complete 
010fabf20157: Pull complete 
Digest: sha256:a945dc6dcfbc8d009c3d972931608344b76c2870ce796da00a827bd50791907e
Status: Downloaded newer image for training/postgres:latest
67b752f9c5d6f19f2811674be780673b5475c845be6f43d9b15df139ff01c0fd

刪除之前的web容器,然后創建一個新的web容器,把他連接到db容器

[root@docker01 ~]# docker rm -f web
web
[root@docker01 ~]# docker run -d -P --name web --link db:db training/webapp python app.py
de3f340d554dd01789859d6dc0fc3a0bb406e3111ca60e27f78da208def08dca

--link參數的格式為--link name:alias,其中name是要鏈接的容器名稱,alias是別名。
使用docker ps查看容器的鏈接

[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
de3f340d554d        training/webapp     "python app.py"          4 minutes ago       Up 4 minutes        0.0.0.0:32772->5000/tcp   web
67b752f9c5d6        training/postgres   "su postgres -c '/us…"   13 minutes ago      Up 13 minutes       5432/tcp                  db

相當于在兩個容器之間創建了一個虛擬通道,而且不用映射他們的端口到宿主機上,在啟動db容器的時候沒有使用-p或-P標記,避免了暴露數據庫服務端到外部網絡上。
docker通過兩種方式為容器公開連接信息
#更新環境變量
#更新/etc/hosts文件
使用env命令來查看web容器的環境變量:

[root@docker01 ~]# docker run --rm --name web2 --link db:db training/webapp env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=2ff63f7eb1d2
DB_PORT=tcp://172.17.0.3:5432
DB_PORT_5432_TCP=tcp://172.17.0.3:5432
DB_PORT_5432_TCP_ADDR=172.17.0.3
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_PG_VERSION=9.3
HOME=/root

除了環境變量docker還添加了host信息到父容器的/etc/hosts中

[root@docker01 ~]# docker run -t -i --rm --link db:db training/webapp /bin/bash
root@8ed896541b8d:/opt/webapp# 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
172.17.0.3  db 67b752f9c5d6
172.17.0.4  8ed896541b8d
root@8ed896541b8d:/opt/webapp# ping db
PING db (172.17.0.3) 56(84) bytes of data.
64 bytes from db (172.17.0.3): icmp_seq=1 ttl=64 time=0.239 ms
64 bytes from db (172.17.0.3): icmp_seq=2 ttl=64 time=0.154 ms
64 bytes from db (172.17.0.3): icmp_seq=3 ttl=64 time=0.110 ms
64 bytes from db (172.17.0.3): icmp_seq=4 ttl=64 time=0.111 ms
^C
--- db ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.110/0.153/0.239/0.053 ms

用戶可以鏈接多個子容器到父容器,比如可以鏈接多個web到同一個db容器上。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闽清县| 札达县| 莲花县| 仪征市| 治县。| 永仁县| 安仁县| 兴义市| 潞西市| 台江县| 佛山市| 昌乐县| 辽阳市| 清原| 淳化县| 廉江市| 江都市| 花莲市| 都江堰市| 大庆市| 巴东县| 准格尔旗| 措美县| 五台县| 会昌县| 临颍县| 山东| 旌德县| 项城市| 开平市| 荔浦县| 雅安市| 德钦县| 湟源县| 裕民县| 喜德县| 宝丰县| 葫芦岛市| 庄河市| 平乡县| 大新县|