WORKDIR 指令用于声明当前的工作目录,以后各层的当前目录就被改为指定的目录。格式为 WORKDIR <工作目录路径>。

如该目录不存在,WORKDIR 会帮你建立目录。再次强调!不要以为编写 Dockerfiel 是在写 shell 脚本。

下面是一个错误示例:

RUN cd /app

RUN echo "hello" > world.txt

如果将这个 Dockerfile 进行构建镜像运行后,会发现找不到 /app/world.txt 文件,或者其内容不是 hello。

原因其实很简单,这两行 RUN 命令的执行环境根本不同,是两个完全不同的容器。这就是对 Dockerfile 构建分层存储的概念不了解所导致的错误。

之前说过每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。

两行 RUN 分别构建了并启动了各自全新的容器。

因此如果需要改变以后各层的工作目录的位置,那么应该使用 WORKDIR 指令。

FROM alpine

WORKDIR /a/b

RUN touch a_b_f.txt

WORKDIR /a

RUN touch a_f.txt

[root@localhost workdir]# docker run -it alpine:workdir /bin/sh

/a # ls

a_f.txt b

/a # cd b

/a/b # ls

a_b_f.txt

COPY 指令

格式:

  • COPY <源路径>... <目标路径>
  • COPY ["<源路径1>",... "<目标路径>"]

和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。

<目标路径> 可以是容器内的绝对路径,也可以是相对于 WORKDIR 指定的工作目录的相对路径。目标路径不需要事先创建,如果目录不存在会在复制文件前先被创建。

COPY 指令将会从构建的上下文目录中,把源路径的文件或目录复制到新的一层的镜像内的 <目标路径> 位置。比如:

COPY qf.json /usr/src/app/

注意下面是错误的

COPY qf.json /usr/src/app

这样会把 qf.json 拷贝成为 /usr/src/ 目录下的 app 文件

<源路径> 可以是多个,支持通配符,如:

COPY qf* /app/

COPY q?.txt /app/

使用 COPY 指令,源文件的各种元数据都会保留。

比如读、写、执行权限、文件变更时间等。

ADD 指令

ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。

支持自动解压缩,压缩格式支持: gzip, bzip2 以及 xz

官方推荐使用 COPY 进行文件的复制。

ADD 指定会使构建镜像时的缓存失效,导致构建镜像的速度很慢。

COPY 和 ADD 指令中选择的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。

ADD qf.tar.gz /

USER 指令

USER 则是改变执行 RUN, CMD 以及 ENTRYPOINT 这类命令的身份。

这个用户必须是事先在容器内存在(建立好)的,否则无法切换。

如果以 root 执行的脚本,在执行期间希望改变身份,比如希望以某个已经建立好的用户来运行某个服务进程,不要使用 su 或者 sudo,这些都需要比较麻烦的配置,而且在 TTY 缺失的环境下经常出错。建议使用 gosu。

创建txt文件指令_Linux云计算教程全套视频合集:WORKDIR 指令讲解相关推荐

  1. dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)

    我们可以把刚才的对容器的所有操作命令都记录到一个文件里,就像写更脚本程序.之后用 docker build 命令以此文件为基础制作一个镜像,并会自动提交到本地仓库.这样的话镜像的构建会变的透明化,对镜 ...

  2. Python碎片化学习教程 @19. 在指定路径下创建.txt文件,并写入内容

    代码功能:在指定路径下创建.txt文件,并写入内容 代码如下: file = open("1.txt", "w", encoding="utf8&qu ...

  3. C++ 如何用创建txt文件,并且写入内容(汇总)

    void CreatTxt(char* pathName, unsigned char* rBuffer,int length)//创建txt文件 {  //char* path = "C: ...

  4. idea 新建的java项目没发run_IntelliJ IDEA创建普通的Java 项目及创建 Java 文件并运行的教程...

    最近突然看到这篇几年前随手记录的文章,居然浏览量那么高.看来很多小伙伴也开始从 Eclipse 转到 IDEA,这里为了让大家更好的掌握 IDEA 的使用,我建议大家可以看看下面这个 IDEA 教程. ...

  5. 创建txt文件_Mac电脑创建txt文件的方法

    mac电脑该怎么创建TXT文件?可能很多新手小伙伴在刚刚接触mac电脑的时候不知道该如何创建TXT文件,今天本篇文章就为大家介绍如何设置新建txt文档文件的快捷键,还不知道的朋友快来学习一下吧! 第一 ...

  6. Python创建txt文件并读取与写入

    Python创建txt文件并读取与写入 [PyCharm 软件内操作] 在PyCharm中创建工作目录(D:\python\test1\) 一.创建一个txt文档 # -*- coding: utf- ...

  7. Android开发创建txt文件并读写txt文件数据

    在Android开发过程中,经常会遇到需要创建txt文件并写入数据的情况.今天我们来介绍一下如何实现这样的功能. 一.创建txt文件 /*** 创建txt文件*/private void create ...

  8. mac 打开html文件乱码,mac打开txt文件乱码如何处理方法教程

    mac打开txt文件乱码如何处理方法教程 这篇文章主要帮助大家解决mac打开txt文件乱码这个现象,希望能帮助到你. 很多朋友在MAC电脑上下载了TXT格式的文件以后,会出现打开乱码的问题.针对这个问 ...

  9. Eagle for Mac怎么创建智能文件夹?mac版eagle创建智能文件夹的图文教程

    Eagle 软件的"智能文件夹"功能,可以按名称.标签.颜色等条件自动分类你保存的图片.除此以外,他在提高你工作效率的同时,也可以使你灵感的采集和整理成为了一种愉悦的习惯. 那Ea ...

最新文章

  1. Django 模型查询2.3
  2. (0079)iOS开发之安全策略之HTTPS(2)
  3. 修改BeEF工具默认密码
  4. hdu 4763 Theme Section(next数组找串中三段相等)
  5. windows主机用scp命令向Linux服务器上传和下载文件
  6. MySQL之SELECT查询表达式
  7. 洛谷 - P4015 运输问题(费用流)
  8. 苹果html5跑分排行,UC浏览器HTML5跑分创新高 升全球第一
  9. 2021:测试人员面试时都中过哪些套路?
  10. uniapp动态显示数组_【报Bug】uniapp 在小程序中 动态修改添加 数组 数据 ,点击获取的索引值错误...
  11. 前言 第一章 为什么要培养好习惯
  12. 95. php 与 xml
  13. centos 6 安装 php 5.5 fpm支持
  14. 傅里叶变换对_复变函数6傅里叶变换
  15. Python openpyxl文档
  16. 【计算机网络】IP地址
  17. 解决异常 more than one ‘primary‘ bean found among candidates: [jacksonObjectMapper, objectMapper]
  18. 万字长文:人脸识别综述(学习笔记)
  19. cisco链路聚合 不均衡_思科CISCO交换机间链路聚合端口聚合实现方法详解
  20. 什么是MyBatis?怎么操作MyBatis?

热门文章

  1. Django环境配置
  2. supervisor安装和配置
  3. lg空调代码大全解决_LG空调故障代码大全
  4. SpringMVC解决静态资源不能访问
  5. iOS应用横竖屏切换
  6. 高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...
  7. 用python进行多页数据爬取_Python Scrapy如何实现多页数据爬取?
  8. php实现多条件查找分页,Yii2.0框架实现带分页的多条件搜索功能示例
  9. mac笔记本怎么外接显示屏_win to go的安装与Macbook pro外接eGPU开启
  10. python3单例-python3如何运行文件夹python单例模式