一、端口映射实现访问容器
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P标记时,Docker会随机映射一个49000~49900的端口至容器内部开放的网络端口。
1、-P随机分配端口
# docker pull training/webapp 下载镜像文件
# sudo docker run -d -P training/webapp python app.py 运行镜像文件
# docker ps 查看docker运行进程
# docker logs -f laughing_montalcini 查看日志文件(docker logs -f -t --tail 行数 容器名)
2、-p指定端口
# 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 指定ip地址的指定地址
# docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py 指定ip地址的任意地址
# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 指定协议
3、查看端口绑定地址:# docker port laughing_montalcini 5000 (docker port 容器名 容器内端口)
使用docker inspect 容器id 可以查看容器的所有信息
二、容器之间的通信
以数据库和程序的连接为例
# docker pull training/postgres
# docker run -d --name db training/postgres
# docker run -d -P --name web --link db:db training/webapp python app.py
Docker在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿主主机上。在启动db容器的时候并没有使用-p和-P标记,从而避免了暴露数据库端口到外部网络上。
# docker run --rm --name web- --link db:db training/webapp env 使用env命令来查看web容器的环境变量
# docker run -t -i --rm --link db:db training/webapp /bin/bash Docker还添加host信息到父容器的/etc/hosts的文件。下面是父容器web的hosts文件
# cat /etc/hosts 这里有两个hosts信息,第一个是web容器,web容器用自己的id作为默认主机名,第二个是db容器的ip和主机名。
# apt-get install -yqq inetutils-ping 在web容器中安装ping命令来测试跟db容器的连通
# ping adb