Docker 入门指南——Dockerfile 指令
COPY 复制文件
格式:
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
源路径可以是多个,甚至可以使通配符,规则满足 Go 的 filepath.Math 规则。
例如:
COPY hom* /mydir/
目标路径可以使容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以使用 WORKDIR 指令指定)。目标目录不存在会自动创建缺失目录。
可以理解为 COPY 源文件 目标文件,这里的源文件一开始容易出错,这个是你针对当前文件夹下路径来说的,即使你写的是/root/.pip/pip.conf,其实,它执行 build 时,会寻找的路径是get-pip/root/.pip/pip.conf,你理解了吗?
COPY . /app
COPY ./.pip/pip.conf ~/.pip/pip.conf
和 COPY 作用类似的有一个叫 ADD 的命令,他俩有什么区别呢?简单来讲, ADD 命令可以实现,当你源文件是压缩包时,它会自动解压并复制到你指定的目标文件,而且,ADD 命令的源文件还可以是一个 URL,但正是它功能的强大也给用户带来了不确定性,所以 Docker 官方并不太推荐使用 ADD 这个命令。
参考
ADD 更高级的复制
ADD 指令和 COPY 指令相比,它的源路径可以是一个 URL,这种情况,Docker 引擎会试图去下载这个链接的文件放到目标路径下。下载后的文件权限自动设置为 600 。如果需要修改,加一层 RUN 命令进行权限调整。
另外,如果下载的是压缩包,也需要使用 RUN 指令进行解压缩。所以,不弱直接使用 RUN 指令,然后使用 wget 或者 curl 工具下载进行操作。
如果源路径是一个 tar 压缩文件,压缩格式为 gzip,bzip2 以及 xz 情况时, ADD 指令将自动解压缩这个文件放到目录路径下。
例如:
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
Dockerfile 最佳实践文档中要求,尽可能使用 COPY 指令,因为它的语义更明确。
ENTRYPOINT
当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令,换句话说实际执行时,将变为:
<ENTRYPOINT> "<CMD>"
CMD 命令会被 镜像名之后的命令重新替换掉
参考
WORKDIR
用来切换工作目录所用,如果目录没有,它还会自动给你创建这个目录。要避免如下的使用方法,你会发现 app 目录下根本就不会有 world.txt 内容:
RUN cd /app
RUN echo "hello" > world.txt
参考
.dockerignore
构建镜像时,Docker需要先准备context ,将所有需要的文件收集到进程中。默认的context包含Dockerfile目录中的所有文件,但是实际上,我们并不需要.git目录,node_modules目录等内容。忽略一些不需要的文件,这样可以有效加快镜像构建时间,同时减少Docker镜像的大小。
.git/
node_modules
Reference
- Gitbook-yeasy-Dockerfile 指令详解
- Github-python/3.7/stretch/Dockerfile
- seanlook-Dockerfile指令详解
- 纯洁的微笑-Docker(三):Dockerfile 命令详解
- DockerHub 查看学习 Dockerfile 的好地方
编写 Dockerfile 实践
- 官宣-Best practices for writing Dockerfiles
- freax-编写Dockerfile的最佳实践
- Cizixs-编写 Dockerfile 的最佳实践 Go 开发者
- Deepzz-如何写Dockerfile,Dockerfile 参考文档 Go 开发者
- fundebug-如何编写最佳的Dockerfile
dockerignore
- 博客园-仓储大叔-docker~为什么没人说说.dockerignore
- CSDN-.dockerignore 文件的作用 文章也提到了 build 命令后的 . 的理解
Docker 入门指南——Dockerfile 指令的更多相关文章
- Docker 入门指南
Docker 入门指南 目录 基础概念 安装教程 基本操作 常用安装 构建操作 容器编排 壹.基础概念 什么是Docker? Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装 ...
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
- Docker入门之七Dockerfile
Dockerfile是一个文本格式的配置文本,可以使用它来创建自定义的镜像.首先我们可以先看一个dockerfile是什么样子.这里可以有一个网站不错:http://dockerfile.github ...
- docker入门1: Dockerfile介绍
Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...
- Docker学习(11) Dockerfile指令
Dockerfile指令 指令格式 FROM MAINTAINER RUN EXPOSE CMD ENTRYPOINT ADD COPY VOLUME WORKDIR ENV USER ONBUILD ...
- Docker 入门指南——部署常用服务示例
MongoDB FROM centos:centos7 MAINTAINER The CentOS Project <cloud-ops@centos.org> RUN yum -y up ...
- Docker 入门:Dockerfile
主要内容: 什么是 Dockerfile 查看 DockerHub 中镜像的 Dockerfile Dockerfile 编写 Dockerfile 常用命令 什么是 Dockerfile 使用 Do ...
- docker入门指南(转载)
原文: http://bg.biedalian.com/2014/11/20/docker-start.html 关于 docker 今天云平台的同事提到, 现在的运维就是恶性循环, 因为大家都在申请 ...
- Docker使用札记 - Dockerfile指令
ARG ARG跟ENV都可以定义变量,不同在于ARG在构建期结束时是销毁,而ENV定义的是系统中的环境变量,不会在构建结束时销毁,在以后的构建中直接使用. 当ARG和ENV定义相同名称的变量时,ENV ...
随机推荐
- mysql 5.6 每天凌晨12:00 重置sequence表中的某个值
#.创建evevt要调用的存储过程update_current_value_procedure delimiter // drop procedure if exists update_current ...
- Cocos Creator学习目录
目录 安装和启动 文件结构 编辑器基础 基本概念 (场景树 节点 坐标 组件 ) Cocos Creator 脚本简介 Cocos Creator调试 节点 cc.Node 组件开发cc.Compon ...
- 如何在Sitecore CMS中创建项目
从功能区 打开Sitecore的内容编辑器,选择内容树中的项目.创建的项目将作为所选项目的子项添加. Sitecore 8显示所选的Home项目 Sitecore 6和7显示所选的Home项目 功能区 ...
- 51ll网产品信息保存为txt文件
import requests from pyquery import PyQuery as pq url='http://www.51xxx.com/Try/index/p/3' headers={ ...
- Hadoop学习笔记之四:HDFS客户端
HDFS的客户端核心是DFSClient类,所有使用HDFS的客户端都会持有一个DFSClient对象,或通过持有一个DistributedFileSystem对象间接使用DFSClient: DFS ...
- Python+OpenCV图像处理(四)—— 色彩空间
一.色彩空间的转换 代码如下: #色彩空间转换 import cv2 as cv def color_space_demo(img): gray = cv.cvtColor(img, cv.COLOR ...
- 76 道 Oracle Goldengate 面试问题
基础 12c新特性 性能 Troubleshoot 其它 1. Oracle Goldengate 支持部署到哪些拓扑? GoldenGate supports the following topol ...
- Let's Chat ZOJ - 3961
ACM (ACMers' Chatting Messenger) is a famous instant messaging software developed by Marjar Technolo ...
- Google's Machine Learning Crash Course #04# First Steps with TensorFlow
1.使用 TensorFlow 的建议 Which API(s) should you use? You should use the highest level of abstraction tha ...
- Firefox创建firefoxprofile
我们自动化测试的时候,有时不需要图片加载出来,提高浏览器加载速度,从而提高脚本的执行速度.另外在一些网络比较差的环境下,禁用css.图片等加载可以提高访问速度 方法: 1.创建自己的firefoxpr ...