# base镜像,一个文件中可以包含多个FROM
FROM openjdk:8-jdk-alpine
MAINTAINER muyisanshuiliang@qq.com
LABEL version = "1.0.0"
LABEL description = "Java运行环境"
# 相当于cd,但是比cd强大,没有目录的情况会先创建再cd
WORKDIR /app
# 将1.txt拷贝到根目录下。它不仅仅能拷贝单个文件,还支持Go语言风格的通配符,比如如下:
COPY 1.txt /
# 拷贝所有 abc 开头的文件到testdir目录下
COPY abc* /testdir/
# ?是单个字符的占位符,比如匹配文件 abc1.log
COPY abc?.log /testdir/
ADD ./fridge-ai.jar /app
# ADD与COPY的对比
# 1)没有目录ADD会创建目录
# 2)ADD附带解压功能以及添加远程文件
# 3)如果只是COPY的话,则不用ADD,因为ADD会增加镜像SIZE
# 设置环境常量,方便下文引用,比如:
ENV JAVA_HOME /usr/local/jdk1.8
# 引用上面的常量,
# RUN ${JAVA_HOME}/bin/java -jar xxx.jar
# 暴露的端口
EXPOSE 50051
# path:代表容器中的目录,
# 与docker run 不同,Dockerfile中不能指定宿主机目录,默认使用docker管理的挂载点
VOLUME ["./log","/app/log"]
# RUN 构建镜像时运行,在构建时能修改镜像内部的文件。
# 每条指令将在当前镜像基础上执行,并提交为新的镜像
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# shell格式,会创建子进程执行
RUN yum -y install vim
# exec格式,当前进程执行
RUN ["yum","-y","install","vim"]
# CMD 容器启动时执行,而不是构建镜像时执行,多个CMD只有最后一个生效,
# 如果容器启动的时候有其他额外的附加指令,则CMD指令不生效
CMD ["echo", "container starting..."]
# ENTRYPOINT 容器创建时执行,而不是镜像构建时执行。
# 只有最后一个ENTRYPOINT会被执行
ENTRYPOINT ["java","-jar","fridge-ai.jar"]
# RUN vs CMD vs ENTRYPOINT
# 1、RUN 执行命令并创建新的镜像层,RUN 经常用于安装软件包。
# 2、CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够被docker run的命令行参数替换。
# 3、ENTRYPOINT 配置容器启动时运行的命令。ENTRYPOINT无论容器启动是否带参数,都会执行
# Dockerfile构建镜像
# docker build -t ImageName:TagName dir
# -t − 给镜像加一个Tag
# ImageName − 给镜像起的名称
# TagName − 给镜像的Tag名
# Dir − Dockerfile所在目录,如果Dockerfile就在当前目录,则不需要改参数。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。