首页 > 其他分享 >dockerfile

dockerfile

时间:2022-08-30 22:00:37浏览次数:49  
标签: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 [email protected]

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
From: https://www.cnblogs.com/TQingS/p/16641026.html

相关文章

  • Dockerfile
    Dockerfile目录Dockerfile基本结构指令FROMLABELMAINTAINERRUNCDMEXPOSEENVADDcopyENTRYPOINTVOLUMEUSERWORKDIR基本结构Dockerfile是一个文本格式的配置文件,用户可以......
  • Dockerfile容器设置中文
    FROMcentos:7.6.1810RUNln-snf/usr/share/zoneinfo/Asia/Shanghai/etc/localtime&&\yuminstallglibc-common-y&&\localedef-c-fUTF-8-izh_CN......
  • 【云原生】镜像构建实战操作(Dockerfile)
    目录一、概述二、Dockerfile结构三、常用Dockerfile操作指令1)镜像构建(dockerbuild)2)运行容器测试(dockerrun)3)ARG4)FROM5)MAINTAINER(已弃用)6)VOLUME7)RUN8)COPY9)ADD10)ENV11)WORKDI......
  • dockerfile deploy
    Failedtodeploy'baseDockerfile:Base/Dockerfile':java.lang.RuntimeException:com.fasterxml.jackson.databind.JsonMappingException:NullkeyforaMapnota......
  • 二,Dockerfile
    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;2、对于测试人员:......
  • 迁移与备份,Dockerfile,Docker私有仓库,Docker-compose,Mysql主从搭建,django读写分离
    1迁移与备份#一个容器内,尽量只有一个软件,不要把mysql,redis,。。。方到一个容器中,而要放到多个容器#镜像---》容器---》装了软件(vim,mysql)---》打包成镜像#打包后的镜......
  • docker篇:迁移备份、Dockerfile、私有仓库、docker-compose
    目录一、迁移备份二、Dockerfile2.1镜像如何获得2.2Dockerfile是什么?2.3如何构建镜像和配置dockerfile三、Docker私有仓库3.1如何将镜像传到公有仓库3.2自己搭建私有......