其他分享
首页 > 其他分享> > dockerfile

dockerfile

作者:互联网

目录


什么是dockerfile

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

dockerfile的基本结构

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

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

Docker分为四部分:

dockerfile的指令

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

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支持三种格式:

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有两种格式:

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