Docker网络模式

目录

一.四种网络模式

1.Host模式

2.Container模式

3.Bridge模式(默认)

4.None模式

二.自定义网络

1.查看网络模式列表

[2.查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)](#2.查看容器信息(包含配置、环境、网关、挂载、cmd等等信息))

3.指定分配容器IP地址

4.自定义网络固定iP

三.暴露端口

四.总结

1.进入容器没有systemctl命令解决方案

2.Docker网络模式有哪些?分别提供哪些功能?

3.如何把脚本传入一个已经运行的容器

(1)使用cp命令复制进去容器

(2)使用cp命令从容器复制出来

4.docker中,假设运行一个业务容器,但是业务容器需要暴露三个端口,启动后发现自己少加了一个端口。如何动态添加端口(如何对已经运行的容器添加或者修改端口)?


一.四种网络模式

1.Host模式

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口

  • 相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。
  • Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
  • 一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。

2.Container模式

创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围

在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

3.Bridge模式(默认)

默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat 表配置与宿主机通信

  • bridge模式是docker的默认网络模式,不用--net参数,就是bridge模式。
  • 相当于Vmware中的 nat 模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。

4.None模式

该模式关闭了容器的网络功能

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

二.自定义网络

1.查看网络模式列表

docker network ls

2.查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)

docker inspect  容器ID

3.指定分配容器IP地址

docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
#以上会报错,因为用户使用的ip地址不被规则所允许,docker0定义的就是按照顺序来,所有需要创建一个

4.自定义网络固定iP

可以先自定义网络,再使用指定IP运行docker

docker network create --subnet=172.18.0.0/16 wsk
docker run -itd --name test01 --net wsk --ip 172.18.0.2 centos:7 /bin/bash
docker inspect test01 | grep IPAddress

三.暴露端口

两个容器如果端口一致的情况下,暴露出去会产生地址冲突,所以需要在docker0上做一个端口映射,通过ens33暴露出去端口不同就可以了

-p 自定义端口 ( 宿主机端口:容器内端口 )

-P 随机端口 (-P 49153起始 49153到65535)

#自定义端口
docker run -itd -p 8081:80 nginx:latest /bin/bash
#需要在容器中开启nginx
docker exec -it f282a476b06c /bin/bash -c nginx
#在网页测试
http://192.168.59.112:8081/
 
 
# 随机端口
docker run -itd -P nginx:latest /bin/bash

网页验证:

四.总结

1.进入容器没有systemctl命令解决方案

docker run -itd  --name cenos_v1 --privileged=true centos:7 /sbin/init
docker exec -it cenos_v1 /bin/bash

2.Docker网络模式有哪些?分别提供哪些功能?

我这边了解到的有四种,Host container none bridge

  • Host :与宿主机共享网络名称空间/网络协议栈
  • Container:多个容器之间共享一个network namespaces
  • None :自闭空间
  • bridge:默认模式通过Veth对连接容器与docker0网桥,网桥分配给容器IP,同时**docker 0**作为"局域网"内容器的网关,最后和宿主机网卡进行通讯

3.如何把脚本传入一个已经运行的容器

#使用cp命令复制进去容器
docker cp start.sh cenos_v1:/opt
#使用cp命令从容器复制出来
docker cp cenos_v1:/opt/start.sh ./
(1)使用cp命令复制进去容器
(2)使用cp命令从容器复制出来

4.docker中,假设运行一个业务容器,但是业务容器需要暴露三个端口,启动后发现自己少加了一个端口。如何动态添加端口(如何对已经运行的容器添加或者修改端口)?

首先,我们可以修改/var/lib/docker/containers/containers_id中两个文件

(1)hostconfig.json 中的 portbinding:{}修改端口或添加端口

(2)修改config.v2.json文件,修改对应的Ports{}来添加/修改端口

最后,重启守护进程。

相关推荐
Hacker_Nightrain1 小时前
网络安全CTF比赛规则
网络·安全·web安全
sam-1231 小时前
k8s上部署redis高可用集群
redis·docker·k8s
网络安全指导员1 小时前
恶意PDF文档分析记录
网络·安全·web安全·pdf
Fanstay9852 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
co0t3 小时前
计算机网络(11)和流量控制补充
服务器·网络·计算机网络
白总Server3 小时前
JVM解说
网络·jvm·物联网·安全·web安全·架构·数据库架构
清尘沐歌3 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议
ggaofeng3 小时前
通过命令学习k8s
云原生·容器·kubernetes
Li_0304063 小时前
Java第十四天(实训学习整理资料(十三)Java网络编程)
java·网络·笔记·学习·计算机网络
death bell3 小时前
Docker基础概念
运维·docker·容器