docker-5.網絡
端口映射
docker run -d -P training/webapp python app.py
-P 映射隨機端口,隨機端口範圍由/proc/sys/net/ipv4/ip_local_port_range定義
通過docker port查看映射的端口
docker port backstabbing_hodgkin
5000/tcp -> 0.0.0.0:32775
或
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3bab6730061 training/webapp "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:32775->5000/tcp backstabbing_hodgkin
curl 127.0.0.1:32773
Hello world!
通過docker logs可以查看容器內消息
docker logs determined_carson
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.18.0.1 - - [24/Oct/2017 08:42:12] "GET / HTTP/1.1" 200 -
映射所有接口地址的端口
docker run -d -p 5000:5000 training/webapp python app.py
#-p參數可多次使用
映射指定地址指定端口
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
映射UDP端口
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
ss -ntlu | grep "5000"
udp UNCONN 0 0 127.0.0.1:5000 *:*
容器互聯
容器的連接(linking) 系統是除了端口映射外,另一種跟容器中應用交互的方式。
該系統會在源和接收容器之間創建一個隧道,接收容器可以看到源容器指定的信
息。
容器連接根據容器的名稱來執行
創建db容器
docker run -d --name db training/postgres
創建web容器並連接db容器
docker run -d -P --name web --link db:db training/webapp python app.py
通過查看環境變量來查看容器公開連接信息
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=d6fc554fd0d4
DB_PORT=tcp://172.18.0.2:5432
DB_PORT_5432_TCP=tcp://172.18.0.2:5432
DB_PORT_5432_TCP_ADDR=172.18.0.2
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_PG_VERSION=9.3
HOME=/root
DB_ 開頭的環境變量是供 web 容器連接 db 容器使用,前綴采用大寫的連接
別名。
通過查看hosts文件查看容器公開連接信息
docker run -it --rm --link db:db training/webapp /bin/bash
root@7c6c61eaa74b:/opt/webapp# cat /etc/hosts
127.0.0.1 localhost
172.18.0.2 db 5ca8502421a5
172.18.0.4 7c6c61eaa74b
root@7c6c61eaa74b:/opt/webapp# ping db
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from db (172.18.0.2): icmp_seq=1 ttl=64 time=0.083 ms
docker-5.網絡