1、Docker常识
docker是一种虚拟化技术,通过文件系统的隔离,一台宿主机ECS上可以运行多个容器,互不干扰。
基于镜像,docker创建容器并运行在独立的文件空间,容器停止或删除空间就会销毁,即容器运行时数据无法持久化。但是通过设置volume,可以将容器运行时的目录挂载到宿主机,达到持久化的目的。举个例子,容器中/acs/log/目录对应宿主机的/acs/容器id/log/,所以最佳实践是在应用程序代码中(或者EWS服务配置中),将日志目录设置为/acs/log达到日志持久化,保存在ECS中。当然也可以在服务-配置管理-volume配置中添加其他的挂载卷
参考:http://dockone.io/article/783
2、EWS运行目录说明
1)添加主机到资源池时,会在主机上创建/acs目录,docker容器挂载出来的数据会放在这里
2)EWS指定了5个固定的volume目录
对应关系详见:https://open.taobao.com/doc.htm?docId=104186&docType=1&treeId=117
/acs/code目录,用户上传或编译后的代码最终解压到这个目录
/acs/log目录,如没有特殊指定,使用官方镜像的EWS服务中配置管理中,应用日志(如java应用catalina.log,localhost.log application.log)会存在这里
3)除了这几个volume目录,容器中的/acs/user目录,存放用户应用运行所需的程序如jdk,tomcat,php,nginx等
最佳实践
1.想找容器中java的启动脚本参数?/acs/user/tomcat/bin/catalina.sh
2.想找容器中nginx的启动脚本和配置?
3.想找容器中php的配置?/acs/user/script/tpl,/acs/user/php/extensions
当容器中运行的应用出现问题,或者部署出现问题,那你就应该在这些地方去排查问题了:
/acs/log/(查看应用日志),/acs/code(查看代码是否符合预期),/acs/user/(一些特殊需求,比如想自己修改jvm参数,然后重启容器中的java应用)
4)/acs/bin目录,官方镜像容器的启动脚本start文件
如果需要临时修改容器的配置并启动,如tomcat(/acs/user/tomcat/),修改后执行start文件即可。
3、登录容器内
1、EWS服务页面选择相应的容器webssh进入
2、登录ECS主机:docker exec -it 容器id /bin/bash
4、Docker常用指令
docker info,查看docker相关信息,版本,存储引擎,操作系统内核
docker ps [-as] 查看容器运行状态;-a查看所有;-s查看容器占用空间
docker images, 查看所有镜像
docker rmi 镜像id,删除镜像
docker stop 容器id,停止容器
docker rm 容器id,删除容器
docker inspect 容器id|镜像,查看容器和镜像的元信息
docker exec -it 容器id /bin/bash,在容器中开启一个交互模式的终端
5、运行容器之后,主机上df -h有很多目录?
EWS目前帮助安装的docker版本是18.09.3,使用的overlay2存储引擎,每个启动容器时都会做这样的挂载,实际都存储在/docker/overlay2和/docker/containers下面。列表中一部分是由底层镜像,通过overlay文件系统挂载出来出来的工作目录;另外一部分是每个容器会挂载出一个shm共享内存的目录,供运行时使用内存。
参考:https://blog.csdn.net/zhonglinzhang/article/details/80970411