• 售前

  • 售后

热门帖子
入门百科

怎样利用Docker容器实今世理转发与数据备份详解

[复制链接]
123457757 显示全部楼层 发表于 2021-10-25 19:59:10 |阅读模式 打印 上一主题 下一主题
前言
我们将应用以Docker容器的方式摆设到服务器上的时间,通常需要考虑两个方面的的题目:网络和存储。
网络方面,有些应用需要占用端口,而此中一部分应用甚至需要对外提供访问。
出于安全方面考虑,代理转发方式相对于直接开放防火墙端口方式更为符合。
存储方面,由于容器内部并不得当做数据持久化,以是一样平常通过挂载卷的方式将数据生存在服务器磁盘上。
但是服务器也不能包管绝对安全,以是数据也需要备份到云上。
代理转发

默认情况下容器之间的网络是互相隔离的,但是对于一些有关联的应用而言(web前端容器和服务端容器以及数据库容器),一样平常会把它们分别到一个独立的桥接子网络(以下简称子网),使得这些容器之间可以相互通讯,但同时又与外部进行隔离。
对于需要对子网外部提供访问的容器,可以将端口映射到服务器主机上。整个布局大抵如下:


上面的端口映射只办理了服务器(宿主机)访问容器网络服务的题目,假如我们要从当地呆板上通过因特网访问服务器上的容器,一样平常是不行的,由于服务器除了安全考虑,默认情况下会启用防火墙,并只开放22等少数几个端口。
对于传统的网络进程,实现方式就是通过反向代理服务器来对网络哀求进行转发,比如使用Nginx设置如下代理:
  1. # 针对不同路径进行转发
  2. server {
  3. listen  80;               
  4. server_name www.xx.com;            
  5. location /a {
  6.   proxy_pass localhost:1234;
  7. }
  8. location /b {
  9.   proxy_pass localhost:2234;
  10. }
  11. }
  12. # 针对不同域名进行转发
  13. server {
  14. listen  80;               
  15. server_name www.yy.com;            
  16. location / {
  17.   proxy_pass localhost:1234;
  18. }
  19. }
复制代码
那么此时题目好像是办理了,但是假如Nginx也是在容器中运行呢?
刚才我们提到子网对于外部的容器是隔离的,那么Nginx容器将无法访问这些对外服务。
你可能很容想到把Nginx容器分别到对应的子网络这种方式,容器的确支持多个子网的设置,但是这种操纵方式的贫困在于,每次新增子网时都需要修改Nginx容器的网络设置并重启容器。
以是比力好的方式是将Nginx设置为HOST网络模式。放弃Nginx容器与服务器的隔离性,直接与服务器共享网络和端口。那么Nginx容器即可直接访问全部映射了端口的容器。
如下图所示:


数据备份

应用场景

考虑到速率和安全性方面的题目,通常公司会有一些只供内网访问的服务器。但是这些服务器上的数据包罗服务器本身都是随时可能被修改或者发生故障的。
以是数据备份显得尤为紧张。这里我们讨论体积较小的数据备份。
以我近来为团队搭建的知识库服务器为例。
该web应用是一个小型的python服务,以容器的情势摆设在内网服务器上,支持在线编辑功能,以md文件的情势生存数据。
由于容器一旦发生故障则内部数据无法再访问,以是直接放在容器中肯定是不安全的,只能通过挂载文件的方式让容器和服务器共享数据读写。
那么通过什么方式对数据进行备份呢?这里我们选择GitHub的私有堆栈来进行生存。缘故原由有3个:
      
  • 安全。数据不容易丢失和盗取。  
  • 方便,只需要通过git下令即可备份。  
  • 快速。由于备份的数据体积和数目并不大。
固然方式已经确定,但要实现还有两个题目:
      
  • 向GitHub堆栈需要进行权限认证。  
  • 怎样定时或主动提交数据到GitHub。
实现方法

起首按照容器单一责怪的原则,我们应该创建一个新的容器用来实行备份使命。
这里我们我可以使用docker-compose或者别的编排工具来创建多个容器。
然后就是权限认证,在本机创建ssh key并参加到GitHub的设置中,如许使得容器可以推送文件到对应堆栈。
不过如今只是服务器可以推送代码,容器还不行,以是还需要将.ssh文件拷贝到容器中。
末了是主动备份的实现,比力好的方式是每次文件有变动的时间提交并推送代码,但是目前并没有找到在容器中监听文件的简单方式,以是退而求其次,采取定时使命的计谋,即每隔5分钟实行对应的git下令来提交和推送文件到堆栈。
这里可以使用基于镜像busybox封装的轻量级的容器,将项目代码挂载到容器中包管文件的同步更新,然后启动cron服务来实现操纵。
总结
以上就是这篇文章的全部内容了,希望本文的内容对各人的学习或者工作具有肯定的参考学习代价,假如有疑问各人可以留言交流,谢谢各人对草根技术分享的支持。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作