首页 > 其他分享 >Dockerfile之基础

Dockerfile之基础

时间:2023-08-28 22:13:18浏览次数:46  
标签:WORKDIR RUN gosu 基础 redis VERSION && Dockerfile

使用了很久的docker,之前却从来没有总结过, 于是开此篇来记录平常使用Dockerfile的点滴, 先从基础命令开始哦

 

FROM:

 

ENV: 设置环境变量

格式有两种:
  •  ENV <key> <value>
  •  ENV <key1>=<value1> <key2>=<value2>...
这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 RUN,还是运行时的应用,都可以直接使用这里定义的环境变量。
ENV VERSION=1.0 DEBUG=on \
    NAME="Happy Feet"

这个例子中演示了如何换行,以及对含有空格的值用双引号括起来的办法,这和 Shell 下的行为是一致的。

定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。比如在官方 node 镜像 Dockerfile 中,就有类似这样的代码:

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
  && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
  && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
  && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
  && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
  && ln -s /usr/local/bin/node /usr/local/bin/nodejs

在这里先定义了环境变量 NODE_VERSION,其后的 RUN 这层里,多次使用 $NODE_VERSION 来进行操作定制。可以看到,将来升级镜像构建版本的时候,只需要更新 7.2.0 即可,Dockerfile 构建维护变得更轻松了。

 

 

WORKDIR: 指定工作目录

 

格式为 WORKDIR <工作目录路径>。 使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。
WORKDIR /app

RUN echo "hello" > world.txt

如果你的 WORKDIR 指令使用的相对路径,那么所切换的路径与之前的 WORKDIR 有关:

WORKDIR /a
WORKDIR b
WORKDIR c

RUN pwd

 

 

COPY:

 

RUN:

 

CMD:

 

ENTRYPOINT:

 

USER:  指定当前用户

格式:USER <用户名>[:<用户组>] USER 指令和 WORKDIR 相似,都是改变环境状态并影响以后的层。WORKDIR 是改变工作目录,USER 则是改变之后层的执行 RUN, CMD 以及 ENTRYPOINT 这类命令的身份。 注意,USER 只是帮助你切换到指定用户而已,这个用户必须是事先建立好的,否则无法切换。
RUN groupadd -r redis && useradd -r -g redis redis
USER redis
RUN [ "redis-server" ]

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

# 建立 redis 用户,并使用 gosu 换另一个用户执行命令
RUN groupadd -r redis && useradd -r -g redis redis
# 下载 gosu
RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64" \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true
# 设置 CMD,并以另外的用户执行
CMD [ "exec", "gosu", "redis", "redis-server" ]

 

 

标签:WORKDIR,RUN,gosu,基础,redis,VERSION,&&,Dockerfile
From: https://www.cnblogs.com/xingxia/p/docker_Dockerfile.html

相关文章

  • java基础-运算符--day03
    目录1.算数运算符2.+号3.++4.=赋值操作5.关系运算6.逻辑运算7.三元运算8位运算1.算数运算符/处以%取余publicclassTestOper01{ publicstaticvoidmain(String[]args){ System.out.println(13/5);//结果为2 System.out.println(13%5);//结果为3 ......
  • Python基础
    第1章 Python基础知识一、Python简介1、Python的起源创始人:吉多范罗苏姆,1989年圣诞节前在社交平台发布第一个解释器:1991年使用C语言编写,会自带C语言的异常处理和函数2、python语言的特点(1)简单(2)面向对象(3)开源、免费3、学习的目的Python是基础语法,主要是为了写自动化脚本打基础4、......
  • C笔记---01基础篇
    一、C语言内存分区1、程序代码区:存放CPU执行的机器指令。2、数据区  2.1常量区:字符串、数字等常量存放在常量区,const修饰的全局变量存放在常量区;常量区的内存是只读的,程序结束后由系统释放。  2.2全局区(静态区)又分为两个部分  (a)全局初始化数据区/静态数据区(data......
  • 【C++STL基础入门】vector运算和遍历、排序、乱序算法
    @TOC前言C++标准库提供了丰富的容器和算法,其中vector是最常用的容器之一。它以动态数组的形式存储元素,并提供了许多方便的运算符和算法来操作和处理数据。本文将介绍vector的基本运算、遍历方法、排序算法以及乱序算法。通过学习这些内容,您将能够更加灵活、高效地使用vector容器。......
  • 记一次基础学习Ubuntu的经历
    系统版本查阅plengong@plengong:~$lsb_release-aNoLSBmodulesareavailable.DistributorID:UbuntuDescription:Ubuntu20.04.6LTSRelease:20.04Codename:focal网络配置plengong@plengong:~$vim/etc/netplan/00-installer-config.yaml#Thisis......
  • 基础排序
    选择排序指针表示法voidchoose_sort(int*arr,intn){  for(inti=0;i<n;i++){    intminIndex=i;    for(intj=i+1;j<n;j++){      if(*(arr+j)<*(arr+minIndex)){        minIndex=......
  • 斩获“年度突破成果”奖!天翼云构建强大AI算力基础,制胜人工智能新时代
    8月18-19日,2023中国算力大会在宁夏银川举办。在大会“年度突破成果”发布环节,中国电信天翼云《基于异构多云环境下的息壤算力调度应用实践》荣获2023中国算力大会“算力中国·年度突破成果”奖,天翼云算力分发网络平台“息壤”的智能高效算力调度能力再次获得权威认可。 与大会......
  • Pt.I 从零基础到音乐制作者的自学指南
    1音符1.14/8/16分音符4分音符代表一个节拍的时值,在4/4拍子中,4分音符就是一个拍.如果在速度为60BPM的情况下演奏4分音符,每个4分音符会持续1秒.8分音符是4分音符时值的一半,16分音符是8分音符的一半.1.2连音当两个或多个相同的音符连在一起时,......
  • 哈希表基础题217. 存在重复元素、389. 找不同、496. 下一个更大元素 I
    217. 存在重复元素1classSolution:2defcontainsDuplicate(self,nums:List[int])->bool:3#方法1:set去重,直接比较去重之后数组长度4iflen(set(nums))!=len(nums):5returnTrue6else:7return......
  • 04 以太网交换基础
    在网络中传输数据时需要遵循一些标准,以太网协议定义了数据帧在以太网上的传输标准,了解以太网协议是充分理解数据链路层通信的基础。以太网交换机是实现数据链路层通信的主要设备,了解以太网交换机的工作原理也是十分必要的。设备的工作模式单工模式:信号传递是单方向的,比如传统......