docker 网络基础配置

1.端口映射现实访问容器

 1.1从外部访问容器应用

   在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

   当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -P 参数来指定端口映射。当使用-P标记时,docker 会随机映射一个49000~49900的端口至容器内部开放的网络端口:

docker run -d -P centos ping www.baidu.com

docker ps -l 

查看日志信息

docker logs -f name

-p (小写)则可以指定要映射的端口并且在一个指定端口上只可以绑定一个容器。支持格式为 ip:hostPort:containerPort |ip::containerPort | hostpost:containerport.

1.2. 映射所有接口地址

    使用hostport:containerport 格式将本地的5001端口映射到容器的5001端口,可以执行如下格式

[root@kubernetes /data/docker/dbdata]# docker run -d -p 5001:5001 --name ceshi training/webapp python app.py
e75bbe91989b2a59f447112a84bcdc5a7d4213fe559728409bbaf2a09b0e6551

#查看

[root@kubernetes /data/docker/dbdata]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e75bbe91989b        training/webapp     "python app.py"          2 seconds ago       Up 2 seconds        5000/tcp, 0.0.0.0:5001->5001/tcp   ceshi

此时默认会绑定本地所有接口上的所有地址。多次使用 -p 标记可以绑定多个端口。

docker run -d -p 5000:5000 -p 80:3000 centos ping www.baidu.com

#查看

[root@ybsrv1 /data/webapp]# docker ps 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                                          NAMES
b627d6330b83        centos              "ping www.baidu.com"   24 seconds ago      Up 23 seconds       0.0.0.0:5000->5000/tcp, 0.0.0.0:80->3000/tcp   condescending_einstein   
7265c5c841b8        centos              "/bin/bash"            22 hours ago        Up 8 minutes                                                       db1               

1.3.映射到指定地址的指定端口

[root@ybsrv1 /data/webapp]# docker run -d  -p 127.0.0.1:5000:5000 centos ping www.baidu.com
eecc1d011cff8c1ad7ce3e0c577efffe66860c260a3394a4ced80f967bc5df50
[root@ybsrv1 /data/webapp]# docker ps 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                      NAMES
eecc1d011cff        centos              "ping www.baidu.com"   3 seconds ago       Up 2 seconds        127.0.0.1:5000->5000/tcp   ecstatic_pasteur    
7265c5c841b8        centos              "/bin/bash"            22 hours ago        Up 18 minutes                                  db1                 

1.4. 映射到指定地址的任意端口

[root@kubernetes /data/docker/dbdata]# docker run -d -p 127.0.0.1::5000 --name test training/webapp python app.py
511cb93f3fedb42f200f9f0a0772183b8f9dcff3460faa68d34d128506f2c860
[root@kubernetes /data/docker/dbdata]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
511cb93f3fed        training/webapp     "python app.py"          2 seconds ago       Up 2 seconds        127.0.0.1:32768->5000/tcp          test

使用udp标记指定udp端口

docker run -d -p 127.0.0.1:5000:5000/udp  centos ping www.baidu.com

1.5. 查看映射端口配置

使用docker port来查看当前映射的端口配置,也可以查看到绑定的地址

[root@kubernetes /data/docker/dbdata]# docker port test  5000
127.0.0.1:32768

注: 容器内的ip地址可以通过docker [container] inspect +r=容器ID查看

2, 容器互联实现容器间通信

          容器的互联(linking)是一种让多个容器中的应用进行快速交互的方式。它会在源和接收器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址

2.1 自定义容器命名

自定义的命名: 比较好记,比如一个Web 应用容器我们可以给它起名叫web,

当要连接其他容器时候(几遍重启),也可以使用容器名而不用改变,比如连接web容器到db容器

使用 --name 标记可以为容器命名

docker run -d -P --name web centos /bin/bash

使用docker ps来验证设定的命名;

[root@kubernetes /data/docker/dbdata]# docker ps -l 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                       NAMES
511cb93f3fed        training/webapp     "python app.py"     17 minutes ago      Up 17 minutes       127.0.0.1:32768->5000/tcp   web

使用docker inspect 来查看容器名字

[root@ybsrv1 /src/webapp]# docker inspect -f "{{ .Name }}" 45e785
/web

容器名字是惟一的,如果已经命名了一个叫web的容器,要先删除web容器

在执行docker  [container] run 的时候如果添加 -- rm 标记,则容器在终止后会立即删除注意 -- rm 和 - d 参数不能同时使用

2.2 容器互联

使用 --link 参数可以让容器之间安全的进行交互

先创建一个新的容器

docker run -d --name db training/postgres

删除之前创建的web容器,并将它连接到db容器

docker run -d -P --name web --link db:db training/webapp python app.py

此时,db容器和web容器简历互联关系

-- link 参数格式为 --link name:alias 其中name 是要连接的容器名称,alias是这个链接的别名

查看容器连接

[root@kubernetes /data/docker/dbdata]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
d8fc36b3fabe        training/webapp     "python app.py"          17 seconds ago      Up 16 seconds       0.0.0.0:32771->5000/tcp            web
5c83232ce3ae        training/postgres   "su postgres -c '/us…"   30 seconds ago      Up 2 seconds        5432/tcp                           db

docker 在两个互联容器的之间建立一个安全隧道,而且不用映射他们的端口到宿主主机上。在启动db容器的时候并没有使用 -p 和 -P 标记,从而避免了暴露数据库端口到外部网络上

docker 通过两种方式为容器公开链接信息

1. 更新环境变量

2. 更新/etc/hosts文件

使用env 命令查看web容器的环境变量

[root@kubernetes /data/docker/dbdata]# 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=81ee2bf69fde
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP_ADDR=172.17.0.5
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容器使用的前缀采用大写链接别名

除了环境变量,docker 还添加host 信息到父容器的/etc/hosts的文件,下面是web容器的hosts文件

[root@kubernetes /data/docker/dbdata]# docker run -it  --rm --name web2 --link db:db training/webapp /bin/bash
root@f1f565481664:/opt/webapp# cat /etc/hosts 
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.5	db 5c83232ce3ae
172.17.0.8	f1f565481664

这里有两个hosts信息,第一个是web容器,web容器用自己的id作为默认主机名, 第二个是db容器的ip和主机名。可以在web容器中安装ping命令来测试跟db容器的联通

[root@8a302a215d3c /]# ping db 
PING db (172.17.0.111) 56(84) bytes of data.
64 bytes from db (172.17.0.111): icmp_seq=1 ttl=64 time=1.24 ms
64 bytes from db (172.17.0.111): icmp_seq=2 ttl=64 time=0.016 ms
^C
--- db ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.016/0.631/1.247/0.616 ms

可以连接多个子容器到父容器,比如可以连接多个web到db容器上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值