1, 持久化存储
docker 容器中一般不保存数据, 只封装系统和环境, 这样就存在一个问题, 一个 docker 容器的数据内容不能持久化, 且不能共享出来, 在生产中, 不能很好地提供服务. 为了解决这个问题, 就要涉及到 docker 的持久化存储和共享存储的技术了.
所谓持久化, 就是将真实机目录挂载到容器中, 让容器运行时所产生的数据都写入到真实机的目录中, 以此来提供持久存储.
-->-d 后台进程
->-p 映射端口 物理机端口: 容器端口
-->-v 物理机文件夹: 容器的目录 (容器中目录如果不存在, 会自动创建, 如果存在, 会覆盖掉)
->192.168.1.194:5000 远程镜像
2, 共享存储
现实生存环境中, 一般会有专门的文件服务器或者是分布式文件服务器集群来提供文件的存储, 此次通过共享文件夹的方式来实现共享存储.
(1) 文件服务器提供一个 nfs 共享存储 ==>192.168.1.254
- yum -y install nfs-utils
- vim /etc/exports
- /webroot 192.168.1.0/24(rw,sync)
- :wq
- systemctl restart nfs
(2)docker 主机
----mount 挂载共享
mount 192.168.1.254/webroot /mnt/
-- 用 - v 选项映射磁盘到容器中.
docker run -d -p 80:80 -v /mnt:/var/www/html 192.168.1.194:5000/wang:sh2
这样不管是在容器中写 html 网页, 还是在 / mnt / 目录下书写 html 网页, 或者是在文件服务器的 / webroot 下面书写 html 网页, 都可以在网页上被访问到.
这样可以提供负载均衡或者是工作上的同步而不互相干扰, 比如一位 web 编写人员写 a 网页, 另一位 web 编写人员写 b 网页, 不会出现相互干扰, 且书写的东西都被存储在真实的文件服务器中.
3,Docker 网络架构
docker 网络架构中引用的是 linux 网桥及虚拟交换机架构, 这里的虚拟交换机默认为 docker0, 也可以手工配置虚拟交换机, 不过一般是让 docker 服务自动配置.
(1) 安装一个网桥管理服务
[root@b2 ~]# yum -y install bridge-utils.x86_64
(2) 查看虚拟交换机
- [root@b2 ~]# brctl show
- bridge name bridge id STP enabled interfaces
- docker0 8000.0242ae16e82c no
- (虚拟交换机) (网卡)// 如果启动了容器, 则每一个容器会对应一张虚拟网卡
(3) 断开断开网卡与交换机的连接, 相当于拔网线
brctl delif docker0(虚拟交换机) 网卡名
(4) 查看默认 docker 创建的网络模型
- docker network list
- [root@b2 ~]# docker network inspect c088b2c8b1e7(网桥的 id) // 查看网桥的底层信息.
docker network 回车, 可以看到它的帮助
(5) 手动创建一个网络虚拟交换机
- docker network create [--help]
- docker network create --subnet 192.168.100.0/24(子网) -d bridge(指定是网桥) -o(参数) com.docker.network.bridge.name=docker1 docker1(名字)
- // 这样用 ifconfig 看到的名字依然为 docker1
- docker network ls
- ifconfig
(6) 启动容器时指定用哪张网桥, 不指定时用 docker0
docker run -it --network=docker1 192.168.1.194:5000/wang:sh2
(7)docker 会自动搭建路由器
创建的 docker1 用的网段是 192.168.100.0 网段的, docker0 是 172.17.0.0 网段的, 两个网段之间可以相互 ping 通.
4, 容器端口与物理主机端口绑定的原理:
底层原理是启动了 linux 内核的 firewalld(iptables) 的端口转发功能.
手动为已经起来的容器绑定端口
(1) 查看 iptables 的规则
- iptables-save
- -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.3:80
按照相同的书写写一条规则:
iptables -t nat -A DOCKER ! -i docker0(指定网卡) -p tcp -m tcp --dport 2022(物理端口) -j DNAT --to-destination 172.17.0.3:22
来源: http://www.bubuko.com/infodetail-2665529.html