一 docker网络访问

描述:

在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或者-p参数来指定容器端口映射。当使用-P(大写)时,docker会随机映射一个端口到容器内部开放的端口

#启动容器 -d 后台启动 -P 随机映射
[root@Centos-node2 ~]# docker run -d -P nginx
#绑定nginx容器80端口到本地的192.168.10.:888端口
[root@Centos-node2 ~]# docker run -d -p 192.168.10.138:: --name mynginx1 nginx
#指定udp协议不指定默认tcp
[root@Centos-node2 ~]# docker run -d -p 192.168.10.138:::udp --name mynginx1 nginx
#查看映射端口
[root@Centos-node2 ~]# docker port mynginx1
/tcp -> 192.168.10.138:
#指定多个端口
[root@Centos-node2 ~]# docker run -d -p 192.168.10.138:: -p : --name mynginx1 nginx

二 容器互联

描述:

容器间互联是让多个容器中应用进行交互的一种方式。

2.1.1 --link  运行另外一个容器,并link到上面启动的容器,这个容器被称为received container,--link连接名为db的容器,并为其设置了别名为:busybox2

[root@Centos-node3 ~]# docker run -it --name busybox1 busybox
[root@Centos-node3 ~]# docker run -it --link busybox1:busybox2 --name busybox2 busybox
/ # cat /etc/hosts
127.0.0.1 localhost
:: localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
ff02:: ip6-allnodes
ff02:: ip6-allrouters
172.17.0.2 busybox1 8fe0dce9f160
172.17.0.3 c3a6fda35cb6
/ # ping busybox1
PING busybox1 (172.17.0.2): data bytes
bytes from 172.17.0.2: seq= ttl= time=0.107 ms
bytes from 172.17.0.2: seq= ttl= time=0.051 ms

2.1.1 三种网络模式

[root@Centos-node3 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
1fb49642b1e6 bridge bridge local
fec447af9823 host host local
8c6172952391 none null local

bridge  :Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定 --network,创建的容器默认都会挂到 docker0 上。接口 docker0 是一个虚拟的以太网桥,用于连接容器和本地宿主网络。

host : 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network 。可以通过--network=host指定使用 host 网络。 缺点容易发生端口冲突

none: none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过--network=none指定使用 none 网络。

2.1.2 创建一个网络

 [root@Centos-node3 ~]# docker network create --driver bridge my_net
aec79181307e4e7708a6a24a7b0f04d6edec067ed6c7853053be8051f9c627fe
#自定义网段IP
[root@Centos-node3 ~]# docker network create --driver bridge --subnet 192.168.100.0/ --gateway 192.168.100.1 my_net2
5ad00d340d16d7804865cc1e3e45a3444181878da9c9422fbe1dc658938895e6 #指定IP地址启动容器
[root@Centos-node3 ~]# docker run -it --rm --network=my_net2 --ip 192.168.100.10 busybox
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu qdisc noqueue
link/ether ::c0:a8::0a brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/ scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:::c0ff:fea8:640a/ scope link
valid_lft forever preferred_lft forever
[root@Centos-node3 ~]# docker network connect my_net2 nginx #共同一个定义网络可以互相通信

2.1.3 docker主机之间容器通信

[root@Centos-node2 ~]# docker run -d -p : --name consul progrium/consul -server -bootstrap

#node3 node5主机添加以下配置
[root@Centos-node3 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"cluster-store":"consul://192.168.10.138:8500", #consul地址
"cluster-advertise":"192.168.10.139:2375" #本机地址 }

验证:

创建自定义全局网络

[root@Centos-node3 ~]# docker network create -d overlay ov_net1
1ce3d31db5dc8865bcfb0d8c06c3c9b6c7a62d8518ce7802263e9acad3ab8b80
[root@Centos-node3 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
af13f853071f bridge bridge local
fec447af9823 host host local
aec79181307e my_net bridge local
5ad00d340d16 my_net2 bridge local
8c6172952391 none null local
1ce3d31db5dc ov_net1 overlay global #node3创建node4查看
[root@Centos-node4 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
2035b2339f4d bridge bridge local
832b9c357202 host host local
20dfc847adb8 none null local
1ce3d31db5dc ov_net1 overlay global

node3,node4分别启动容器指定全局网络测试互通

[root@Centos-node3 ~]# docker run -it --rm --network=ov_net1 busybox
/ # ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2): data bytes
bytes from 10.0.0.2: seq= ttl= time=1.322 ms
bytes from 10.0.0.2: seq= ttl= time=0.395 ms
--- 10.0.0.2 ping statistics ---
packets transmitted, packets received, % packet loss
round-trip min/avg/max = 0.395/0.858/1.322 ms [root@Centos-node3 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
af13f853071f bridge bridge local
5fd6e9efce57 docker_gwbridge bridge local #随机 为了让容器与外界通信
fec447af9823 host host local
aec79181307e my_net bridge local
5ad00d340d16 my_net2 bridge local
8c6172952391 none null local
1ce3d31db5dc ov_net1 overlay global

docker网络访问的更多相关文章

  1. docker网络访问(三)

    docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...

  2. 4、Docker网络访问

    现在我们已经可以熟练的使用docker命令操作镜像和容器,并学会了如何进入到容器中去,那么实际的工作中,我们通常是在Docker中部署服务,我们需要在外部通过IP和端口进行访问的,那么如何访问到Doc ...

  3. docker的网络访问

    Docker的网络访问: #systemctl  start docker #ifconfig [root@zizhen02 ~]# ifconfig docker0: flags=4099<U ...

  4. Docker网络和存储

    本节内容: Docker网络访问 端口映射 数据管理 一.Docker网络访问 1. docker自带的网络 docker network ls:列出当前docker中已有的网络 docker net ...

  5. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  6. Docker 外部访问容器Pp、数据管理volume、网络network 介绍

    Docker 外部访问容器Pp.数据管理volume.网络network 介绍 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来 指定端口映射. ...

  7. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  8. docker网络配置方法总结

    docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...

  9. Docker网络详解

         当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机.它会在挂载到它的网口之间进行转发.      ...

随机推荐

  1. IOC DI 专题

    IoC:Inversion of Control,控制反转DI:Dependency Injection,依赖注入 要理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁?依赖:谁依赖于谁?为什么 ...

  2. 方便查看线程状况的jsp页面

    此方法来自深入理解java虚拟机一书,用作管理员页面,可以随时用浏览器查看线程堆栈 <%@ page language="java" import="java.ut ...

  3. 源码编译安装Nginx全程视频演示

    基本步骤: 1.首先停止现有web系统, #/etc/init.d/apache2 stop 2.将源码拷贝到/usr/local/src #cp /home/ditatompel/Public/Ng ...

  4. 使用python制作二维码

    python-qrcode是个用来生成二维码图片的第三方模块,主要依赖的是 PIL 模块和 qrcode 库.(PIL模块只支持python2.7及以下版本,python3之后无法使用,官方推荐pyt ...

  5. ES6学习笔记(一)新的变量定义命令let和const

    1.一些历史 ES6(ECMAScript 6.0)是 JavaScript 语言的新一代标准,于2015 年 6 月正式发布,距今已经4年了,它的目标,是使得 JavaScript 语言可以用来编写 ...

  6. 【python 设计模式】单例模式

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某 ...

  7. HTML5多文件上传

    文章转载自:http://xiechengxiong.com/288.html 一个简单的HTML5多文件上传demo. 以前我们上传文件的时候,如果通过js上传,我们无法在本地直接预览图片,还得跑到 ...

  8. Vijos——T1053 Easy sssp

    https://vijos.org/p/1053 描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程 ...

  9. 9.Nexus私服安装配置

    第一步:下载nexus-webapp-1.9.2.4.war包,然后复制到tomcat下的webapps文件夹中 第二步:启动tomcat 第三步:訪问http://localhost:8080/ne ...

  10. javescript定时器demo

    本来认为这个事情还是挺easy的不值得写上去,今天同事突然问我.我心想曾经写过,可是就是想不起函数的名称的,于是翻了一下原来的代码. function run() { interval = setIn ...