ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dockerfile 参考

2021-03-18 09:02:06  阅读:184  来源: 互联网

标签:参考 构建 build 镜像 docker Dockerfile Docker


Dockerfile 参考

Docker可以自动读取Dockerfile中指令集后构建镜像,Dockerfile是一个文本文件,包含用户构建镜像需要的所有命令。用户使用docker build启动一个构建任务来自动执行一些命令行指令。

这个文档是描述怎么使用Dockerfile的命令,当阅读完之后就可以去进行最佳实践了。

Usage(用法)

docker build命令从Dockerfile(上下文)构建镜像,这个上下文是一个指定位置的路径URL,这个路径是你本地文件系统中的一个目录,URL是一个Git仓库地址。

上下文是递归处理的,所以路径包括任何子目录,URL包扣仓库和其子模块,以下使用一个当前目录作为上下文的构建命令:

$ docker build .

Sending build context to Docker daemon  6.51 MB
...

这个构建是运行的Docker守护进而不是CLI,构建程序要做的第一件事是将整个上下文(递归)发送到守护进程。在大多数情况下,最好将一个空目录作为上下文,仅将Dockerfile和Dockerfile所需的文件放到该目录下。

警告:
不要用root/目录作为Path,这会造成在构建时将硬盘的全部内容导入到Docker守护进程中。

在构建上下文中通过文件构建,Dockerfile会涉及到一系列指定的指令,例如COPY。为了提高构建的性能,用.dockerignore将不要的文件和目录从上下文中排除,在本问下下面有更多关于.dockerignore的说明。

通常Dockerfile会放在构建上下文的根目录中,当然在用docker build时可以用-f来指定构建的目录。

$ docker build -f /path/to/a/Dockerfile .

注:
如果Dockerfile里面有路径,则需要更改为和当前目录保持一致。例如Dockerfile中存在拷贝命令,xxxapp为Dockefile所在目录的子目录,如果切换到Dockerfile所在目录build无需更改,如果使用-f那么需要修改为当前执行命令目录一致,否则会提示COPY failed: stat /xxxx/xxx no such file or directory

COPY /xxxapp/ /app # 切换到Dockerfile所在目录构建命令
COPY /path/to/a/Dockerfile/xxxapp/ /app # 切换到上层目录/path/to/a/Dockerfile构建需更改保持一致

可以指定构建的新镜像的存储库和标记(注:即镜像名称)

$ docker build -t shykes/myapp .

如果有多个存储库添则加多个-t参数

$ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

在Docker守护进程执行Dockerfile中指令前,会进行初步验证Dockerfile,如果存在语法错误会返回响应的错误信息:

$ docker build -t test/myapp .

Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

Docker守护进程是将Dockerfile中的指令一条一条的执行的,在最终输出你提供的ID名称作为新镜像前,如果有必要会将每天执行执行后的结果作为一个新镜像,不用担心Docker守护进程会自动的清除。(注:实际上清除不干净,所以在构建后经常会看到REPOSITORTY和TAG为<none>的镜像,通常用docker system prune清除或则手动清除)。

请注意,每条指令都是单独运行的,并导致创建新镜像,所以RUN cd /tmp不对对下一条指令造成影响。

只要有可能,Docker会尽可能的重用中间镜像(缓存),大大加快docker build的过程,下面表明在控制台输出中会利用缓存(Using cache)信息:

$ docker build -t svendowideit/ambassador .

Sending build context to Docker daemon 15.36 kB
Step 1/4 : FROM alpine:3.2
 ---> 31f630c65071
Step 2/4 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 3/4 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 4/4 : CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

构建缓存仅仅用于本地具有福链的镜像,这意味着这些缓存镜像是之前构建产生的和使用docker load导入的。如果你希望使用指定的镜像作为构建缓存,你可以用--cache-from选项来指定,利用--cache-from指定的镜像不需要父链,可以从其他注册表(注:仓储)中拉取。

当你完成构建后,你可以考虑准备将你的镜像推送到注册表中

BuildKit(编译工具)

从18.09版本起,Docker支持由moby/buildkit项目提供用于执行构建的新后端,新的后端构建工具比旧的提供了很多很好的工具,例如:

  • 检测并跳过执行未使用的构建阶段
  • 并行构建独立的构建阶段
  • 仅增量传输构建上下文之间有更改的文件
  • 检测并跳过传输中上下文没有使用的文件
  • 使用具有许多新功能的外部Dockerfile实现
  • 避免其他API(中间镜像和容器)的副作用
  • 优先考虑构建缓存以进行自动修剪

要使用BuildKit backend,在执行docker build .之前你需要在CLI上设置环境变量DOCKER_BUILDKIT=1
要学习更对关于BuildKit backend构建实验性的Dockerfile语法,请阅读BuildKit仓储的文档

Format(格式)

以下关于Dockerfile的格式:

# Comment
INSTRUCTION arguments

/2021-03-18 第一部分///进行中

标签:参考,构建,build,镜像,docker,Dockerfile,Docker
来源: https://blog.csdn.net/yiquan_yang/article/details/114961864

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有