基础

workdir

工作目录,没有就会创建

RUN 、CMD、ENTRYPOINT的区别

run 用于安装软件和命令。
cmd 用于默认命令,类似于函数的参数默认值。
ENTRYPOINT 是启动后的命令,只要有就会起作用,有参数就会追加。

  1. ENTRYPOINT ["/bin/echo", "Hello"]
  2. CMD ["world"]

当容器通过 docker run -it [image] 启动时,输出为:
Hello world
docker run -it [image] CloudMan 启动,输出依旧为:
Hello CloudMan

示例

springboot

文件

  1. FROM hub.c.163.com/library/java:8-alpine
  2. VOLUME /tmp
  3. ADD target/*.jar app.jar
  4. # 起标记作用
  5. EXPOSE 8080
  6. ENTRYPOINT ["java","-jar","/app.jar"]

打包,可以重复打包,会自动替换

  1. docker build -t demo:1.0.0 .

运行

  1. docker run -di -p 80:8080 --name demo demo:1.0.0

脚本启动示例:
Dockerfile

  1. FROM openjdk:8-jre-alpine
  2. ADD run.sh entrypoint.sh
  3. ADD *.jar app.jar
  4. EXPOSE 8088
  5. RUN chmod 755 entrypoint.sh
  6. ENTRYPOINT ["./entrypoint.sh"]

持续发布

  1. #!/usr/bin/env bash
  2. # 定义应用组名
  3. group_name='mall-tiny'
  4. # 定义应用名称
  5. app_name='mall-tiny-jenkins'
  6. # 定义应用版本
  7. app_version='1.0-SNAPSHOT'
  8. # 定义应用环境
  9. profile_active='qa'
  10. echo '----copy jar----'
  11. docker stop ${app_name}
  12. echo '----stop container----'
  13. docker rm ${app_name}
  14. echo '----rm container----'
  15. docker rmi ${group_name}/${app_name}:${app_version}
  16. echo '----rm image----'
  17. # 打包编译docker镜像
  18. docker build -t ${group_name}/${app_name}:${app_version} .
  19. echo '----build image----'
  20. docker run -p 8088:8088 --name ${app_name} \
  21. --link mysql:db \
  22. -e 'spring.profiles.active'=${profile_active} \
  23. -e TZ="Asia/Shanghai" \
  24. -v /etc/localtime:/etc/localtime \
  25. -v /mydata/app/${app_name}/logs:/var/logs \
  26. -d ${group_name}/${app_name}:${app_version}
  27. echo '----start container----'