dockerfile文件参数

这篇具有很好参考价值的文章主要介绍了dockerfile文件参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

如果仅限于使用dockerhub里面的镜像,是没办法满足我们实际的应用场景的,所以我们需要创建属于自己的docker镜像。

构建docker镜像需要编写dockerfile,却不知道语法怎么写。

下文为简介dockerfile参数,以及相应的作用。


二、dockerfile参数说明

  • FROM
    指定基础镜像

  • MAINTAINER
    维护者名称,自定义,可写可不写

  • RUN
    镜像构建时运行的命令,可以写shell命令也可以写成exec样式
【shell样式】
RUN mkdir -p /test/a

【exec样式】
RUN [“mkdir”,“-p”,“/test/a”]

  • EXPOSE
    用于指定容器默认映射的端口,端口可以写多个
    在docker run -P(大P)时,会自动随机物理机的端口映射 EXPOSE 的端口。
    可以使用docker run -p命令指定其他端口。
【多个端口】
EXPOSE [port1,port2]
EXPOSE [80,8080]

  • CMD
    通常用于启动服务,会在docker run时运行
    只执行一次,如果有多个CMD默认只会执行最后一个。

  • ENTRYPOINT
    类似CMD,通常用于启动服务。指定容器启动后执行的命令,也是多个执行最后一个。
    不可被docker run提供的参数覆盖。
    可以传参运行,docker run 时可以用-c指定变参
【例如】
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

指定了ENRTYPOINT,在docker run的时候就不要加/bin/bash,不然会运行出错


  • COPY
    用于复制。本地源地址 > 容器内地址
    可以指定属主: chown=user:group
    可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则
【例如】
COPY hom* /mydir/
COPY hom?.txt /mydir/

  • ADD

和COPY一样是复制,但是复制压缩文件时,会自动解压缩。
tar、gzip、bzip2、xz格式复制会自动解压到目标路径
没办法用于复制整个tar文件,要用copy

【用法】
ADD nginx.tar /etc/nginx/

  • VOLUME
    数据卷
    定义匿名数据卷,一般是启动时忘记挂载数据卷,并且会自动挂载到定义的匿名数据卷。
    在容器创建过程中会在容器中创建该目录,在宿主机上的挂载目录名是随机生成的,在这个目录下/var/lib/docker/volumes/
【用法】
volume ["/data"]

docker run -v 主机目录:容器目录:权限 -itd 镜像名

例如:
docker run --name nginx -v /data:/nginx:ro -itd nginx_images

修改挂载点,使用-v会安全点
权限可以为ro只读、rw读写

  • WORKDIR
    用于指定工作目录,如果镜像中对应的路径不存在,会自动创建此目录
    WORKDIR 中需要指定绝对路径
【用法】
WORKDIR /workdir

  • ENV
    设置镜像内的环境变量
【例如】
# 设置nginx =/usr/share/nginx/html/, 在后续的指令中可以通过$nginx引用:

ENV nginx /usr/share/nginx/html/

COPY index.html $nginx

  • USER
    用于指定执行后续命令的用户和用户组
    用户和用户组必须提前已经存在
【用法】
USER user_name/uid
USER user:group 
USER uid:gid

  • ONBUILD
    配置当前所创建的镜像,后续被作为其它新创建镜像的基础镜像时,执行的命令。
    创建的镜像A配置了这个命令,后续镜像A被作为基础镜像,创建镜像B时会执行。
【例如】
# 后续创建的目录会自动重新上传dockerfile目录里的index.html文件
ONBUILD COPY index.html /usr/share/nginx/html/

  • LABEL
    用来给镜像添加一些元数据(metadata),可以指定多个
    可以使用docker inspect命令查看label
【例如】
LABEL image.version="1.0" 

【多个LABLE方法1,用“\”换行写】
LABEL image.version="1.0" \
	  image.creator="wbh"

【多个LABLE方法2】
LABEL image.version="1.0" image.creator="wbh"

  • HEALTHCHECK
    用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
【语法】
HEALTHCHECK [<options>] CMD <cmd>

--interval=<间隔>:两次健康检查的间隔,默认为 30 秒。
--timeout=<间隔>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒。
--retries=<次数>:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次。
--start-period=<间隔>: 应用的启动的初始化时间,在启动过程中的健康检查失效不会计入,默认 0 秒(从 V17.05 引入)。
在 HEALTHCHECK [选项] CMD 后面的命令,格式和 ENTRYPOINT 一样,分为 shell 和 exec 格式。命令的返回值决定了该次健康检查的成功与否:

0:成功
1:失败
2:保留值,不要使用

  • ARG
    用于构建参数,和ENV的作用差不多。但是ARG设置的是局部变量,只在dockerfile里面生效.
    在docker build的时候生效,构建镜像后此局部变量会不存在。

在docker build 时可以使用 --build-arg 定义变量的值。
不建议在构建时使用ARG传递密钥、用户凭证等信息,因为构建时的信息任何用户都可以通过docker history看到


三、nginx例子

nginx的dockerfile模板。

需要有个基础的镜像,基于这个镜像创建自定义的镜像,可以使用官方的centos镜像
docker pull centos

注意:构建镜像的文件名必须为dockerfile,目录可以自定义文章来源地址https://www.toymoban.com/news/detail-434525.html


3.1 需要先创建个dockerfile目录

mkdir /nginx/

3.2 在dockerfile目录下创建dockerfile文件

vim /nginx/dockerfile

FROM centos
MAINTAINER daoxiang
RUN yum install wget -y
RUN yum install nginx -y
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]


#创建index.html文件
vim /nginx/index.html
hello,world!!!

3.3 构建镜像的命令

docker build -t “images_name:tag” dockerfile_path
-t 用于命名镜像名和版本
-f 指定dockerfile目录的绝对路径


#制作镜像
docker build -t “wbh/nginx:v1” /nginx/

3.4 创建容器

#基于自己的镜像创建容器
docker run -itd -p 80 --name=nginx wbh/nginx:v1 

3.5 测试nginx是否正常运行

#查看容器地址
docker inspect nginx

# curl 容器ip
curl 172.17.0.2 

# 显示出hello,world! 就成功了

到了这里,关于dockerfile文件参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 39 C++ 模版中的参数如果 是 vector,list等集合类型如何处理呢?

    在前面写的例子中,模版参数一般都是 int,或者一个类Teacher,假设我们现在有个需求:模版的参数要是vector,list这种结合类型应该怎么写呢? map情况下的处理,好像不管咋写都有build error,这块先剩下,如果有网友知道怎么写,请帮忙在留言中指导一下

    2024年01月25日
    浏览(39)
  • vue:如果.vue文件内容过多,我们可以这样拆分

    一、标签内容太多,我们可以用组件的方式拆分 二、那如果JS的内容太多呢?因为耦合性太高,拆成组件后父子组件传值不方便,我们可以这样: 子组件: 父组件(也就是vue主页面): 逻辑拆分,相互调用不受组件影响  

    2024年02月02日
    浏览(48)
  • 在linux里如果日志文件过大,如何快速查询内容?

    在 Linux 中,如果日志文件过大,可能会导致查询内容变得困难和缓慢。以下是一些可以帮助您快速查询大型日志文件内容的方法: 使用 grep 命令: grep 是一个强大的文本搜索工具,可以在文件中快速搜索指定的或模式。例如,如果您希望在名为 logfile.log 的文件中搜索

    2024年02月08日
    浏览(58)
  • 【云原生】Dockerfile文件详解

    本文主要讲解了dockerfile的使用,在文章的最后加了一个dockerfile实现自制镜像的实战,如果你希望使用docker commit来制作镜像可以参考: 手动构建自己的docker容器镜像实战

    2023年04月15日
    浏览(34)
  • DockerFile文件详细解析

    所有文章不设限,我们相遇偶然,相散坦然,互不打扰,各自安好,向阳而生 致敬尚硅谷周阳老师,此处内容迁移学习来自于阳哥! DockerFile是用来构建Docker镜像的文本文件,是一条条构建镜像所需要的指令和参数构成的脚本 编写DockerFile文件 Docker build命令构建镜像 docker r

    2024年02月08日
    浏览(38)
  • Dockerfile文件

    Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取 Dockerfile 中的指令自动生成映像。 docker build 命令用于从Dockerfile构建映像。可以在 docker build 命令中使用 -f 标志指向文件系统中任何位置的Dockerfile。 例:docker build -f /pat

    2024年02月04日
    浏览(15)
  • Dockerfile文件详细教程

    Dockerfile是用来构建镜像的,他实际上就是把在linux下的命令操作写到了Dockerfile中,通过Dockerfile去执行设置好的操作命令,保证通过Dockerfile的构建镜像是一致的。 该例子来自于 chromium 项目 主要干的事情: 来指定用哪个镜像; 安装一些编译需要的环境:C++编译环境,Java环境

    2024年02月08日
    浏览(28)
  • Docker自定义java镜像(解决java:8镜像不支持arm64/aarch64的问题)(附带Dockerfile参数介绍)

    arm64/aarch64的云服务器、已经安装好docker、已经安装好对应版本且可以使用的jdk、服务器上有该jdk的安装包 (如:jdk-8u311-linux-aarch64.tar.gz) #打包镜像 注意有后缀 . Dockerfile的命令ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 (1)基础 每一条保留

    2024年02月09日
    浏览(39)
  • DockerFile中build文件失败

    出现的问题 :failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount2314644203/Dockerfile: no such file or directory 图片如下: 导致问题的原因 :创建的文件的名称首字母大写中间的字母不需要大写。图片如下: 解决方案 :将文件名称修改成小写字母,如下: 构建文件成功的状态 :

    2024年02月16日
    浏览(38)
  • 使用SCP在Linux中安全复制文件:参数详解

    SCP(Secure Copy)是一个在Linux和其他类Unix系统中使用的命令行工具,用于在本地和远程主机之间安全地复制文件和目录。本文将详细介绍SCP的多个常用参数,并通过示例进行说明。 其中, source 是要复制的文件或目录, destination 是目标位置。 -1, -2, -4, -6 -1 : 强制使用SSH协议版

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包