docker 實踐五 埠對映和容器互聯

2022-08-21 06:36:10 字數 2698 閱讀 3210

本篇是關於 docker 容器的埠對映和容器之間的互聯內容。

注:環境為 centos7,docker 19.03。

docker 的容器除了能連線網路外,在許多時候,我們需要讓多個容器來協同完成任務。為了應對這樣的需求,docker 提供了兩種機制:

容器啟動時,如果不指定對應的引數,容器外部是無法訪問容器內部的。要讓外部能訪問內部的話,在容器啟動時利用選項 -p | -p 可以實現埠的對映。

# docker ps

container id image command created status ports names

指定 -p 隨機分配主機的32768埠對映到容器的5000埠,訪問主機的32768輸出如下:

# curl 

hello world!

利用選項 -p | -p 能實現不同的對映型別。

1.指定埠對映:-p hostport:containerport

2.多個埠對映,多次使用 -p 實現

3.對映到指定位址的指定埠 -p ip:hostport:containerport

4.對映到指定位址的任意埠 -p ip::containerport

5.對映到指定的協議 tcp 或 udp -p ip::containerport/protocol

檢視 docker 容器的對映埠可以使用 inspect 命令,同時 docker 也提供了更直觀的子命令 port

# docker port f061c03d

5000/udp -> 127.0.0.1:5000

容器的互聯(linking) 是⼀種讓多個容器中的應⽤進⾏快速互動的⽅式。 它會在源和接收容器之間建立連線關係, 接收容器可以通過容器名快速訪問到源容器, ⽽不⽤指定具體的ip位址。

連線系統依據容器的名稱來執⾏。所以在啟動容器的時候需要使用 --name 選項指定容器名稱,雖然容器啟動時會被隨機分配乙個名稱,但互聯是指定名稱還是必要的。

注:docker 名唯一。

容器互聯使用選項--link name:alias,前者是容器名,後者是自定義的別名。

例如我們建立乙個資料庫容器 db ,再建立乙個web應用容器 web 連線 db

# docker run -d --name db training/postgres

# docker ps -a

container id image command created status ports names

73fd1af29108 training/postgres "su postgres -c '/us…" 5 seconds ago up 4 seconds 5432/tcp db

# docker ps

container id image command created status ports names

73fd1af29108 training/postgres "su postgres -c '/us…" about a minute ago up about a minute 5432/tcp db

這樣一來,web容器就和db容器建立互聯關係了。

docker 相當於在兩個互聯的容器之間建立了⼀個虛機通道, ⽽且不⽤對映它們的端⼜到宿主主機上。 在啟動db容器的時候並沒有使⽤ -p 和 -p 標記, 從⽽避免了暴露資料庫服務端⼜到外部⽹絡上。

docker 通過兩種⽅式為容器公開連線資訊:

重新啟動容器檢視它互聯的環境變數

term=xterm

db_port=tcp:

db_port_5432_tcp=tcp:

db_port_5432_tcp_addr=172.17.0.3

db_port_5432_tcp_port=5432

db_port_5432_tcp_proto=tcp

db_name=/web4/db

db_env_pg_version=9.3

home=/root

其中db_開頭的環境變數是供web容器連線db容器使⽤, 字首採⽤⼤寫的連線別名。

除了環境變數, docker 還新增 host 資訊到⽗容器的 /etc/hosts 的⽂件。 下⾯是⽗容器 web 的 hosts ⽂件:

172.17.0.3      db 73fd1af29108

172.17.0.4 7e983b169dd5

172.17.0.3 指定 db 容器和對應的 id,172.17.0.4 是 web 容器。當然使用多個 --link 就可以連線多個容器。

docker 網路模式 和 埠對映

docker 自帶 3 種 網路模式 分別是bridge網路,host網路,none網路,可以使用 docker network ls 命令檢視。這種網路模式下容器只有lo回環網路,沒有其他網絡卡。none網路可以在容器建立時通過 network none 來指定。這種型別的網路沒有辦法聯網,封閉的...

docker 追加docker容器埠對映的方法

docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。但這樣太麻煩了。現在有新方案來解決掉 操作步驟 1 檢視容器 docker ps a2 停止容器 docker stop f5033 停止dock...

Docker更改容器埠對映

一般情況下是不可以改變容器的埠對映的,只有通過run命令指定。如果想要不改變容器內容和配置的情況下更改埠對映只有先停止,然後將容器打包成映象,然後在執行新的映象的時候指定新的埠對映。先停止容器 docker stop containera 將容器commit成為乙個映象 docker commit ...