dockerfile简单使用

Dockerfile是一个文本格式的配置文件,可以使用在命令行中调用任何命令。用户可以使用Dockerfile快速创建自定义的镜像

docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的

a.使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1  .

Dockerfile 文件在/tmp目录下,生成的镜像名为 my/first_image
docker build  -t  my/first_image  /tmp


b.使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox


c.也可以通过 -f Dockerfile 文件的位置
  docker build -f /path/to/a/Dockerfile

基本命令:
1.支持使用# 注释

2.第一行必须制定基于的基础镜像
FROM  镜像名

如果在同一个Dockerfile中创建多个镜像,可以使用多个FROM(每个镜像一次)

FROM microsoft/aspnetcore:2.0

维护者信息(可不写)
MAINTAINER: 维护者信息
示例:
    MAINTAINER Jasper Xu
    MAINTAINER sorex@163.com
    MAINTAINER Jasper Xu <sorex@163.com>


3.RUN:构建镜像时执行的命令.其有以下两种命令执行方式:

shell执行
格式:
    RUN <command>
如/bin/sh  -C

exec执行
格式:
    RUN ["executable", "param1", "param2"]
示例:
    RUN apk update
    RUN  ["/bin/sh ", "-C", "echo hello"]
每条指令将在当前镜像基础上执行指令命令,并提交为新的镜像。当命令较长时候可以使用来换行


注:
  RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参

数,如:docker build --no-cache


4.ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

ADD  <src>  <dest>
该命令将复制指定的<src>到容器的<dest>
其中<src>可以是Dockerfile所在目录的一个相对路径,也可以是一个URL,还可以是一个tar文件。

ADD  ./bonree_agent/  /bonree_agent


5.COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
COPY  <src>  <dest>
复制本地主机的 <src>(为Dockerfile所在目录的相对路径,文件或者目录)为容器的<dest>。当目标路径不存在时会自动
创建。
如:ADD  ./bonree_agent/  /bonree_agent
当使用本地目录为源目录时,推荐COPY。



6.CMD:构建容器后调用,也就是在容器启动时才进行调用。

   支持三种格式:
CMD ["excutable","param1","param2"]使用exec执行,推荐方式。
CMD command  param1  param2   在/bin/sh中执行,提供给需要交互的应用。
CMD ["param1","param2"]提供给ENTRYPOINT的默认参数

指定启动容器时每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条生效。


7.ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
有两种格式:
ENTRYPOINT  ["executable","param1","param2"]
ENTRYPOINT  command  param1  param2 (shell中执行)

配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。

每个Dockerfile只能有一条ENTRYPOINT命令,如果指定了多条,只有最后一条生效。



8.ENV:设置环境变量
ENV  <key> <value>指定一个环境变量,会被RUN指令使用,并在容器运行时保持。
例如:
ENV  CORECLR_ENABLE_PROFILING  1

9.EXPOSE:指定于外界交互的端口

  EXPOSE <port>  [<port>....]
 EXPOSE 22 80 8443
告诉docker服务端容器暴露的端口号,供互联网系统使用。在启动容器的时候需要通过-P,docker主机会自动分配
一个端口转发到指定端口。使用-p,则可以具备指定哪个本地端口映射过来。

10、VOLUME:用于指定持久化目录  一般用来存放数据库或者需要保持的数据等
格式:VOLUME  ["/data"]
     VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"
注:
  一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:

1 卷可以容器间共享和重用
2 容器并不一定要和其它容器共享卷
3 修改卷后会立即生效
4 对卷的修改不会对镜像产生影响
5 卷会一直存在,直到没有任何容器在使用它

11.WORKDIR:工作目录,类似于cd命令
格式:WORKDIR /path/workdir
为后续的RUN  CMD  ENTRYPOINT指令配置工作目录
可以使用多个WORKDIR指令。后续的命令如果是相对路径,则会基于之前的命令指定的路径
WORKDIR  /a
WORKDIR  b
最终路径为/a/b


12.USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID

,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

USER  daemon

例如:RUN groupadd -r postgres && useradd -r  -g  postgres
要临时获取管理员权限可以使用gosu  不推荐sudo



13.ONBUILD:用于设置镜像触发器
ONBUILD [INSTRUCTION]
当该镜像别其他镜像当做基础镜像时触发此命令。

 ONBUILD ADD . /app/src
 ONBUILD RUN /usr/local/bin/python-build --dir /app/src
相当于在后面添加了两条指令。

具体一个demo:




原文地址:https://www.cnblogs.com/mayyan/p/11805986.html