DockerFile介绍
DockeFile是用来构建docker镜像的描述文件,命令参数的脚本。
构建步骤
1、编写一个 dockerfile 文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
DockerFile构建过程
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
Docker指令说明
FROM # 基础镜镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤: tomcat镜像,这个tomcat压缩包! 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令。
COPY # 类似ADD ,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量 !
CMD和ENTRYPOINT 区别
cmd执行的命令不可以被追加,以第一个为准,entrypoint执行的命令可以追加命令
DockerFile实例
########### 以下以Java生态springboot应用为例 ############
# 设置基础镜像
FROM artifacthub.XXX.work/idp-hub/uniontechos-server-20-1050u2a-amd64:2.0.2 as builder
#非root用户启动需要指定用户和组的ID,方便在initContainers里面进行处理
ARG user=ahyth
ARG group=appuser
ARG uid=1000
ARG gid=1000
#根据maven插件传参而来,为避免忘记传参报错,此处设置默认值demo
ARG APP_NAME
ENV APP_NAME=${APP_NAME}
#新建ahyth普通用户并切换为ahyth
#RUN bash -c 'groupadd -r appuser && useradd -r -g appuser ahyth'
RUN groupadd -r $group -g $gid && useradd -r -g $group -u $uid $user
ADD ${APP_CONTEXT_PATH}target/${APP_NAME}-package.tar.gz /idp/service
RUN mkdir -p /idp/logs/XXX
# 设置工作目录
ENV WORK_PATH=/idp/service/${APP_NAME} \
CONFIG_PATH=/idp/service/${APP_NAME}/config \
DATA_PATH=/idp/service/${APP_NAME}/data \
SCRIPT_PATH=/idp/service/${APP_NAME}/bin \
LOG_PATH=/idp/logs/yth-dm-directory-catalog-web \
JAR_NAME=${APP_NAME} \
LAUNCHER_OPTS="-Djavax.net.ssl.trustStore=/idp/public/jdk-17.0.2/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=ahythidp" \
JAVA_OPTS="-server"
ENV JAVA_OPT="-Dlog.path=$LOG_PATH -Dlogging.config=$CONFIG_PATH/logback-spring.xml -Dspring.config.location=$CONFIG_PATH/bootstrap.yml "
# 创建及设置工作目录
WORKDIR $WORK_PATH
RUN chown -R $user:$group /idp && chmod -R 755 /idp
RUN chown -R $user:$group /home && chmod -R 755 /home
USER $user
# 容器启动时的默认命令
ENTRYPOINT [ "/bin/bash", "-c", "java -jar $JAVA_OPT $JAVA_OPTS $JAR_NAME.jar $LAUNCHER_OPTS " ]