端口映射
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