辽宁住房建设厅网站首页,莆田网站制作,陕西找人做网站多少钱,网站建设高端培训班1、虚拟ip/访问 同一网络
安装docker时#xff0c;docker会默认创建一个内部的桥接网络docker0#xff0c;每创建一个容器分配一个虚拟网卡#xff0c;容器之间(包括宿主机)可以根据分配的ip互相访问(ps:其他主机(包括其他主机的容器)无法ping通docker容器ip无法访问#…1、虚拟ip/访问 同一网络
安装docker时docker会默认创建一个内部的桥接网络docker0每创建一个容器分配一个虚拟网卡容器之间(包括宿主机)可以根据分配的ip互相访问(ps:其他主机(包括其他主机的容器)无法ping通docker容器ip无法访问因为docker0是172.0.0.1(localhost)其分配的容器ip也是172.0.0.2等仅与本机属于同一网段。需要暴露到宿主机端口才可以被其他主机访问到。需要安装weave、fannel等跨主机网络通讯插件,用weave分配容器ip,这样跨主机容器间才可用ip互相通讯了否则跨主机容器无法通讯)
Docker容器的虚拟ip查看在容器内部 cat /etc/hosts
测试[roote0841aa13c5b /]# ping 容器虚拟ip
2、link 容器别名访问ps: 官方文档中已经不推荐使用
运行第一个容器 [rootCentOS ~]docker run -it --name centos-1 docker.io/centos:latest运行第二个容器 [rootCentOS ~]# docker run -it --name centos-2 --link centos-1:centos-1 docker.io/centos:latest --link参数中第一个centos-1是容器名第二个centos-1是定义的容器别名使用别名访问容器为了方便使用一般别名默认容器名。
测试[roote0841aa13c5b /]# ping centos-1
事实上在centos-2 容器内如果查看 hosts 文件可以发现 docker 已经将另外1个容器配置在了 hosts 中
/app # cat /etc/hosts
127.0.0.1 localhost
...
172.17.0.6 centos-1 7a6409598773 centos-1
3、同一自定义网络下可通过容器名访问
ps: 默认的docker0网络只能通过ip访问.
因为用户自定义的网卡可以在容器之间提供自动的 DNS 解析缺省的桥接网络docker0上的容器只能通过 IP 地址互相访问除非使用 --link 参数。在用户自定义的网卡上容器直接可以通过名称或者别名相互解析。 Docker容器名访问原理是通过Docker内置的DNS服务将容器名解析为容器的IP地址。
容器名访问只在Docker网络内部起作用不能直接从宿主机外部访问容器。如果需要从宿主机外部访问容器可以通过端口映射Port Mapping将容器的端口暴露给宿主机。
运行如下命令创建bridge网络docker network create testnet
查询到新创建的bridge testnet。 运行容器连接到testnet网络使用方法docker run -itd --name test1 ---network testnet nginx
docker run -itd --name test2 ---network testnet nginx
测试从test2容器ping test1容器
docker exec -it test2 bash
[roote0841aa13c5b /]# ping test1
4.docker compose部署 可通过service服务名访问单机
Docker Compose 是一个在单个服务器上创建多个容器的工具, 主要是用来构建多个服务(一个服务就相当于一个容器或一组相同配置的容器)一般是构建构建多个有关联的服务。
只要是处于同一个Docker 网络下的容器就可以使用服务名进行直接访问而无需担心重启导致的VIP变化。
使用docker-compose编排一个配置文件的一组容器时会默认创建一个网络并且这组容器全部都会加入到网络当中。在不同配置文件的容器默认会用不同的network
4-1.同一个yml文件的情况下
新建 docker-compose.yml 文件编写如下
version: 3
services: digger-api: image: express:v1 ports: - 3000:3000 digger-mysql: image: mysql:5.7.25 environment: - MYSQL_ROOT_PASSWORDroot digger-redis: image: redis:5.0.3-alpine 然后使用 docker-compose up -d 启动即可容器会在后台运行。
在digger-mysql的容器内 ping digger-api 4-2.不同yml文件的情况下需配置成使用同一外部网络
docker network create test1 #创建一个单独的网络
这几个docker compose的 yml文件的所有容器的网络都指定到上面创建的网络并标记为 external
version: 3
services: digger-api: image: express:v1 ports: - 3000:3000 networks: - test1
networks: frontend:
external: true #指定容器使用外部已有的网络 5.docker swarm 可通过service服务名访问多主机集群 跨主机通讯
服务名访问是通过服务发现与负载均衡机制实现的
服务发现Docker Swarm管理着集群中所有服务的状态和配置信息。当你创建一个服务时Swarm会收集服务的相关信息并将其存储在内置的服务发现机制中。
负载均衡通过服务名访问时Swarm会在运行服务的节点之间进行负载均衡并将请求路由到可用的任务上。
DNS解析服务Docker Swarm使用内置的DNS解析服务来实现服务名的解析。在Docker网络内部可以使用服务名作为主机名来访问服务的网络服务。Swarm的DNS服务将服务名解析为可用的任务的IP地址并将请求转发到相应的任务上。 serviceName服务名访问只在Docker Swarm集群内部起作用不能直接从集群外部访问。如果需要从集群外部访问服务可以通过服务的暴露端口或使用Ingress等方式来配置集群的统一入口。 #创建service --publish映射宿主机IP 自带负载均衡会随机在多主机上部署容器
docker service create --name node_v16 --publish host_port:container_port service_image
docker swarm容器内直接可直接访问serviceName宿主机需映射serviceNameserviceIP到/etc/hosts才行docker swarm overlay网络分配的VIP 无法从service inspect信息中查看只能在具体容器中查看docker exec -it 3f3 ip addr show
集群外 可访问 http://宿主机IP:host_port