基础
workdir
RUN 、CMD、ENTRYPOINT的区别
run 用于安装软件和命令。
cmd 用于默认命令,类似于函数的参数默认值。
ENTRYPOINT 是启动后的命令,只要有就会起作用,有参数就会追加。
ENTRYPOINT ["/bin/echo", "Hello"]CMD ["world"]
当容器通过 docker run -it [image] 启动时,输出为:
Hello world
docker run -it [image] CloudMan 启动,输出依旧为:
Hello CloudMan
示例
springboot
文件
FROM hub.c.163.com/library/java:8-alpineVOLUME /tmpADD target/*.jar app.jar# 起标记作用EXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]
打包,可以重复打包,会自动替换
docker build -t demo:1.0.0 .
运行
docker run -di -p 80:8080 --name demo demo:1.0.0
脚本启动示例:
Dockerfile
FROM openjdk:8-jre-alpineADD run.sh entrypoint.shADD *.jar app.jarEXPOSE 8088RUN chmod 755 entrypoint.shENTRYPOINT ["./entrypoint.sh"]
持续发布
#!/usr/bin/env bash# 定义应用组名group_name='mall-tiny'# 定义应用名称app_name='mall-tiny-jenkins'# 定义应用版本app_version='1.0-SNAPSHOT'# 定义应用环境profile_active='qa'echo '----copy jar----'docker stop ${app_name}echo '----stop container----'docker rm ${app_name}echo '----rm container----'docker rmi ${group_name}/${app_name}:${app_version}echo '----rm image----'# 打包编译docker镜像docker build -t ${group_name}/${app_name}:${app_version} .echo '----build image----'docker run -p 8088:8088 --name ${app_name} \--link mysql:db \-e 'spring.profiles.active'=${profile_active} \-e TZ="Asia/Shanghai" \-v /etc/localtime:/etc/localtime \-v /mydata/app/${app_name}/logs:/var/logs \-d ${group_name}/${app_name}:${app_version}echo '----start container----'
