大纲:
docker容器之间互相访问可以通过进入某个容器的bash控制台去用主机地址+容器对外暴露端口互相访问,但是这种类似多此一举,于是改成用容器ip地址互相访问,即用docker启动的默认docker0网络访问,但是容器ip地址又可能因为各种原因发生变化,所以为了稳定访问使用自定义网络访-容器域名互相访问,即在容器启动前自己定义一个网络,然后在启动一个容器时使用--network参数把该容器加入到自定义网络,这样每个容器的名称就可以作为一个域名进行持续稳定访问了,可以不用管容器是否被删除或者ip发生变化,删了只需再建一个同名称的容器就又可以访问了。。。。。。。。。

docker容器访问docker容 器 过程:
docker容器之间通过主机地址+对外暴露端口访问:
如下以nginx容器为例:
1.用最新版本的nginx镜像后台启动app1和app2容器,并用主机的88和99段扩访问容器
docker run -d -p 88:80 --name app1 nginx
docker run -d -p 99:80 --name app2 nginx

2.docker exec 命令进入app1容器,用curl命令访问app2容器
docker exec -it app1 bash
curl http://app2容器所在主机地址:映射主机端口
过程:先刨除app1容器进入外界的网络,通过外界的网络来到这个机器,再通过机器的端口


docker内部容器之间通过容器ip地址访问:
docker内部有一个默认的网络,每个docker容器应用启动的时候都会将启动的docker容器加入docker的默认网络docker0。docker 0网络是在安装docker的时候就有了这个网络,ipa查看主机有docker0网卡,如下第2个截图docker 0网卡对应ip地址为172.17.0.1,docker每启动一个应用都相当于加入了docker 0网络环境,并且docker会给每一个容器应用再重新分配唯一ip,docker 0作为容器的网关ip,每个容器应用再有自己的一个ip地址,具体可以通过查看某个容器细节的-Networks查看。在docker内部容器之间互相访问可以直接通过容器的ip地址。即通过如下截图知:app1容器ip地址:172.17.0.2,app2容器ip地址:172.17.0.3
【注意:容器的ip地址可能会发生变化,如把app1容器删了再重新建个app1容器,那新的app1可能ip地址就和开始的不同】






过程:
1.docker exec -it app1 bash,进入app1容器的bash 控制台

2.使用curl命令通过Ip地址方式访问app2即nginx容器,注意使用app2容器内部端口,不要使用对外暴露端口,如下截图已经从app1容器访问到了app2容器



docker自定义网络:
为什么要有自定义网络:
因为docker容器内部之间用容器ip地址+端口访问时可能出现容器ip地址发生改变,即容器访问不稳定,所以改为用域名访问,即docker 自定义网络。如访问百度网页都是访问百度的域名baidu.com而不用管百度的实际ip地址,即使百度网页的ip地址一直在变,但是域名不变就行。
docker0网络默认不支持主机域名访问,所以在启动docker容器前需要自己定义一个网络mynet,在docker容器启动的时候把docker容器加入到自己定义的网络mynet,容器的名字可以作为不变的域名进行稳定访问,这样假如说你想用app1容器,让app1容器名作为域名,即使你把这个app1容器删了,你只要再建一个app1容器,就又可以访问app1容器了,而不用管新创建的app1容器的ip地址是否和之前相同了,自定义网络跟docker 0网络一样都会该网络中的容器分配唯一IP,且分配的ip和自定义网络分配的ip已经不一样了。

过程:
1.docker network create mynet,创建一个自定义网络mynet


2.docker后台启动容器并添加--network参数将启动容器添加到自定义网络mynet,并查看每个容器的ip地址




4.进入app1容器用app2容器作为域名访问app2容器


docker常见命令:
删除所有容器:docker rm -f $(dcoker ps -aq)

查看容器细节:docker container inspect 容器名称【ps:container可以不写即docker insepect 容器名称】


创建自定义网络:docker create network 网络名称
后台启动容器并将容器加入自定义网络:docker run -d -p 对外暴露端口:容器内部端口 --name 容器名称 --network 要加入的网络名称 镜像名称