外部訪問
隨機(jī)映射端口
使用 -P 標(biāo)記,Docker會隨機(jī)映射一個49000-49900的端口到內(nèi)部容器開放的網(wǎng)絡(luò)端口
docker run -d -P training/webapp python app.py
docker ps -l # 顯示最近創(chuàng)建的容器
docker logs -f web # 查看應(yīng)用的信息
映射所有接口地址
docker run -d -p 5000:5000 training/webapp python app.py
映射到指定地址的指定端口
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
指定udp端口
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射端口配置
新建一個docker網(wǎng)絡(luò)
docker network create -d bridge my-net
運(yùn)行容器連接到新建的my-net網(wǎng)絡(luò)
docker run -it --rm --name busybox1 --network my-net busybox sh
docker run -it --rm --name busybox2 --network my-net busybox sh
查看容器信息
docker container ls
容器內(nèi)ping測試容器是否互聯(lián)
多個容器互聯(lián) 推薦Docker Compose
配置DNS 宿主機(jī)DNS信息更新后,所有Docker容器的DNS配置通過/etc/resolv.conf立即更新
配置全部容器的DNS
vim /etc/docker/daemon.json 增加內(nèi)容
{
'dns':[
"114.114.114.114",
"8.8.8.8"
]
}
docker run -it --rm ubuntu:17.10 cat /etc/resolv.conf
容器互聯(lián)
容器的連接系統(tǒng)是除了端口映射外另一種可以與容器中應(yīng)用進(jìn)行交互的方式。
它會在源和接收容器之間創(chuàng)建一個隧道,接收容器可以看到源容器指定的信息。
自定義容器名
連接系統(tǒng)根據(jù)容器的名稱執(zhí)行,所以需要自定義一個較為簡單容易區(qū)分的容器名。
自定義命名使用--name參數(shù),這個在之前的文章中已經(jīng)遇到過了:
docker run -d -p --name db mysql
容器的命名必須是唯一的。
執(zhí)行docker run時,如果加上--rm參數(shù),容器在終止后悔立即被刪除,但是不能與-d參數(shù)一同使用。
容器互聯(lián)
使用--link參數(shù)可以讓容器間建立安全的連接進(jìn)行交互。
下面是一個示例:
首先創(chuàng)建一個數(shù)據(jù)庫的容器:
docker run -d --name db training/postgres
然后創(chuàng)建web容器:
docker run -d -P --name web --link db:db training/webapp python app.py
此時db容器和web容器加你互聯(lián)關(guān)系。
--link參數(shù):--link name:alias,name是要連接的容器的名字,alias是這個連接的別名。
可以使用docker ps查看容器信息,其中names列就能看出互聯(lián)的狀態(tài)。
docker在兩個互聯(lián)的容器之間建立了一個安全隧道,不需要吧他們的端口映射到宿主主機(jī)上,也可以避免端口的暴露。
Docker通過兩種方式公開連接信息:
- 環(huán)境變量
- 更新/etc/hosts文件
使用env命令查看剛剛的web容器的環(huán)境變量:
docker run --rm --name web2 --link db:db training/webapp env ...
其中DB_開頭的環(huán)境變量是供web容器連接db容器使用,前綴采用大寫的連接別名。
除了環(huán)境變量,Docker還添加host信息到父容器的/etc/hosts文件。其中web容器會以自己的ID作為默認(rèn)主機(jī)名,db容器以db作為主機(jī)名。
比如多個web到db容器的情況,可以鏈接多個子容器到父容器上。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。