6.docker基础网络
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。
1.四种基础网络类型介绍
bridge 默认类型 NAT模式
host host类型,使用宿主机网络,网络性能最高
container 容器类型。使用其他容器共用网络,k8s中使用
none 没有网络,上不了外网
2.bridge默认网络类型 NAT模式
#启动一个alpine容器
[root@docker02 ~]# docker run -it alpine:latest
##另开一个窗口查看这个容器的详细信息
[root@docker02 ~]# docker container inspect nostalgic_brown |grep -A2 Networks
"Networks": {
"bridge": {
"IPAMConfig": null,
##上面是默认的,接下来我们指定一下网络类型
[root@docker02 ~]# docker run -it --network bridge alpine:latest
[root@docker02 ~]# docker container inspect objective_wu |grep -A2 Networks
"Networks": {
"bridge": {
"IPAMConfig": null,
###发现默认的网络类型是bridge,nat模式
3.host类型,使用宿主机网络,网络性能最高
##退出之前的容器,重新启动一个指定网络类型是host
[root@docker02 ~]# docker run -it --network host alpine:latest
[root@docker02 ~]# docker container inspect hardcore_burnell |grep -A2 Networks
"Networks": {
"host": {
"IPAMConfig": null,
##这时候的容器是跟宿主机共用一个网络,在容器里执行抓包命令的话就相当于在宿主机上执行。包括/etc/hosts文件内容也是一样的。这就是共 用网络的特点,但是如果宿主机把端口占用了,容器就不能用了,容器就需要指定端口了。否则容器肯定起不来,会提示端口被占用
4.container容器类型,使用其他容器共用网络,k8s中使用
#查看有哪些容器在运行。过滤下它的ip地址
[root@docker02 ~]# docker inspect registry|grep -i ipadd
#启动一个新容器,使用container
[root@docker02 ~]# docker run -it --network container:registry alpine:latest
##也就是说它俩不能出现端口冲突,如果端口冲突肯定报错,后起的容器肯定起不来

5.none没有网络,上不了外网
[root@docker02 ~]# docker run --network none -it alpine:latest
6.创建一个自定义网络
##docker network ls网络默认就可以查看
[root@docker02 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
5af89b2fa9a8 bridge bridge local
c21ecb12d13f host host local
9f7a85b48803 none null local
##k8s就是这三种网络
##我们用compose编排启动的容器,会自动创建一个网络然后再启动容器,尽到一个容器的目录,把容器停掉。它不止会把容器删掉,就连网络也会跟着一起删掉。
[root@docker01 ~]# cd /opt/dockerfile/docker-compose/zabbix/
[root@docker01 /opt/dockerfile/docker-compose/zabbix]#docker-compose down
再次查看网络,发现自动创建的网络没了
可以启动一遍观察一下,第一行就是创建网络docker-compose up -d
##可以看看它的属性
[root@docker01 ~]# docker network inspect zabbix_default
##创建自定义网络
[root@docker01 ~]# docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 sunfuyang
再执行docker network ls 可以看到多了一个名字叫sunfuyang的网络
##创建指定名字与网络的容器
[root@docker01 ~]# docker run -d --name web01 --network sunfuyang nginx:latest
[root@docker01 ~]# docker run -it --network sunfuyang alpine:latest
##当使用同一个网络的时候,容器之间的通讯,用名字就可以了,就再也不用担心它的ip地址是多少了
未经允许不得转载:孙某某的运维之路 » 6.docker基础网络
评论已关闭