文件说明

      此文件用于docker镜像文件的制作

  基本结构

      Dockerfile文件由行命令组成,以#开头注释行

      一般分为四部分,基础镜像信息、维护者信息、镜像操作指令和容器启动执行指令。

      例如

      

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-nanoserver-1903 AS base
WORKDIR /app
EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1903 AS build
WORKDIR /src
COPY ["WebApiDemo/WebApiDemo.csproj", "WebApiDemo/"]
RUN dotnet restore "WebApiDemo/WebApiDemo.csproj"
COPY . .
WORKDIR "/src/WebApiDemo"
RUN dotnet build "WebApiDemo.csproj" -c Release -o /app/build FROM build AS publish
RUN dotnet publish "WebApiDemo.csproj" -c Release -o /app/publish FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApiDemo.dll"]

      开始指明基于的镜像说明,下面推荐说明维护者信息,后面是镜像操作指令,最后是CMD指令,用于指定运行容器是操作的命令。

  指令

    FORM

    格式为 FROM <image> 或者 <image>:<tag>

    第一条指令必须为FORM指令,并且如果同一个Dockerfile中创建多个镜像时,可以使用多个FORM指令(每个镜像一次)

    MAINTAINER

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

    

    RUN

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

    前者在shell终端中运行命令,后者则使用exec运行。

    指定使用其他终端可以通过第二种方式实现。

    每条RUN指令在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时候可以使用 \ 换行。

    CMD

    支持三种格式:

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

    每个Dockerfile只能有一条CMD命令,如果指定多条命令,则只有最后一条会被执行

    如果用户启动容器的时候指定了运行的命令,则会覆盖CMD指定命令

    EXPOSE

    指定暴漏的端口号,格式为 EXPOSE <port> [<port>... ]

    -P ,自动分配随机端口

    -p ,指定端口

    ENV

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

    例如:

    

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

    ADD

    格式为 ADD <src> <dest>

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

    

    COPY

    格式为 COPY <src> <dest>

    复制本地的 <src>(为dockerfile所在的相对目录) 到 到容器中的 <dest>

    ENTRYPOINT

    两种格式:

    • ENTRYPOINT ["executable","param1","param2"]
    • ENTRYPOINT command parma1 param2

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

    每个Dockerfile中只能有一个 ENTRYPOINT,当指定多个时只对最后一个有效

    

    VOLUME

    格式为 VOLUME ["/data"]

    创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据库

    

    USER

    格式为 USER daemon

    指定运行容器时的用户名和UID,后续的 RUN 也会指定用户

    WORKDIR

    格式为 WORKDIR /path/to/workdir

    为后续的 RUN、CMD、ENTRYPOINT 的指令配置工作目录

    可以使用多个 WORKDIR 指令,后续指令如果是相对路径,则会基于之前的命令指定的路径

    e.g.最终路径为 /a/b/c ,可以简单理解为多次CD指令

    

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

    ONBUILD

    格式为 ONBUILD [INSTRUCTION]

    配置当前所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令

    推荐使用该指令时在标签中注明,如:ruby:1.9-onbuild

    e.g.Dockerfile使用如下的内容创建镜像 image-A

    

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

    如果基于image-A创建新的镜像时候,新Dockerfile中使用 FORM image-A 指定基础镜像时,会自动执行 ONBUILD的指令内容,等价于在后面添加了两条指令

  

FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

    

Dockerfile文件说明的更多相关文章

  1. 【Docker】(6)---Dockerfile文件

    springboot项目打包镜像中的Dockerfile文件 在讲Dockerfile文件之前应该先讲下maven的一个插件叫:dockerfile-maven-plugin.他们是组合一起用的 一. ...

  2. docker18.09.5 Dockerfile文件编写

    Dockerfile命令详解(超全版本)  https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html 案例1 dockerfile文件内容: FRO ...

  3. Dockerfile文件详解

    什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...

  4. Docker(十)-Docker创建DockerFile文件

    制作Docker image 有两种方式: 使用 Docker container,直接构建容器,再导出成 image 使用. 是使用 Dockerfile,将所有动作写在文件中,再 build 成 ...

  5. ASP.NET CORE做的网站运行在docker上(不用dockerfile文件部署)

    按网上的做法用dockerfile文件是可以弄得出来的,http://www.docker.org.cn/article/119.html, 不过我想把网站文件放在外面硬盘目录,再映射进去,这样只要在 ...

  6. Docker定制容器镜像(利用Dockerfile文件)

    1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [root@docker01 myfiles ...

  7. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

  8. asp.net core中DockerFile文件中的COPY

    今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...

  9. 使用Dockerfile文件构建基于centOS系统的tomcat镜像

    以下是Dockerfile的内容: #基础镜像 FROM centos #维护人员信息 MAINTAINER weigs "weigs1231@gmail.com" #设置工作目录 ...

  10. docker-maven-plugin 完全免Dockerfile 文件

    # DockerSpringBootPlugin docker-maven-plugin 完全免Dockerfile 文件 使用docker-maven-plugin 进行完全免 Dockerfile ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:部件拉伸策略sizePolicy优先级

    部件的尺寸调整策略或拉伸策略sizePolicy有7个值,如果同一个布局中的不同部件设置了不同的拉伸策略策略,在整个布局空间拉伸时,它们会怎么进行拉伸处理呢? 在未设置拉伸因子的情况下,Qt中这些拉伸 ...

  2. 利用IDEA把Java项目打成jar包

    第一步:按如下步骤或Ctrl+Shift+Alt+S打开 Project Structure第二步:第三步:选择要执行的文件,  依次选择项目, main方法所在的文件, 保存如果出现以下错误:则根据 ...

  3. 【Codeforces 1181E】A Story of One Country (Easy & Hard)(分治 & set)

    Description 在一个二维平面上有若干个矩形.定义一个矩形的(或有边在无限远处)区域为符合条件的条件为: 这个区域仅包含一个矩形,且不能使边界穿过任何一个矩形的内部. 这个区域可以用一个水平或 ...

  4. mysql 迁移数据库到 oracle (sql注意问题)

    http://ykdn2010.iteye.com/blog/1511349 一. 项目已用到 oracle 函数的转换 1.  Oracle 中的 TO_DATE (),TO_CHAR () 示例: ...

  5. 本地安装yum源脚本

    rpm -qa|grep yum   //检查是否安装了yum. 如果没有安装就执行下面的文件 创建一个以xxx.sh结尾的文件 #!/bin/bash #创建两个文件用于挂载文件 mkdir /mn ...

  6. ftp之filezilla使用记录

    1.550 can't access file错误 我们在客户端查看文件时,有些文件被另外的程序占用了,就会出现这个错误.比如,log日志文件.解决办法:在server端,找到settings设置,找 ...

  7. MySQL 5.7.29安装配置

    一.环境准备(关闭防火墙) 1.清除已安装数据库 [root@mysql01 ~]# rpm -qa | grep mariadb mariadb-libs-5.5.35-3.el7.x86_64 [ ...

  8. Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置

    1. Mycat简介 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...

  9. Numpy的学习4-array的合并

    import numpy as np A = np.array([1, 1, 1]) B = np.array([2, 2, 2]) print(np.vstack((A, B))) # vertic ...

  10. 多任务-python实现-进程(2.1.7)

    @ 目录 1.进程是什么 2.进程的生命周期 3.Python中多进程的实现 4.进程和线程的区别 1.进程是什么 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源 ...