践行devops (3)----docker安装
这一块本来是打算写jenkins安装的
想想还是写docker吧
先插一段故事吧.
第一次听说docker 是大四在中投出差的时候,当时微软的一个团队说要用docker 运行什么东西
这个东西就是我旁边的同事弄得,问他什么是docker,他回答说,可以理解为轻量级的虚拟机.
后来也接触过一点docker 但是都不深
在平安有1个事情搞得我很头疼,日志问题,为此还特地去研究了springboot 的日志
当时,平安的要求是把日志分类,我当时在自己的电脑测试了ok的,发到平安的机器上面一看没有日志输出,真是见鬼
了,为了验证我到多台机器上面去跑程序,结果都是有的,但是一到平安的机子上面就没有,真的很抓狂
上周也遇到一个很意外的情况
springcloud 的eureka启动不了
eureka 几乎没有代码,启动器起来就不需要管它,这样的项目,基本上就不需要重启,跟新之类的.
上次遇到一个eureka不下线微服务的问题,手动关掉eureka之后,启动不起来了.
打电话问了头头有没有改代码,头头说没有啊,一直都没有动啊
我赶紧从git上面下载一个本地跑一下,在本地启动没有报错啊,相同jar再次传到linux上面又报错
报错信息是:log4j2.xml not found
很奇怪的报错
当时去研究springboot 的日志的时候 查过springboot 的默认日志框架是logback, 这个log4j2.xml 是log4j的第二代日志框架的配置文件啊,问题在于eureka几乎没有逻辑代码,就一个启动类,也没有指定什么log4j2的框架,那应该默认走logback才对
怎么办了?提示缺少log4j2,xml 那就加上呗,加上去再放到linux上面跑一下 这次不报 log4j2.xml not found
但是报错是这个 log4j2.xml 有问题 .这个就很尴尬了,这个文件是从其他地方复制过来的,按理来说应该不会有什么问题
再想办法.
这个时候注意到属性文件里面没有application.properties 这个属性文件,而是几个eureka 的配置文件,当时想会不会是因为 缺少这个默认的属性文件了?
因为springboot在启动的时候会按照优先级去加载属性文件,有可能没有这个属性文件,导致没有去初始化logback,然后eureka的框架代码用到了 log4j2 进而导致log4j2报错.
那把application.properties 加上,并且配置一下logback日志信息看下了?
结果成功了,程序成功的跑起来没有报错.
上面的分析过程还是有点问题,那就是没有办法解释 为啥同样的代码,也是相同的机器,以前运行ok 的,现在就不ok了呢?为啥在windows 上面可以正常的运行,在linux上面就不行了?
鬼知道其中的原因,springboot本身就做了很多的封装,这一块那一块的,作为我们软件开发者,你只能去猜测什么地方可能出现问题,然后去验证,我想真正能够知道原因的也只有springboot的开发者了吧,源码级别的分析总会知道的.
故事讲完了,回到安装吧
上面的情况可能比较难出现,但是还是有一定的几率出现,一旦出现了,那就比较的头疼.
docker技术很好的解决了这个问题
docker 本身就是统一环境用的,而且非常的方便,今天还发现一个docker 的其他的妙用,那就是可以用来安装科学计算环境之类的
之前周围有的人 安装个opencv 配置python 就很够呛,因为总是配置环境出错,很头疼,其实docker 上面有别人做好的镜像 ,直接拉取别人的镜像,然后运行就ok了,就是这么的简单.
下面介绍下docker的安装,以及在docker环境上面安装并运行jupyter notebook
1.统一环境
centos7.2 64位
2.安装必要的软件
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.跟新yum 缓存
sudo yum makecache fast
5.安装docker 服务
sudo yum -y install docker-ce
6.系统启动docker 服务
sudo systemctl start docker
docker 的安装比较简单,几句简单的命令就ok 了
在命令行输入docker ,看到有反应就成功了
下面来安装下jupyter notebook
输入命令
docker search jupyter
可以看到这里有很多的镜像可以下载使用
比如要安装第一个 输入命令
docker pull jupyter/datascience-notebook
安装完成后 输入
docker images
就可以查看已经安装好的镜像了
这个镜像6.32G 挺大的
想要运行也很简单,直接
docker run -p 8888:8888 jupyter/datascience-notebook
我这台主机是一台百度云的服务器
记得把-p 加上,要不然访问8888端口 是不行的,本地的没有试过,大家可以看下
记得把服务器的安全组的端口开放打开
运行结果如图所示:
这个时候就已经启动成功了
用服务器ip 8888端口访问就ok
注意看后面有个token ,后面会用到
打开效果如图所示:
把上面的token 输入进去就ok了
还是那个熟悉的界面
到这里就安装ok了,可以正常使用了
再想一个问题:
其实网上也有pip 安装的教程,也比较简单,几条命令就可以安装成功, 用docker安装的话 还要先安装docker ,岂不是更烦了?
仔细想想pip有pip2和pip3 你怎么知道用pip安装就一定会成功了? 运气不好,安装的时候报各种错误,解决起来也是很头疼,docker 虽然要安装下,但是镜像之类的都是在前人成功的基础上进行的,别人直接上传成功的镜像到仓库里,前人种树,后人乘凉,就是这个意思,只要下载了docker ,那么几乎可以肯定是成功的.
docker 宣称的是环境统一,仔细想想会不会用docker 也会出现不统一的情况了?
上次听平安的讲座,小金老师说docker 本质上类似进程,他还是用的linux的内核的,linux的内核坏了,所有的docker镜像都会错误,所以才会有docker 的企业版,更加的安全
这么一说的话,我感觉用了docker还是有一定的几率会出问题的,不过docker 的开发者肯定已经隔离环境做的很好了,可以说docker可以保证环境统一,真正的出问题了,那肯定也是linux内核级别的问题了,也就和我们这些普通的软件开发者没有什么关系了,会有人修复的.
总体而言,docker技术还是十分前卫的,用好docker ,环境问题可以得到最大化程度的统一.
还没有评论,来说两句吧...