Dockerfile文件说明
文件说明
此文件用于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文件说明的更多相关文章
- 【Docker】(6)---Dockerfile文件
springboot项目打包镜像中的Dockerfile文件 在讲Dockerfile文件之前应该先讲下maven的一个插件叫:dockerfile-maven-plugin.他们是组合一起用的 一. ...
- docker18.09.5 Dockerfile文件编写
Dockerfile命令详解(超全版本) https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html 案例1 dockerfile文件内容: FRO ...
- Dockerfile文件详解
什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...
- Docker(十)-Docker创建DockerFile文件
制作Docker image 有两种方式: 使用 Docker container,直接构建容器,再导出成 image 使用. 是使用 Dockerfile,将所有动作写在文件中,再 build 成 ...
- ASP.NET CORE做的网站运行在docker上(不用dockerfile文件部署)
按网上的做法用dockerfile文件是可以弄得出来的,http://www.docker.org.cn/article/119.html, 不过我想把网站文件放在外面硬盘目录,再映射进去,这样只要在 ...
- Docker定制容器镜像(利用Dockerfile文件)
1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [root@docker01 myfiles ...
- 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等
一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...
- asp.net core中DockerFile文件中的COPY
今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...
- 使用Dockerfile文件构建基于centOS系统的tomcat镜像
以下是Dockerfile的内容: #基础镜像 FROM centos #维护人员信息 MAINTAINER weigs "weigs1231@gmail.com" #设置工作目录 ...
- docker-maven-plugin 完全免Dockerfile 文件
# DockerSpringBootPlugin docker-maven-plugin 完全免Dockerfile 文件 使用docker-maven-plugin 进行完全免 Dockerfile ...
随机推荐
- 第 7 篇 Scrum 冲刺博客
每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 补充注释,初步查找bug 修改bug 无 陈创 ...
- Object.prototype.toString.call()和typeof()区别
js中判断数据类型都知道用tyoeof(),但是他只能判断object,boolean,function,string,number,undefined还有symbol(es6新增)这几种初步类型,比 ...
- P5327 [ZJOI2019]语言
一边写草稿一边做题吧.要看题解的往下翻,或者是旁边的导航跳一下. 草稿 因为可以开展贸易活动的条件是存在一种通用语 \(L\) 满足 \(u_i\) 到 \(v_i\) 的最短路径上都会 \(L\) ...
- AcWing 380. 舞动的夜晚
大型补档计划 题目链接 这题是求必须边,而不是不可行边,因为不可行边 = 必须边 + 死掉了的边(貌似lyd第三版书上还是说的不可行边)先跑最大流. 在跑完以后的残余网络上,对于一条当前匹配的边 \( ...
- Ionic学习记录
1.跨域问题 浏览器中的运行 当你运行 ionic serve 时发生了什么呢? 启动了一个本地 web 服务器 你的浏览器打开并定位到本地服务器地址 这让你看着你的应用加载到你电脑上一个浏览器里,地 ...
- 安全声明标记语言SAML2.0初探
目录 简介 SAML的构成 SAML的优势 SAML是怎么工作的 SP redirect request; IdP POST response SP POST Request; IdP POST Re ...
- CSS文本溢出效果&滚动条样式设置
一.文本溢出 1.overflow: hidden; 超出文本会被剪裁隐藏不可见 scroll;超出文本会被剪裁, 显示滚动条 auto; 如果文本超出会显示滚动条,没超出不会显示, overflo ...
- oracle查年度周末日期
1.查年度周末日期sql SELECT distinct TRUNC(TO_DATE('2019-01-01','yyyy-mm-dd')+ rownum,'iw')+ 5 AS sat, TRUNC ...
- mysql 5.7全备脚本
#!/bin/bash mysql_user="root" mysql_password="mysqlpassword" mysql_host="19 ...
- css精髓:这些布局你都学废了吗?
前言 最近忙里偷闲,给自己加油充电的时候,发现自己脑海中布局这块非常的凌乱混杂,于是花了一些时间将一些常用的布局及其实现方法整理梳理了出来,在这里,分享给大家. 单列布局 单列布局是最常用的一种布局, ...