容器镜像与ECS系统镜像是两个概念,容器镜像是运行docker容器实例的基础。
参考资料:
https://www.runoob.com/docker/docker-image-usage.html
https://www.cnblogs.com/bethal/p/5942369.html
关于镜像制作,可以在网上搜到很多相关资料,这里就不介绍了。(后面补充基本资料)
镜像push到阿里云容器镜像服务,就可以在聚石塔容器平台使用了(平台上的自定义镜像)。
阿里云容器镜像服务文档:https://help.aliyun.com/document_detail/60997.html
聚石塔-资源视图-容器镜像服务:
https://console.cloud.tmall.com/resourceView#/aliyun/product?productCode=cr
注意:
阿里云容器镜像服务登录用户名非淘宝nick,请从该页面(仓库详情页)直接拷贝登录命令。
阿里云容器镜像服务登录密码由镜像服务管理,非聚石塔账号的密码。
1)如果是第一次做应用发布的配置:
选择“高级设置”,并点击下一步,就可以选择自定义镜像了,并且可以做相关的配置。
2)如果之前做过了部署配置,可以新建或者/编辑部署配置,选择自定义镜像就行。
注意,登录密码并非淘宝账号密码。
第一次登录阿里云容器镜像服务的控制台,系统会生成一个初始登录密码。
如果初始密码忘记,可以在镜像服务控制台重置:
1)容器运行完退出
表象:部署日志,Started container xxx 紧接着 Back-off restarting failed?container。
原因:说明容器运行完(docker run -d xxx)便退出了。K8S集群认为容器失败,尝试重新启动容器。
解决:重新打镜像,保证entrypoint或者cmd对应的进程不会退出。
例子:
Dockerfile
FROM centos:7 ADD jdk1.6.tar.gz /usr/local/ ENV JAVA_HOME /usr/local/jdk1.6.0_43/ ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH ENV JAVA_FONTS $JAVA_HOME/jre/lib/fonts RUN mkdir -p /acs/user COPY start.sh /acs/user RUN chmod +x /acs/user/start.sh ENTRYPOINT /acs/user/start.sh
ENTRYPOINT启动脚本
#!/bin/sh # 还可以设置环境变量,读取JAVA_OPT 设置jvm参数 java -jar test.jar while : do sleep 60 done
启动脚本最后的while循环,保证当前进程不会退出。
2)其他部署错误
见应用部署常见问题:应用部署常见问题 文档中的问题2。
1)使用java6jar?java7jar?java8jar等官方镜像
官方镜像中的启动命令为??java ${JAVA_OPT} -jar ${JAR_DIR}/${JAR_NAME} & 。
2)设置环境变量
注意,上传时不能直接上传要运行的jar包,因为部署时会默认做一次unzip解压。
举个例子,想运行hello-world.jar,可以将这个jar包打包成.zip文件。这样unzip后,hello-world.jar就会在/acs/code下了,那么环境变量就可以按照图中设置。
tomcat8已支持配置web.xml,重新选择镜像,或者新建部署配置。
其他tomcat官方镜像或者已经配置好的部署配置,增加一个文件挂载项就行:
官方镜像中,tomcat安装在/acs/user/tomcat,例如,想自定义web.xml,可以设置文件挂载。
注:其实同理,tomcat/conf或者bin下的其他文件,也可以通过增加文件挂载项的方式进行自定义配置。
php官方镜像中,配置文件在/acs/user/script/tpl目录,如果需要自定义.ini,php-fpm等文件,请设置文件挂载。例如:
官方镜像默认支持如下扩展:mqp, exif,imagick, memcache,memcached,mongo,redis,stomp,zookeeper。
用法:部署配置中配置PHP_EXTENTSIONS字段。
其他扩展:官方镜像无法支持,请通过自定义镜像解决。