ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

dockerfile

2022-08-30 22:00:29  阅读:199  来源: 互联网

标签:opt Dockerfile root CMD node1 dockerfile ly


目录


什么是dockerfile

dockerfile 构建镜像是以基础镜像为基础。Dockerfile是一个文本文件,内容就是用户编写的docker指令,每一条指令构建一层,每一条指令内容就是描述每一层如何构建。

dockerfile的基本结构

Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义镜像。

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。

Docker分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时默认要执行的指令

dockerfile的指令

指令的一般格式为INSTRUCTION arguments,指令包括:

  • FROM
  • LABEL MAINTAINER
  • RUN
  • CMD
  • EXPOSE
  • ENV
  • ADD
  • COPY
  • ENTRYPOINT
  • VOLUME
  • USER
  • WORKDIR
  • ONBUILD

FROM第一条指令必须为FROM指令。格式为FROM <image>FROM <image>:<tag>

[root@node1 opt]# cat Dockerfile
FROM busybox

LABEL MAINTAINER指定维护者信息 格式为LABEL MAINTAINER <name email_address>

LABEL MAINTAINER jiran 1@2.com

RUN每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像

格式为RUN <command>RUN ["executable","param1","param2"]

FROM busybox

RUN echo "ly" > /opt/

CMD用于指定启动容器时默认要执行的命令,每个Dockerfile只能有一条CMD命令。

CMD支持三种格式:

  • CMD ["executable","param1","param2"]使用exec执行,推荐方式
  • CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用
  • CMD ["param1","param2"]提供给ENTRYPOINT的默认参数
FROM busybox

CMD ["apachectl","-D","FOREGROUND"]

EXPOSE用于告诉Docker服务器容器暴露的端口号,供互联系统使用。

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

FROM busybox
  
EXPOSE 80
CMD ["httpd","-f","-h","tmp"]
[root@node1 opt]# podman  build -t ly:1.1 .
[root@node1 opt]# podman  run -d -P ly:1.1
20b11784b4eb1518dfc3660fd185906a0bc3d746a78863513a3ff5371bdc2731
[root@node1 opt]# podman  port -l
80/tcp -> 0.0.0.0:45463

ENV指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持 格式为ENV <key> <value>

FROM busybox
  

ENV version 1
RUN echo ${version} > /opt

EXPOSE 80
CMD ["httpd","-f","-h","tmp"]
[root@node1 opt]# podman  build -t ly:1.3 .
[root@node1 opt]# podman  run -it  ly:1.3 /bin/sh
/ # cat /opt 
1

ADD该命令将复制指定的到容器中的。其中可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(会自动解压为目录)。

格式为ADD <src> <dest>

FROM busybox
ADD abc /tmp
Successfully tagged localhost/ly/v1.4:latest
24d8eca8d01c10543af4f5edac64760a7e1e4f4a2cc8ef9f7fab81833fc5c415 
[root@node1 opt]# podman  run -it  ly/v1.4 /bin/sh
/ # ls /tmp/
abc

COPY复制本地主机的(为Dockerfile所在目录的相对路径,文件或目录)为容器中的。目标路径不存在时会自动创建。

格式为COPY <src> <dest>

FROM busybox
  

COPY abc /tmp/abc
[root@node1 opt]# podman  build -t ly/v1.5 .
[root@node1 opt]# podman  run -it  ly/v1.5 /bin/sh
/ # ls /tmp/abc 
/tmp/abc

ENTRYPOINT配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。而且,如果在docker run的后面提供了参数,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序。

ENTRYPOINT有两种格式:

  • ENTRYPOINT ["executable","param1","param2"]
  • ENTRYPOINT command param1 param2(在shell中执行)
FROM busybox
  

ENTRYPOINT ["apachectl","-D","FOREGROUND"]

WORKDIR为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
可以使用多个WORKDIR指令,后续命令如果参数是相对路径 格式为WORKDIR /path/to/workdir

FROM busybox
WORKDIR /tmp
[root@node1 opt]# podman  build -t ly/v1.7 .
[root@node1 opt]# podman  run -it  ly/v1.7 /bin/sh
/tmp # 

创建镜像

编写完成Dockerfile后,可以通过docker build命令来创建镜像。

基本的格式为docker build [选项] 路径,该命令将读取指定路径下(包括子目录)的Dockerfile,并将该路径下所有内容发送给Docker服务端,由服务端来创建镜像。因此一般建议放置Dockerfile的目录为空目录。

另外,可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让Docker忽略路径下的目录和文件。

要指定镜像的标签信息,可以通过-t选项。

[root@node1 opt]# podman  build -t ly/v1.7 .

标签:opt,Dockerfile,root,CMD,node1,dockerfile,ly
来源: https://www.cnblogs.com/TQingS/p/16641026.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有