Docke之数据卷管理容器——动静分离
一 、背景阐述
在实际的工作中我们通过容器实现应用程序的拆分,即将一个大的单体应用拆分成多个微服务进行解耦操作,DevOps、微服务化,现在已经成为烂大街的“潮词”。基于这个思路,我们再一次对单个微服务进行再次拆分解耦,实际上应用的拆分基本已经不能再拆了,那我拆什么呢?拆动态代码、拆配置文件、拆输出的日志,拆这个的目的也是受容器的隔离特性启发,我们将动态代码进行更新、配置文件修改,部署在容器外,然后挂在倒容器中使用,但是这样也给数据的安全性带来隐患,不便于维护与快速迁移,为此我借助容器的数据卷容器封装特性对动态代码、配置文件、输出日志进行挂载使用,一方面在服务被攻击后,攻击者即使修改程序配置等信息,他们也无法对运行在其他容器中的程序进行重启等操作,也就无法让修改的内容生效,解决了安全性的同时快速迁移也得到了解决;同时由于攻击者没有访问宿主机的权限,也就无法对服务器本身的配置产生影响或更为严重的后果。
二、通过SSH服务容器管理数据卷容器
由于数据卷容器中的数据卷不方便直接管理,因此,我们通过将数据卷容器的数据卷挂载到另外一个独立的容器中,再通过这个容器修改数据卷中的数据;如下所示:
通过SSH服务容器管理数据,可以是安全性得到一定的提升;
二、实践案例
场景: 若对外提供一个基于Nginx 的Web服务,先将Nginx的配置和静态HTML文件代码分别存放于两个数据卷容器的数据卷中。再创建一个能够提供SSH 服务的容器,用来管理两个数据卷容器所提供的数据。
2.1 具体实现过程:
2.1.1 分别创建用于存放配置和代码的数据卷容器,以及它们提供的数据卷;
# 创建配置数据卷容器
[root@localhost SSHD]# docker create --name config -v /etc/nginx alpine:3.8 echo Nginx Configuration
# 创建静态HTML数据卷容器
[root@localhost SSHD]# docker create --name code -v /var/html alpine:3.8 echo Nginx Configuration
2.1.2 创建一个Nginx 应用程序容器;
只创建,不启动,因为我们是从数据卷容器中挂载配置,而现在存储配置的数据卷中还没有加入配置,所以还不能正确的启动Web 服务;
# 创建一个Nginx应用程序容器,只创建,不启动
[root@localhost SSHD]# docker create --name web --volumes-from code --volumes-from config -p 9081:80 nginx
2.1.3 创建SSH 服务容器实现配置加载和静态文件上传;
通过SSH 服务将配置加到存储配置的数据卷中。自己构建SSH服务镜像或到Docker Hub 上pull一个SSH镜像;
[root@localhost SSHD]# docker run -d -P --name mysshd --volumes-from code --volumes-from config mydockerssh:v1
2.1.4 启动Nginx Web应用程序
[root@localhost SSHD]# docker start web
2.1.5 访问Web服务
总结
安全的远程连接配置容器应用服务器的实践案例如上所示,该案例还可以扩展为对多容器化的应用迭代升级部署;