写点什么

DockerFile 详解

用户头像
陈磊@Criss
关注
发布于: 2020 年 08 月 12 日



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:http://blog.csdn.net/crisschan



Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。

Dockerfile指令



1、FROM



格式:FROM <image>或 FROM <image>:<tag>



第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)



2、MAINTAINET



格式:MAINTAINET <name>



指定维护者的信息



3、RUN



格式:RUN <command> 或 RUN ["", "", ""]



每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“\”换行)



4、CMD



格式:CMD ["","",""]



指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行。(会被启动时指定的命令覆盖)



5、EXPOSE



格式:EXPOSE <port> [ <port> ...]



告诉Docker服务端暴露端口,在容器启动时需要通过 -p 做端口映射



6、ENV



格式:ENV <key> <value>



指定环境变量,会被RUN指令使用,并在容器运行时保存



7、ADD



格式:ADD <src> <dest>



复制指定的<src>到容器的<dest>中,<src>可以是Dockerfile所在的目录的一个相对路径;可以是URL,也可以是tar.gz(自动解压)



8、COPY



格式:COPY <src> <dest>



复制本地主机的 <src> ( 为 Dockerfile 所在目录的相对路径)到容器中的 <dest> (当使用本地目录为源目录时,推荐使用 COPY)



9、ENTRYPOINT



格式:ENTRYPOINT ["","",""]



配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。(每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效)



10、VOLUME



格式:VOLUME ["/mnt"]



创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等



11、USER



格式:USER daemon



指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。



12、WORKDIR



格式:WORKDIR /path/to/workdir



为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。(可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径, 则会基于之前命令指定的路径)



13、ONBUILD



格式:ONBUILD [INSTRUCTION]



配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令



例子



将需要使用的jdk(jdk1.7.0_79)和已经编译好的包( websocket.jar)放到和dockerfile相同的文件夹下面,dockerfile如下:



FROM centos

# 镜像是centos

MAINTAINER CrissChan

# 维护者CrissChan

COPY jdk1.7.079 jdk1.7.079

# 复制JDK

ADD websocket.jar app.jar

# 将项目的添加到容器中,并修改名字为app.jar

ENV JAVAHOME=/jdk1.7.079

ENV PATH=$JAVA_HOME/bin:$PATH

ENV CLASSPATH=.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar

# 配置jdk环境

EXPOSE 8080

# 容器对外提供服务的端口是8080

ENTRYPOINT ["java","-jar","/app.jar"]

#启动容器后启动app.jar的应用



编译并生成镜像 (. 表示当前路径)

docker build -t yaolin/websocket .



查看生成的镜像



docker images



创建容器并运行

docker run -p 192.168.0.105:8080:8080 --name websocket crisschan/websocket



关注我,关注测试



用户头像

陈磊@Criss

关注

测者观天下bugs 2018.03.11 加入

华为云MVP,阿里云MVP

评论

发布
暂无评论
DockerFile 详解