失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Docker教程小白实操入门(15)--如何使用WORKDIR ENV ARG和EXPOSE设置镜像

Docker教程小白实操入门(15)--如何使用WORKDIR ENV ARG和EXPOSE设置镜像

时间:2018-07-22 21:23:40

相关推荐

Docker教程小白实操入门(15)--如何使用WORKDIR ENV ARG和EXPOSE设置镜像

一、需求

WORKDIR指令为其他指令设置工作目录

ENV指令设置环境变量

ARG指令构建参数

EXPOSE指令暴露端口

二、WORKDIR指令为其他指令设置工作目录

WORKDIR <工作目录路径>

WORKDIR指令为Dockerfile中的任何RUNCMDENTRYPOINTCOPYADD指令设置工作目录(或称当前目录),也就是说以后各层的当前目录就被改为WORKDIR指定的目录。如果WORKDIR对应的目录不存在,将会自动被创建。

三、ENV指令设置环境变量

ENV <key> <value># 或ENV <key>=<value>

无论是后面的其它指令,还是运行时的应用,都可以直接使用这里定义的环境变量。

例如:

ENV CATALINA_HOME /var/tmp/apache-tomcat-8.0.45ENV PATH $PATH: $CATALINA_HOME/binENTRYPOINT $CATALINA_HOME /bin/startup.sh && /bin/bash

四、ARG指令构建参数

ARG <参数名>[=<默认值>]

ARGENV有些类似,它们都可以被后面的其它指令直接使用,但是它并不是环境变量,这意味着将来容器运行时是不会存在ARG变量的。

Dockerfile中的ARG指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令docker build中用--build-arg <参数名>=<值>来覆盖。

什么时候用ARG,什么时候用ENV?

如果想保存为环境变量,就用ENV;如果只想在Dockerfile中临时使用,就用ARG

五、EXPOSE指令暴露端口

EXPOSE <端口1> [<端口2>...]

EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。

如果想要公开容器的端口,必须在docker run是指定-p参数去公开端口或者指定-P参数公开所有被EXPOSE的端口。具体可以参照/engine/reference/run/#expose-incoming-ports 。

Dockerfile中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是docker run -P时,会自动随机映射EXPOSE的端口。

六、实例

#创建一个空文件夹,并进入其中mkdir newdir4cd newdir4#创建一个Dockerfile文件touch Dockerfile#输入Dockerfile文件内容#********** Begin *********##以busybox为基础镜像echo 'FROM busybox' > Dockerfile#声明暴露3000端口echo 'EXPOSE 3000' >> Dockerfile#将变量var1=test设置为环境变量echo 'ENV var1 test' >> Dockerfile#设置工作目录为/tmpecho 'WORKDIR /tmp' >> Dockerfile#在工作目录下创建一个1.txt文件echo "RUN touch 1.txt" >> Dockerfile#********** End **********##文件内容完毕,在当前文件夹中执行#********** Begin *********##以该Dockerfile构建一个名为testimage:v1的镜像docker build -t testimage:v1 .#********** End **********## 创建容器docker run testimage:v1

七、 使用Dockerfile,创建一个拥有java和tomcat运行环境的镜像

# 指定基础镜像为ubuntu:latest镜像FROM ubuntu# 设置当前的工作目录为/var/tmpWORKDIR /var/tmp# 将jre.tar.gz下载到工作目录,并解压文件,然后删除jre.tar.gzRUN apt-get update && \apt-get install -y wget && \wget --no-check-certificate --no-cookies --header "Cookie: o\fraclelicense=accept-securebackup-cookie" http://download.o\/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jre-8u144-linux-x64.tar.gz && \tar -xzf jre-8u144-linux-x64.tar.gz && \rm jre-8u144-linux-x64.tar.gzRUN wget "http://mirrors.tuna./apache/tomcat/tomcat-8/v8.0.45/bin/apache-tomcat-8.0.45.tar.gz" && \tar -xzf apache-tomcat-8.0.45.tar.gz && \rm apache-tomcat-8.0.45.tar.gz# 配置java与tomcat的环境变量ENV JAVA_HOME /var/tmp/jre1.8.0_144ENV CATALINA_HOME /var/tmp/apache-tomcat-8.0.45ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin# 由于tomcat服务会默认监听8080端口,所以使用EXPOSE暴露端口号EXPOSE 8080# 设置启动命令,使tomcat服务随容器启动而启动ENTRYPOINT /var/tmp/apache-tomcat-8.0.45/bin/startup.sh && /bin/bash

参考:/shixuns/zawfjtnm/challenges

如果觉得《Docker教程小白实操入门(15)--如何使用WORKDIR ENV ARG和EXPOSE设置镜像》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。