端口映射实现容器访问
这种方式其实在前面的http服务器创建时已经搞过。在Dockerfile中使用EXPOSE暴露一个端口,然后启动容器的时候使用命令:
1
| docker run -d -p 8080:80 --name httpserver2 http:centos
|
这样,就把本机的8080和容器的80联系起来了。
当然这里-p有很多中用法,以下是一些例子:
1 2 3 4 5
| 1234:1234 127.0.0.1:1234:1234 127.0.0.1::1234 #使用`udp`来标记端口 127.0.0.1:1234:1234/udp
|
另外,如果是用大写的-P参数,那么Docker会随机映射一个49000-49900之间的端口到容器内指定的端口上去。
容器互联
容器互联是使用--link实现的。
以下面命令为例说明:
1
| docker run -d -P --name http2server --link desservername:linkname http:centos
|
desservername:linkname形式是:`要连的目标容器的名字:链接名称。
TIPS
Docker通过2种方式为容器公开连接信息。
这里是一个示例env命令的输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| HTTPCONNECTION_NAME=/http2server/httpconnection HTTPCONNECTION_PORT=tcp://172.17.0.2:80 HOSTNAME=438dcc885f2a TERM=xterm HTTPCONNECTION_PORT_80_TCP=tcp://172.17.0.2:80 LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: HTTPCONNECTION_PORT_80_TCP_ADDR=172.17.0.2 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ HTTPCONNECTION_PORT_80_TCP_PORT=80 SHLVL=1 HOME=/root HTTPCONNECTION_PORT_80_TCP_PROTO=tcp _=/usr/bin/env
|
如果查看/etc/host文件,会有以下输出:
1 2 3 4 5 6 7 8
| 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 httpconnection d6ecffc05081 httpserver 172.17.0.3 438dcc885f2a
|