基础
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-alpine
VOLUME /tmp
ADD target/*.jar app.jar
# 起标记作用
EXPOSE 8080
ENTRYPOINT ["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-alpine
ADD run.sh entrypoint.sh
ADD *.jar app.jar
EXPOSE 8088
RUN chmod 755 entrypoint.sh
ENTRYPOINT ["./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----'