docker知识
名词解释
- docker引擎:运行docker的基础平台,启动命令:service docker start/stop/restart
- docker镜像:相当于虚拟机打包文件。
- docker容器:通过docker镜像启动的一个服务。
- dockerfile:一种打包镜像的脚本。
- docker-compose:服务编排工具,可以将配置信息写到文件里。
- 镜像仓库:一个存储镜像的仓库,类似github这种,国内一般可以使用阿里云的镜像仓库。
- 宿主机:运行docker服务的物理机或服务器。
docker常用命令
-
通过docker命令启动一个tomcat容器。
docker run -d -p80:8080 -e jdbc.password=123qweasd -v /moojnn/logs:/tomcat/logs registry.cn-hangzhou.aliyuncs.com/moojnn/tomcat:8.0
- -d :以守护进程方式启动,还可以-it --rm 可以自己了解。
- -p :端口映射,上面是将宿主机的80端口转发到容器中的8080端口,一般镜像打包好之后,服务暴露的端口就已经确定,所以改变的一般只是冒号前面的端口号,也就是对外提供服务的端口号为80
- -e :设置容器内部的环境变量,由于java程序目前流行的做法是任何配置项都是优先读取环境变量,然后再读取配置文件,所以这里通过-e可以改变程序的配置文件。
- -v :将宿主机的文件系统映射到容器内部,一般有2种作用
- 将容器内部需要持久化的文件映射到宿主机,防止重启之后丢失,如mysql镜像一般将容器内部的/var/lib/mysql 数据文件目录映射到宿主机保存。/moojnn/data/mysqldata:/var/lib/mysql
- 将个性化或定制化文件覆盖容器内部的文件,如tomcat开启jmx端口的时候,将catalina.sh覆盖掉容器内部的/tomcat/bin/catalina.sh。./catalina.sh:/tomcat/bin/catalina.sh
-
通过docker-compose.yml编排启动魔镜。
version: '2' services: mysql: restart: always image: registry.cn-hangzhou.aliyuncs.com/moojnn/mysql:latest ports: - "3307:3306" volumes: - /moojnn/data/mysqldata:/var/lib/mysql mojing: restart: always image: registry.cn-hangzhou.aliyuncs.com/moojnn/mojing:v7.3.3.3 depends_on: - mysql ports: - "8002:8080" - "10001:10001" - "4040:4040" environment: - db.url=jdbc:mysql://mysql:3306/mojing?useUnicode=true&characterEncoding=UTF-8 - db.username=root - db.password=root@guoyun - local.javax.jdo.option.ConnectionURL=jdbc:mysql://mysql:3306/hive_local?createDatabaseIfNotExist=true - local.javax.jdo.option.ConnectionUserName=root - local.javax.jdo.option.ConnectionPassword=root@guoyun - map.host=mysql - map.port=3306 - logDB.url=jdbc:mysql://mysql:3306/logDB?useUnicode=true&characterEncoding=UTF-8 command: ["/wait-for-it.sh", "mysql:3306","-t","600", "--", "/run.sh", ""] volumes: - /moojnn/data/warehouse:/apps/hive/warehouse - /moojnn/data/picture:/tomcat/webapps/picture
- 上面run命令中的任何参数都可以通过这个文件配置,如-p 对应ports节点,-e 对应environment节点,-v 对应volumes节点
- docker-compose 命令默认只会寻找当前目录下名为docker-compose.yml的配置文件进行启动,如果目录不同或者文件名不同,则需要使用-f参数。
- docker-compose up -d 和 docker-compose restart区别
- docker-compose up -d :检查配置文件是否发生改变,如果发生改变,则使用新的配置文件重新创建容器,否则提示 ** is update to latest,什么都不做。
- docker-compose restart 重启,不检查配置文件变化,使用之前启动时候的配置文件进行重启。
- 所以一般升级的时候,修改版本号,修改配置文件,然后使用docker-compose up -d启动。如果是服务不正常需要重启,则使用docker-compose restart即可。
- docker-compose restart不会删除一些临时文件,所以一般重启的时候也会先使用docker-compose stop 、docker-compose rm -f 、docker-compose up -d 彻底启动*
安装目录:
魔镜所有的docker服务都安装在 /moojnn/**目录,如魔镜在/moojnn/mojing,mysql在/moojnn/mysql
日志目录:
- hadoop/kafka等日志都在/opt/data/hadoop或/opt/data/kafka-logs目录
-
魔镜日志在/moojnn/logs目录.
注意有两台。当前正在写的日志一般是 mojing-all.log ,带后缀日期的都是历史数据,磁盘空间不足时可以删除。
日常运维命令:
-
查看服务是否正常。
docker ps
-
查看服务日志
docker-compose logs -f --tail=100
-
升级魔镜
- 修改/moojnn/mojing/docker-compose.yml 版本号或配置项
- docker-compose up -d启动
如果服务器不能联网,则需要先下载tar包,然后使用docker load <mojing.tar,然后再执行docker-compose up -d命令
-
重启魔镜
docker-compose restart
-
临时替换一个文件,如js或**.jar,如替换/tomcat/webapps/ROOT/js/common.js
- 修改docker-compose.yml文件,在volumes节点下增加映射 ./common.js:/tomcat/webapps/ROOT/js/common.js
- docker-compose up -d
如果是js文件,又不想重启魔镜服务,则可以使用docker cp common.js mojing_mojing_1:/tomcat/webapps/ROOT/js命令直接拷贝过去,但是这样做下次docker-compose up -d的时候这个修改会被还原,restart不会还原
-
拷贝容器里面的某个文件出来,如tomcat配置文件
docker cp mojing_mojing_1:/tomcat/conf/server.xml ./
-
查看hadoop集群是否正常
浏览器访问:http://bigdata1:8080 默认用户名密码 admin/admin
-
备份魔镜数据库
- 由于魔镜mysql安装的时候将数据文件映射到了宿主机,所以只要备份这个文件夹就可以了 /moojnn/data/mysqldata目录
- 或者使用dump 命令 docker exec -it mysql_mysql_1 mysqldump -uroot -p** mojing>mojing20190919.sql 。这样会将密码暴露在命令行里,不是很安全。
- 使用mysql工具进行备份或者安装mysql客户端,通过-h命令连到数据上使用mysqldump备份。
建议设置个cron定时任务每天晚上备份下mojing库
服务异常排查办法
整个魔镜服务访问
- 首先检查磁盘等硬件,df -h 、 free -m 、 top等,硬件中磁盘满的概率比较大,清理相关日志即可。
- docker ps查看服务是否正常。
- tail -f --tail mojing-all.log日志,查看是否有明显异常信息,一般mysql连不上、redis连不上会直接影响服务。
- 查看单点相关服务是否正常,直接访问登录页地址,看看服务是否正常。
涉及到查询的功能全部报错,如仪表盘、分析台、脚本运行等。
-
首先登录ambari集群管理页面,看看是否有服务挂掉,主要是hdfs/hive/yarn/zookeeper等基础服务。
- 有服务停止状态的话,尝试启动(一般挂都是有原因的,所以启动大概率不成功)
- 如果启动不成功,先从界面上查看启动日志是否有明显错误,有的话直接百度、谷歌。
- 没有的话查看异常服务在哪台机器上,则去相关机器上排查,同样,首先硬件 df -h ,free -m等。然后去相关日志目录查看启动日志。如hdfs namenode异常:/opt/data/hadoop/logs/hadoop-hdfs/namenode等。根据异常百度、谷歌。
魔镜服务启动失败
- docker-compose logs -f --tail=100 看看是不是启动过程直接卡死了,如果卡死了,则有两种情况:。
- 端口异常主要检查50001、60001、4040这三个和yarn通讯的端口。(一般突然出现的无法启动不会是这个原因,除非动过网络配置)
- yarn资源不足,可以去ambari界面上依次点击"yarn"->"resource manager ui" 查看yarn资源的使用情况,不足的情况下可以点击“applicatins” 查看是什么程序占用资源,其中“SparkEngine-YARN”是魔镜服务,accept状态是等待分配资源,running是正常运行中。
- 有异常信息,但是都是无用信息,这时可以去/moojnn/logs/mojing-all.log中查看详细报错,根据报错及时排查,一般情况下都是mysql,redis,mq等连接不上,或者有魔镜本身的bug.
- 如果某个服务连不上,则重点排查相关服务即可。
- 如果是魔镜本身bug,需要将mojing-all.log打包发给研发人员进行定位处理。
增量更新异常,接收不到新数据
- ambari检查服务是否正常,尤其是kafka和zookeeper
- 使用kafka-tool查看kafka是否能接收到信息,并且查看消费端消费情况。
- 如果消费端一直卡着不消费,则需要联系研发。
- 如果kafka接收和消费都正常,则需要定位redis或hdfs情况。
- redis中的key为:kafkaCache:table_name
- hdfs中文件路径为:/guoyundata1/kafka/table_name/***.txt
- 如果都正常,则需要联系研发进行进一步排查。
使用过程中部分功能报错
- 在错误界面点击反馈->复制,然后粘贴到记事本里,发给研发人员定位问题。
自定义上传的图片都不见了,并且是偶发的
- 检查两台机器的/moojnn/data/picture目录,看看里面的数据是否一致,一般是nfs服务异常,重新挂载即可。
本文固定链接:杨晨辉的个人博客 » 魔镜日常运维命令总结
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!