docker 代理_利用Docker容器实现代理转发和数据备份
我们将应用以Docker容器的方式部署到服务器上的时候,通常需要考虑两个方面的的问题:网络和存储。
网络方面,有些应用需要占用端口,而其中一部分应用甚至需要对外提供访问。 出于安全方面考虑,代理转发方式相对于直接开放防火墙端口方式更为合适。
存储方面,由于容器内部并不适合做数据持久化,所以一般通过挂载卷的方式将数据保存在服务器磁盘上。 但是服务器也不能保证绝对安全,所以数据也需要备份到云上。
代理转发
默认情况下容器之间的网络是互相隔离的,但是对于一些有关联的应用而言(web前端容器和服务端容器以及数据库容器),一般会把它们划分到一个独立的桥接子网络(以下简称子网),使得这些容器之间可以相互通信,但同时又与外部进行隔离。 对于需要对子网外部提供访问的容器,可以将端口映射到服务器主机上。整个结构大致如下:
上面的端口映射只解决了服务器(宿主机)访问容器网络服务的问题,如果我们要从本地机器上通过因特网访问服务器上的容器,一般是不行的,因为服务器除了安全考虑,默认情况下会启用防火墙,并只开放22等少数几个端口。
对于传统的网络进程,实现方式就是通过反向代理服务器来对网络请求进行转发,比如使用Nginx配置如下代理:
# 针对不同路径进行转发
server {listen 80; server_name www.xx.com; location /a {proxy_pass localhost:1234;}location /b {proxy_pass localhost:2234;}
}
# 针对不同域名进行转发
server {listen 80; server_name www.yy.com; location / {proxy_pass localhost:1234;}
}
那么此时问题似乎是解决了,但是如果Nginx也是在容器中运行呢? 刚才我们提到子网对于外部的容器是隔离的,那么Nginx容器将无法访问这些对外服务。 你可能很容想到把Nginx容器划分到对应的子网络这种方式,容器的确支持多个子网的配置,但是这种操作方式的麻烦在于,每次新增子网时都需要修改Nginx容器的网络配置并重启容器。
所以比较好的方式是将Nginx设置为HOST网络模式。放弃Nginx容器与服务器的隔离性,直接与服务器共享网络和端口。那么Nginx容器即可直接访问所有映射了端口的容器。 如下图所示:
数据备份
应用场景
考虑到速度和安全性方面的问题,通常公司会有一些只供内网访问的服务器。但是这些服务器上的数据包括服务器本身都是随时可能被修改或者发生故障的。 所以数据备份显得尤为重要。这里我们讨论体积较小的数据备份。 以我最近为团队搭建的知识库服务器为例。 该web应用是一个小型的python服务,以容器的形式部署在内网服务器上,支持在线编辑功能,以md文件的形式保存数据。 因为容器一旦发生故障则内部数据无法再访问,所以直接放在容器中肯定是不安全的,只能通过挂载文件的方式让容器和服务器共享数据读写。 那么通过什么方式对数据进行备份呢?这里我们选择GitHub的私有仓库来进行保存。原因有3个:
- 安全。数据不容易丢失和窃取。
- 方便,只需要通过git命令即可备份。
- 快速。由于备份的数据体积和数量并不大。
虽然方式已经确定,但要实现还有两个问题: 1. 向GitHub仓库需要进行权限认证。 2. 如何定时或自动提交数据到GitHub。
实现方法
首先按照容器单一指责的原则,我们应该创建一个新的容器用来执行备份任务。 这里我们我可以使用docker-compose或者其它编排工具来创建多个容器。 然后就是权限认证,在本机创建ssh key并加入到GitHub的设置中,这样使得容器可以推送文件到对应仓库。 不过现在只是服务器可以推送代码,容器还不行,所以还需要将.ssh文件拷贝到容器中。 最后是自动备份的实现,比较好的方式是每次文件有变动的时候提交并推送代码,但是目前并没有找到在容器中监听文件的简单方式,所以退而求其次,采用定时任务的策略,即每隔5分钟执行对应的git命令来提交和推送文件到仓库。 这里可以使用基于镜像busybox封装的轻量级的容器,将项目代码挂载到容器中保证文件的同步更新,然后启动cron服务来实现操作。
docker 代理_利用Docker容器实现代理转发和数据备份相关推荐
- linux开启docker mysql_Linux服务器利用Docker快速搭建MySQL数据库
首先你要有一台Linux服务器 利用Xshell远程软件连接后就可以开始安装docker容器了. 1.第一步在Linux服务器上安装docker 2.第二步利用Docker拉取mysql镜像 Cent ...
- Docker最全教程——数据库容器化之持久保存数据(十一)
Docker最全教程--数据库容器化之持久保存数据(十一) 原文:Docker最全教程--数据库容器化之持久保存数据(十一) 上一节我们讲述了SQL Server容器化实践(注意,SQL Server ...
- python 私有云_利用Docker+NextCloud搭建私有云盘
利用Docker+NextCloud搭建私有云盘 NextCloud 是一款开源网络硬盘系统,最新版本是15,NextCloud 源代码完全开放,你可以在开源许可协议的约束下免费使用,对于需要专业支持 ...
- docker初识_初识 docker 搭建自己的开发环境
换了一台设备,程序猿嘛第一件事肯定是先把开发环境搭建起来,以前为了方便都是搞的集成环境,这次准备下载集成环境的时候,突然想起 docker 这个东西,在下虽然了解一些概念性的东西但一直为曾实践.人嘛, ...
- docker 网络_初探Docker的网络模式
xiaohang 一个写不好代码的年轻人 钢铁侠的铁杆粉丝:I am Iron Man! 刚接触Docker的时候,你是否好奇容器之间是怎么通信的呢? 今天我们就一起来认识一下docker的网络吧~ ...
- centos7 docker端口_使用Docker部署Python应用
0 引言 在linux系统部署Python应用需要安装较多依赖,在内网环境下十分繁琐,而且有时候还需要在其他服务器运行,则需要重复搭建环境和部署应用,因此本文介绍利用docker容器技术来部署.鉴于本 ...
- Docker基础、利用Docker Compose部署Vue项目
前言 最近,接触了Docker,写一个笔记记录一下学习的成果.参考了docker官网和一个b站老师的讲解教程Docker快速上手教程,受益良多! 一.Docker安装和重要概念 1.安装docker ...
- docker使用_使用Docker正确的姿势
通过VS Code和Docker扩展成为Docker高级用户. > Photo by Michał Parzuchowski on Unsplash 您可以使用选择的语言来实施服务. 现在,您想 ...
- Docker最全教程——数据库容器化之持久保存数据(十二)
上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...
最新文章
- python日志输出到屏幕,python日志写入文件
- 第22届清华大学电子设计大赛决赛
- android edittext输入邮箱,[Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
- 一文读懂分布式架构知识体系(内含超全核心知识大图)
- FreeRTOS系列第1篇---为什么选择FreeRTOS?
- 端午小长假--前端基础学起来02与浏览器交互,表单标签
- 简洁!get请求和post请求的区别——Web网络系列学习笔记
- Java实现用户头像上传(修改默认文件大小限制)
- python倒三角形_python写个三角形的问题
- mysql ip 远程连接不上_【技术贴】解决MySql连接不上 ip远程连接Host is not allowed to conn-阿里云开发者社区...
- Mac text edit pdf reader
- 【分享】一次单体架构改造成微服务架构的拆分实践
- java实现控制继电器_单片机控制继电器
- 颜色空间转换-从RGB到LCH-亮度饱和度色度
- 5G接入网学习:什么是C-RAN、D-RAN?
- 智能家居监控移动手机组态现实生活中的应用
- python安装在什么地方_python的第三方库库安装在哪里了
- 2021年下半年信息系统项目管理师下午真题及答案解析
- Python 无监督学习实用指南:1~5
- Python实现数字的补数的两种方法
热门文章
- 案例实操-Top10热门品类
- C函数改写成汇编语言函数,帮忙将一个C函数写成汇编语言
- mysql 字符串某个位置_mysql 定位字符串的位置
- python合并表格_python合并表格sheets
- php网站怎么看用户名,首页登录后怎么在首页显示用户名以及隐藏登录框?
- Python爬虫之(八)数据提取-Beautiful Soup
- 生存分析——快手的基于深度学习框架的集成⽣存分析软件KwaiSurvival(一)
- Python如何在Dataframe中新添加一列
- 51NOD 1185 威佐夫游戏 V2(威佐夫博弈)
- 阿里HBase的GC优化实践,能够降低java垃圾回收时间!