容器技术
相比于传统虚拟化技术对硬件资源的虚拟,容器技术是对进程的虚拟,提供更轻量级的虚拟化,实现进程和资源的隔离,更接近裸机性能。
Docker容器使用Docker Engine进行资源分配调度并调用Linux内核namespace API进行隔离,所有应用共用主机操作系统。
Docker 的四大网络模式
bridge模式:通过–network=bridge指定,使用Linux bridge和veth pair为Docker容器创建独立的网络栈,保证容器内的进程使用独立的网络环境,使容器和容器、容器和宿主机之间能实现网络隔离。
host模式:通过–network=host指定,容器和宿主机共享一个network namespace(网卡,IP和端口等)
container模式:通过–network=container:NAME_or_ID指定,新的容器将与一个已经存在容器共享network namespace,两个容器的进程可以通过lo网卡进行通信
none模式:通过–network=none指定,不对Docker容器的network namespace进行任何网络配置
Docker网络配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| # 查看容器IP docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId> docker inspect <containerNameOrId> | grep '"IPAddress"' | grep -n 1
# 端口映射 docker run -p host_Port:container_Port -d <imageName> # 实现原理为在iptable的nat表中添加规则 iptables -t nat -nL # 查看端口映射 docker port <container> <port number>
# 访问外网 sysctl net.ipv4.ip_forward=1
# DNS和主机名 cat /etc/resolv.conf cat /etc/hosts cat /etc/hostname # 修改dns docker run --dns=address -d <imageName> # 修改主机名 docker run -h hostname -d <imageName> docker run --hostname=hostname -d <imageName>
# 创建自定义网络 docker network create -d bridge --subnet 172.25.0.0/16 netName # 查看自定义网络信息 ip addr docker inspect netID # 查看主机的docker network docker network ls # 删除自定义网络 docker network rm netID # 连接容器和网络 docker network connect netName_or_Id ContainerName_or_Id # 断开容器和网络的连接(NetworkMode不会改变) docker network disconnect netName_or_Id ContainerName_or_Id
# 发布服务 docker network create -d bridge netName docker service publish svcName.netName docker service attach containerId svcName.netName # or docker run -itd --publish-service svcName.netName.bridge imageName
# 容器互联 docker run -d imageName --link=containerName_or_Id:aliasName
|
参考
《Kubernetes网络权威指南》