dockerfile使用

保留字                            作用
FROM                        当前镜像是基于的哪个镜像   第一个指令必须是FROM
MAINTAINER               镜像维护者的姓名和邮箱地址  # 禁用了目前
RUN                          构建镜像时需要运行的指令
EXPOSE                    当前容器对外暴露出的端口号
WORKDIR                  指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV                          用来在构建镜像过程中设置环境变量
ADD                          将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY                        类似ADD,拷贝文件和目录到镜像中
VOLUME                    容器数据卷,用于数据保存和持久化工作
CMD                          指定一个容器启动时要运行的命令
ENTRYPOINT              指定一个容器启动时要运行的命令

简单示例

# vim Dockerfile
FROM centos:7     # 基于哪个镜像来构建
RUN yum install -y vim   # 运行的指令安装vim
WORKDIR  /data
WORKDIR   bb     # WORKDIR可以写多次,bb是基于上面一层下构建
COPY  aa.txt  /data/bb    #拷贝目录,源目录到目标目录
ADD https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz  /data/bb    # 可以添加远程下载包,但是不会自动解压

# 构建
docker build -t mycentos7:01 .        .表示当前目录 

示例

FROM openjdk:8-jre    #基于哪个镜像进行构建
WORKDIR /app    #定义进入容器时默认位置,接下来后续操作工作位置
ADD demo-0.0.1-SHAPSHOP.jar app.jar   # 添加一个jar包并重命名为app.jar
EXPOSE 8081     #暴露一个8081端口  为了后面可以映射
ENTRYPOINT  ['java', '-jar']    #启动时 这个是不变的 所以用ENTRYPOINT写死
CMD ["app.jar"]   # 这个写可以改变的

两者区别:当docker run启动时,后面没有跟参数,那么CMD就可以作为默认参数执行命令,如果docker run后面有参数,那么CMD将被替换掉不执行。
当docker run启动时,后面没有跟参数,ENTRYPOINT会被执行,当docker run后面有参数时,ENTRYPOINT先执行,然后再执行docker run的参数,也就是说ENTRYPOINT不会被忽略,一定会被执行。当docker run 没有参数时,ENTRYPOINT和CMD都有参数,那么会先执行ENTRYPOINT的参数,CMD则作为默认参数跟其后执行。


# 执行构建
docker build -t demo:01

# 运行容器
docker run -d -p 8081:8081  --name demo  demo:01 
posted @ 2021-03-10 10:41  我在路上回头看  阅读(69)  评论(0编辑  收藏  举报