目录
3.2 查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)
2. docker中,假设运行一个业务容器,但是业务容器需要暴露三个端口,启动后发现自己少加了一个端口。如何动态添加端口(如何对已经运行的容器添加或者修改端口)?
本文将介绍docker 容器的网络模式和容器卷的内容


注:以上几种模式不需要手动配置,真正需要配置的是自定义网络

总结:与宿主机共享网络名称空间/网络协议栈。IP共享、端口范围共享

总结:多个容器之间共享一个network namespaces ,多个容器共用一个IP和端口范围

总结:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过docker 0 网桥及 iptables和nat表配置与宿主机通信

总结:自闭空间,无网卡,无需网络连接
overlay(又叫叠加网络、覆盖网络)简单理解就是把一个逻辑网络建立在一个实体网络之上。
其在大体框架上对基础网络不进行大规模修改就能实现应用在网络上的承载,并能与其它网络业务分离,通过控制协议对边缘的网络设备进行网络构建和扩展是SD-WAN以及数据中心等解决方案使用的核心组网技术。
一个Overlay网络主要由三部分组成:

总结:使用外部的服务组件作为网关和映射,例如ingress-nginx
1、docker中有几种网络模式,分别提供哪些功能
bridge :使用docker 0作为网桥容器,桥接容器与宿主机(网络)
Host :与宿主机共享网络名称空间/网络协议栈
Container:多个容器之间共享一个network namespaces
None :自闭空间
Bridge:默认模式通过Veth对 连接容器与dockerO网桥,网桥分配给容器IP,同时docker0作为“局域网”内容器的网关,最后和宿主机网卡进行通讯
2、两个容器如何通讯
host网络模式:基于local
container网络模式:基于其中提供的container
bridge网络模式:基于docker 0网桥loopback :回环网卡、TCP/IP网卡是否生效
virtualt bridge: linux自身继承了一个虚拟化功能(kvm架构),是原生架构的一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安装虚拟网卡
(示例:安装workstation(虚拟化平台)之后,会在网络适配器中会多出VWMnet1 WMnet8 VWMnet0)
docker 0 :容器的网关,绑定物理网卡,负责做NAT地址转换、端口映射
docker 0 :本身也是一种容器
docker network ls

docker inspect 容器ID

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

可以先自定义网络,再使用指定IP运行docker
- docker network 【--network bridge】 create --subnet=172.112.0.0/16 yxp1
- docker run -itd --name test03 --net yxp1 --ip 172.112.0.8 centos:7 /bin/bash


两个容器如果端口一致的情况下,暴露出去会产生地址冲突,所以需要在docker0上做一个端口映射,通过ens33暴露出去端口不同就可以了
-p:自定义端口 ( 宿主机端口:容器内端口 )
-P: 随机端口 (-P 49153起始 49153到65535)
- #自定义端口
- docker run -itd -p 789:80 nginx:latest /bin/bash
- #需要在容器中开启nginx
- docker exec -it f282a476b06c /bin/bash -c nginx
- #在网页测试
- http://192.168.111.20:789/
-
-
- # 随机端口
- docker run -itd -P nginx:latest /bin/bash
#自定义端口


虽然端口已经映射了但是页面访问不了

原因: /bin/bash 也是一个Cmd ,和 cmd 冲突(cmd 是直接启动nginx);如果有多个cmd 会冲出

解决方法:

网页就能访问

使用-P:
- docker run -itd -P nginx /bin/bash # -P随机端口 范围:49153-65535
- docker exec 4212da198593 nginx #运行nginx

网页测试:

- docker exec -it 容器id /bin/bash -c 'nginx'
-
- docker exec 容器id/容器name 执行的命令
- #使用cp命令复制进去容器
- docker cp start.sh cenos_v1:/opt
- #使用cp命令从容器复制出来
- docker cp cenos_v1:/opt/start.sh ./
#使用cp命令复制进去容器

#使用cp命令从容器复制出来

解决方案:
--privileged=true(指定此容器是否为特权容器),使用此参数,则不能用attach- 案例:
- docker run -itd --name test02 --privileged=true centos:7 /sbin/init
- # /sbin/init 内核启动时主动呼叫的第一个进程
- #可以使用docker inspect 容器ID
- docker exec -it centos-systemd /bin/bash #进去容器
- yum install httpd
- systemctl status httpd


我这边了解到的有四种,Host container none bridge overlay
首先,我们可以修改/data/docker/containers/containers_id中两个文件
①hostconfig.json 中的 portbinding:{}修改端口或添加端口
②修改config.v2.json文件,修改对应的Ports{}来添加/修改端口
最后,重启守护进程。
管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Containers) 。
数据管理操作
数据之间的共享(目的)

将容器内部的配置文件目录,挂载到宿主机指定目录下
数据卷默认会一直存在,即使容器被删除
修改配置文件:
容器内部产生的日志,如何收集:
传入变量挂载到宿主机在宿主机
需求:宿主机目录/var/www挂载到容器中的/data1
- #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
- #-v选项可以在容器内创建数据卷,是volume的缩写
- docker run -it --name test01 -v /var/www:/data1 centos:7 bash
- ls
-
- #返回宿主机进行查看
- cd /var/www/
- ls
-
- #在容器中创建文件
- echo "this is test01 file" > /data1/test.txt
-
- #在宿主机查看是否有内容
- cat /var/www/test.txt
1.#把宿主机挂载到容器内部

2、#另外开一个终端在宿主机进行查看
3. #在容器中创建文件
![]()
4、#在宿主机查看是否有内容

5. 在宿主机上添加内容查看


让两个容器实现数据共享
如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。
需求:创建数据卷容器
- #创建一个容器作为数据卷容器
- docker run -it --name test1 -v /data1 -v /data2 centos:7 bash #创建并进入容器
- echo "this is test02 file" > /data1/test.txt #容器内创建测试文件1
- echo "THIS IS TEST2 FILE" > /data2/TEST.txt #容器内创建测试文件2
-
- #使用--volumes-from来挂载test2容器中的数据卷到新的容器
- docker run -it --name test2 --volumes-from test1 centos:7 bash #创建并进入容器
- cat data1/test.txt #查看测试数据是否同步
- cat data2/TEST.txt
1、创建一个容器作为数据卷容器并创建文件

2、#使用–volumes-from来挂载test2容器中的数据卷到新的容器
4.3 容器互联 (使用centos镜像)- docker run -itd -P --name web1 centos:7 /bin/bash //创建并运行容器取名web1,端口号随机映射
- docker exec -it 容器ID /bin/bash
-
- #另起一个终端
- docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash //创建并运行容器取名web2,链接到web1和其通信
- #--link:打通隧道
- docker exec -it 容器ID /bin/bash
-
- #两个容器都下载
- yum -y install net-tools //各自下载ifconfig的工具
- 验证:
- 进web2容器 ping web1

两个容器都下载




验证:


如何实现docker持久化
在生成容器的同时,加上-v选项,指定把当前服务器的目录映射到容器中