1.默认网络
docker网络:安装 Docker 以后,会默认创建三种网络,可以通过命令 docker network ls 查看。(bridge,host,none)三种模式。可以自己新建网络名称。
网络模式:
- bridge:
为每一个容器分配、设置IP等,并将容器连接到一个 dockerθ 虚拟网桥,默认为该模式。 - host:
容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 - none:
容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等。 - container:
新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享也P、端口范围等。2.Bridge模式
bridge是Docker服务默认会创建一个docker0网桥,该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
docker run的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的是docker0。
2.1 查看bridge网络
docker network inspect bridge
可以看到一些网络信息及使用该网络的容器:
2.2 网络缺陷
Docker Container不具有一个公有IP,即和宿主机eth0不处于同一个网段。结果是宿主机以外的机器不能直接和容器进行通信。
3.Host模式
Docker host是指使用Docker服务时所使用的宿主机。在Docker中,容器与宿主机的网络是完全独立的,即每个容器都有自己的IP地址和端口号,且容器内部的应用程序会认为它们处于一个独立的网络环境中。而Docker host是指运行Docker服务的计算机本身,它可以是实体计算机、虚拟机或者是云服务器等。
host 网络模式需要在创建容器时通过 --net host 或者 --network host 来指定。3.1 host网络优缺点
- 优点:
网络性能比较好,因为该模式将容器与宿主机共用同一个网络命名空间,直接使用宿主机的IP地址与外界通信,不需要进行网络地址转(NAT),也不需要为容器配置独立的网络环境。 - 缺点:
容器隔离性弱化,没有独立的网络栈。
Docker host上已经使用的端口及其他容器映射到主机的端口,容器就不能再使用。
4.None模式
Docker none模式是一种特殊的网络模式,它不为容器创建任何网络接口或连接到任何网络。在该模式下,容器不会有任何网络连接,无法使用网络通信,也无法访问外部网络或其他容器。
在none模式下,容器内部无法进行网络通信,因此需要在容器内部手动安装必要的软件包和工具,以便在容器内进行操作。每个容器都会分配一个自己的IP地址。
总的来说,docker none模式适用于需要隔离网络连接,或者需要在没有网络连接的情况下进行测试和安全性操作的场景。
5.Container网络模式
Container网络模式是一种较为特殊的网络模式,其目的是在容器间实现网络通信。在容器网络模式中,每个容器可以有自己的IP地址和端口,并且它们之间可以通过IP地址和端口进行通信。这种模式适用于多个容器需要共享网络环境,同时容器间需要进行通信的情况。
在Container网络模式中,容器可以与宿主机或其他容器进行通信,而无需进行网络地址转换(NAT)。这种模式可以提高网络性能和传输效率,同时也可以实现容器的网络隔离。
6.Docker ipv6配置
docker engine 的版本大于等于20.10.2,因为这个版本才开始支持ip6tables。
编辑 /etc/docker/daemon.json文件
vim /etc/docker/daemon.json
添加:
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"experimental": true,
"ip6tables": true
}
重启docker:
sudo systemctl restart docker
7.端口映射
-P 参数用来端口映射。
- 在运行容器时通过-p参数指定端口映射。例如,将宿主机的3309端口映射到mysql-5.7容器的3306端口:
docker run -d -p 3309:3306--name mysql-5.7 myimage-mysql:5.7.7。
- 对于已经运行的容器,可以通过docker commit命令将当前容器commit提交成为一个镜像,相当于备份镜像和容器。例如,首先停止mysql-5.7容器,然后使用docker commit将该容器commit提交成为一个新镜像,接着用docker rm删除原容器,最后使用
docker run -d -p 3309:3306--name mysql-5.7 myimage-mysql:5.7.7
命令启动新容器来实现端口映射。
评论