首页 文章 通过桥接网路连通各个容器

通过桥接网路连通各个容器

来源:https://www.cnblogs.com/jsonhc/p/7823286.html 发布时间:2021-01-05 17:51:15 作者:Soul-Yang 阅读量:934

docker network基础

前面介绍了nginx与php两个容器间是如何进行通信的:

[root@docker ~]# docker run -d --name=php -v /www:/usr/local/nginx/html php
[root@docker ~]# docker run -d --name=nginx --link=php:php -v /www:/usr/local/nginx/html -p 81:80 nginx
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
58280fe851f9        nginx               "/usr/local/nginx/..."   15 seconds ago      Up 14 seconds       0.0.0.0:81->80/tcp   nginx
9ea150c35587        php                 "/usr/local/php/sb..."   36 seconds ago      Up 35 seconds       9000/tcp             php

通过容器间的选项--link指定容器名称进行不同容器间的通信(--link container_name或者将container_name取一个别名)

现在使用另外一种方式替代--link来达到容器间的通信:docker network

查看local的网络信息:

[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
5133ec415c3c        bridge              bridge              local
f359ca4e2d39        host                host                local
8d68673c045c        none                null                local

现在创建一个网络名为my_net且driver为bridge的网络:(默认创建的就是bridge)

复制代码
[root@docker ~]# docker network create my_net
67e29f0e4a77c79144efc337a081a889188b5b8e289968f22be6e4ddd9b80610
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
5133ec415c3c        bridge              bridge              local
f359ca4e2d39        host                host                local
67e29f0e4a77        my_net              bridge              local
8d68673c045c        none                null                local
复制代码

利用--network启动容器提供服务:

[root@docker ~]# docker run -d --name=php --network my_net --network-alias php -v /www:/usr/local/nginx/html php
6b493cbe8207dee4cb4d5945cfce305dba96914083bd7f46841b0b42376bcb99
[root@docker ~]# docker run -d --name=nginx --network my_net --network-alias nginx -v /www:/usr/local/nginx/html -p 80:80 nginx
5ab220196b52bb768bef508433f0b920eecee70c3ee47880ebc5e2a74b5ee254

通过选项--network-alias将取名的my_net起了一个别名

[root@docker ~]# docker exec -it nginx ping php
PING php (172.18.0.2) 56(84) bytes of data.
64 bytes from php.my_net (172.18.0.2): icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from php.my_net (172.18.0.2): icmp_seq=2 ttl=64 time=0.090 ms

这里为啥能够ping通过php这个容器呢,因为这两个容器在同一个网络m'y_net内,而nginx里面ping的php是容器名(这里管理的是容器级别)

由于能够ping通php,所以在nginx中配置的:

复制代码
server {
    listen   80;
    root /usr/local/nginx/html;
    index index.htm index.html index.php;
    location ~ \.php$ {
        root /usr/local/nginx/html;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    } 
}
复制代码

所以配置文件中的php不会导致nginx启动失败,通过network的driver bridge实现了容器间的访问


延伸:容器如何访问宿主机(mac/win/linux)呢?

1. 容器内 ping docker.for.mac.host.internal 是可以 ping 通宿主机的,如下图:




得到的ip 就是 宿主机的ip (192.168.65.2),接下来,容器如需访问宿主机的一些服务就可使用此ip,当然也可以使用 docker.for.mac.host.internal 当做ip使用。

2.使用举例:

Mac中使用goland  开发项目,并实时编译运行,而 nginx使用的docker服务,此时docker 容器中的nginx  配置反向代理,可使用此ip或者域名。  

这样就可以使用指定的域名,通过docker中的nginx  反向代理到Mac宿主机的go服务。

  
留言
https://blog.key9.cn/
用户登录
您还没有写任何评论内容!
您已经评论过了!
只能赞一次哦!
您已经收藏啦!