我正在参加「掘金·启航计划」
👨🎓作者:Java学术趴
💌公众号:Java学术趴
🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。
🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。
☠️每日毒鸡汤:那些曾经把我击倒的人,谢谢你们,躺着真舒服。
3.3.5 WORKDIR
指令功能:
- 该指令用于指定容器内部的工作目录。
指令语法:
-
简单语法格式:
WORKDIR <directory>
其中, 是容器内部的工作目录。例如:
WORKDIR /app
这个命令将容器内部的工作目录设置为 /app。
-
复杂语法格式:
WORKDIR ["<directory>"]
这种写法的 WORKDIR 指令也用于指定容器内部的工作目录,但是使用了 JSON 数组的形式指定目录名称。例如:
WORKDIR ["/app"]
这个命令与前面的例子相同,将容器内部的工作目录设置为 /app。
指令注意:
-
WORKDIR 指令可以出现多次,但每次只会影响后续指令的运行环境,不会影响之前的指令。例如:
WORKDIR /app RUN apt-get update && apt-get install -y curl WORKDIR /data RUN curl -O http://example.com/data.txt
这个命令先将容器内部的工作目录设置为 /app,然后运行 apt-get 命令安装 curl,接着将工作目录切换为 /data,并通过 curl 命令下载 example.com/data.txt 文件。
-
WORKDIR
指令并不会创建指定的目录,如果指定的目录不存在,则会出现错误。因此,在使用WORKDIR
指令之前,最好先通过其他指令创建目录。 -
使用简单语法格式,工作目录可加可不加双引号,但是使用复杂语法格式必须加双引号,否则会发生语法错误。
WORKDIR "/my app"
这个命令将容器内部的工作目录设置为
/my app
目录。如果不加双引号,会被解析为两个目录/my
和app
,从而导致错误。使用高级指令可以有效的避免这种情况的产生。
3.3.6 ENV
指令功能:
- 该指令用于设置环境变量。
指令语法:
-
简单语法格式:
ENV <key> <value>
其中, 是环境变量的键, 是环境变量的值。例如:
这个命令设置了一个名为 MY_NAME 的环境变量,其值为 John Smith。
需要注意的是,环境变量是在容器运行时设置的,在 Dockerfile 中设置的环境变量将被包含在镜像中,并在容器启动时自动加载。此外,可以使用 ${key} 语法来引用环境变量,例如:
ENV MY_NAME "John Smith" ENV GREETING "Hello, ${MY_NAME}!"
这个命令设置了一个名为
GREETING
的环境变量,其值为Hello, John Smith!
,其中${MY_NAME}
引用了之前设置的MY_NAME
环境变量。除了设置单个环境变量之外,还可以使用
ENV
指令一次设置多个环境变量,例如:ENV MY_NAME "John Smith" \ MY_EMAIL "john.smith@example.com" \ MY_ROLE "developer"
这个命令设置了三个环境变量,分别是
MY_NAME
、MY_EMAIL
和MY_ROLE
。需要注意的是,使用 `` 符号可以将多行代码合并为单行,以提高可读性。 -
复杂语法格式:
ENV <key1>=<value1> <key2>=<value2> ...
这种格式的 ENV 指令可以一次设置多个环境变量,每个环境变量使用 = 的形式指定,用空格分隔。例如:
ENV MY_NAME="John Smith" MY_EMAIL=john.smith@example.com MY_ROLE=developer
指令注意:
- 如果环境变量的值中包含空格或其他特殊字符,则需要使用引号将其括起来。
- 可以使用 `` 符号将多行代码合并为单行,以提高可读性。
- 使用等号的形式更容易在脚本中进行自动化处理。因此,建议使用复杂格式的 ENV 指令来设置环境变量。
3.3.7 EXPOSE
指令功能:
- 该指令用于告诉 Docker 容器运行时需要监听哪些端口。
指令语法:
-
简单语法格式:
EXPOSE <port> [<port>/<protocol>...]
其中,
<port>
是需要监听的端口号,<protocol>
是端口使用的协议,可以是tcp
或udp
,默认为tcp
。可以指定多个端口,用空格或逗号分隔。例如:EXPOSE 80/tcp 443/tcp
这个命令告诉 Docker 容器需要监听 80 和 443 两个端口,使用的协议为 tcp。
-
复杂语法格式:
EXPOSE ["<port>", "<port>/<protocol>", ...]
这种写法的 EXPOSE 指令也用于告诉 Docker 容器需要监听哪些端口,但是使用了 JSON 数组的形式指定端口和协议。例如:
EXPOSE ["80", "443/tcp"]
这个命令与前面的例子相同,告诉 Docker 容器需要监听 80 和 443 两个端口,使用的协议为 tcp。
指令注意:
- EXPOSE 指令并不会实际打开容器的端口,它只是向外部提供了容器的端口信息,让其他容器或主机可以与之通信。要打开容器的端口,需要在运行容器时使用 -p 或 -P 参数进行端口映射。
- JSON 数组形式的 EXPOSE 指令将整个端口和协议作为一个字符串传递给解释器执行,因此需要确保字符串中的引号和转义符正确。此外,JSON 数组形式的 EXPOSE 指令也可以避免在端口号和协议中使用空格等特殊字符时的问题。
3.3.8 MAINTAINER与LABEL
指令功能:
- 该指令用于维护该镜像的作者和联系信息。
指令语法:
-
简答语法格式:
MAINTAINER <name>
其中, 是维护该镜像的作者的名称和联系信息,例如:
MAINTAINER John Smith <john.smith@example.com>
这个命令指定了
John Smith
作为该镜像的作者,并提供了他的电子邮件地址。MAINTAINER
指令在 Docker 1.13 版本中已经被标记为废弃,建议使用LABEL
指令来指定镜像的元数据信息。 -
复杂语法格式:
LABEL maintainer="<name>"
这种写法的 LABEL 指令用于为镜像添加元数据标签,其中标签名(自定义)为 maintainer,标签值为维护该镜像的作者和联系信息。例如:
LABEL maintainer="John Smith <john.smith@example.com>"
这个命令与前面的例子相同,指定了 John Smith 作为该镜像的作者,并提供了他的电子邮件地址,但是使用了 LABEL 指令而不是 MAINTAINER 指令。
指令注意:
- LABEL 指令可以用于指定镜像的各种元数据信息,包括作者、版本、描述、许可证等,因此建议使用 LABEL 指令来指定镜像的元数据信息。
以上项目的源代码,点击星球进行免费获取 星球 (Github地址)如果没有Github的小伙伴儿。可以关注本人微信公众号:Java学术趴,发送jQuery,免费给发给大家项目源码,代码是经过小编亲自测试的,绝对可靠。免费拿去使用
--------看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!---------
点击星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦!!