1. 首页
  2. 系统运维

Docker是个好东西,但不包治百病。

Docker是个好东西,但也不能包治百病,如果为了docker而docker,不仅它本身的优势发挥不出来,还会增加运维的复杂程度,本文是我学习docker的一些心得。

Docker的资源链接

Docker的安装:
https://yeasy.gitbooks.io/docker_practice/repository/dockerhub.html

Docker管理的面板:Portainer
https://www.portainer.io/installation/

Docker镜像中应该放一些什么文件?

应该是一些固定的、或者很少变动的运行环境的文件,而对于经常变动的,或者不停产生的文件,最好通过挂载一个主机目录作为该容器的数据卷来使用。因为这样可以通过宿主机的sftp服务,随时进行变更和调试。

那么也就说明,在服务器的部署当中,应该规划一些特定的文件夹,来放置这些容器的配置文件和工作文件。

当然通过在容器中安装ftp也可以做到,但是这样无疑会增加文件传输的复杂度,同时,还会涉及到复杂的容器端口映射问题。

对于一些基本的服务内容,如不涉及到与特定应用有强耦合关系,都不应该放在Docker里面,而是作为整个服务器的基本服务拿来使用。譬如一些基本的面板服务、ftp服务、网络安全服务,性能检测服务等。

适合进行Docker的应用

  • Tomcat+Jre
  • WordPress
  • 其他可能出现多个用例的应用
  • 某些厂商推荐使用Docker的用例,譬如Portainer

不适合进行Docker的应用

  • 数据库引擎;
  • 基本管理面板,譬如宝塔;
  • Nginx
  • FTP

Java项目的Docker部署方案

Docker中存放:Jre+Tomcat的一部分目录(注意,安装好以后将一些目录删掉);

通过挂载主机目录的方式,把以下目录挂载到主机对应的路径当中:

  • 日志;
  • 应用myapps(随着代码成熟度高以后,也可以考虑将它保存在Docker中);
  • 配置conf(可选);

这种方案的好处在于,随时可以通过ftp,将主机的对应路径的文件上传和下载,而不需要进入Docker就可以进行调整。

如何进入容器

建议采用docker exec -it xxxxxx /bin/bash
https://blog.csdn.net/halcyonbaby/article/details/46884605

经测试,如果容器中存在一个实际路径A,而容器又用绑定的方式,将宿主机的某个路径映射为同样的A,那么容器实际使用的数据是宿主机里面的数据;

踩坑快乐!

正常服务器版本是怎样的,Docker里面就争取是一模一样的,特别是版本。

还有在windows下正常的一些东西,到了linux下面可能就不灵了。
譬如:
1. tomcat里面的server.xml下面docBase,windows下可以直接下/xxx,linux下面就必须写${catalina.home}/webapps/xxx;
2.还有这个诡异的加解密机制。
http://www.jetchen.cn/bugfixed-aessecurerandom/

一些有趣的东西

一个可以在Docker中运行的邮件服务器
https://www.wutianxian.com/6893.html

机场搭建指南
https://toutyrater.github.io/basic/vmess.html
注意:nginx里面的跳转,127.0.0.1可能不能用,换成localhost

本文原文非中文版本,由BruceX进行翻译,如若转载,请注明出处:http://www.iota.love/201909/docker-is-good-but-not-for-all/