Docker入門之六端口映射與容器互聯


一、端口映射

在之前的博客搭建私有倉庫時用到這樣一句:docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry來run一個倉庫,其中可以看到-p 5000:5000,它的作用就是用來進行端口映射。那為什么需要端口映射呢?其實在啟動容器時,如果不配置宿主機器與虛擬機的端口映射,外部程序是無法訪問虛擬機的,因為沒有端口,所以需要進行端口映射。

 端口映射有兩個關鍵詞-P -p,一個是大寫一個是小寫,通過run --help也可以看到。大寫的P是隨機映射一個49000-49900的端口到內部容器開放的網絡端口。小寫p可以指定要映射的端口,並且在一個指定端口上只可以綁定一個容器。

支持的格式有三種:比較常用的是第三種,因為這樣沒有對ip進行限制,移植也方便。

ip:hostPort:containerPort:映射指定地址的指定端口到虛擬機的指定端口(不常用) 

如:127.0.0.1:5000:5000,映射本機的5000端口到虛擬機的5000端口。 

ip::containerPort:映射指定地址的任意端口到虛擬機的指定端口。(不常用) 

如:127.0.0.1::5000,映射本機的5000端口到虛擬機的5000端口。 

hostPort:containerPort:映射本機的指定端口到虛擬機的指定端口。(常用) 

如:5000:5000,映射本機的5000端口到虛擬機的5000端口

映射完之后我們可以通過ps來進行查看容器的映射情況:

也可以使用port命令來查看映射情況,下面是先通過help來查看port的語法和格式。然后查看了容器modest_payne的端口映射情況。最后要說的是可以多次使用-p來綁定多個端口。

二、容器互聯

 在實際應用中往往需要多個容器交互,比如一個數據庫容器來提供db服務,多個應用容器來部署應用,使用端口訪問就會暴露端口,這樣不太安全。有沒有方法讓容器互聯呢?答案當然是有了。容器互聯的方法有多種方式,今天主要學習link,但link是只針對單宿主主機的。

1.啟動mysql server

這里run了一個mysql,容器名mysql,123為數據庫的root密碼。

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql

2.使用--link關聯

這里run了一個webapp的容器,關聯了mysql容器,並為它取別名db,webapp容器的鏡像就是普通的ubuntu鏡像。

docker run --name webapp --link mysql:db -it -d ubuntu /bin/sh

兩個容器互聯相當於在它們之間創建了一個虛擬通道,而且不用映射它們的端口到宿主主機上。通過兩種方式為容器公開連接信息:

1.更新環境變量

2.更新/etc/hosts文件

下面的截圖就是進入容器webapp來查看它的環境變量和hosts文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM