Dockerfile常用命令

2023-05-16

Dockerfile常用命令

1. Dockerfile

Dockerfile是一个文本文件,用一组指令来完成镜像的构建.每一条指令构建一层镜像.所有尽量将相同的命令合并成一行以减少中间镜像的层数.

2. From

必须

指定基础镜像即我从哪里可以获取到这个镜像,并在它的基础上增加一些功能来实现一个应用,必须是第一个命令

# 公共仓库的镜像
FROM ubuntu:18.04
# 私有harbor仓库镜像
FROM harbor.intra.com/centos:7.9.2009

3. MAINTAINER

作者信息,非必须

MAINTAINER qiuqin 13917099322@139.com
# 4. WORKDIR

把某个目录设置为工作目录,和cd命令类似

通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

WORKDIR /usr/local/nginx/

5. USER

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

USER root:root
# 或者
USER 1000:1000

6. ARG

定义构建使用的环境变量.需要先定义才能在构建时进行参数传递,构建完成后失效.

  1. 需要先定义,如果Dockerfile中使用了ARG但并未给定初始值,而在运行docker build(编译)的时候未指定该ARG变量,则会失败。
  2. 仅在build docker image的过程中(包括CMD和ENTRYPOINT)有效,构建完成后失效
  3. 构建时通过–build-arg参数将变量传给Dockerfile
  4. 虽然其在container启动后不再生效,但是使用‘docker history’可以查看到。所以,敏感数据不建议使用ARG.
FROM centos:7.9.2009
ARG SOFTWARE
# 或者
ARG SOFTWARE=nginx
RUN yum install -y $SOFTWARE
EXPOSE 80
CMD nginx -g "daemon off;"


# docker build --build-arg SOFTWARE=nginx -t nginx:v0.1 .

7. ENV

设置环境变量

  1. ENV定义的环境变量在构建中有用,构建完成后也有用.
  2. 通过ENV定义的环境变量不能被CMD指令使用,也不能被docker run 的命令参数引用
  3. 在docker run 命令中通过 -e标记来传递环境变量
FROM centos:7.9.2009
ENV SOFTWARE=nginx
# 或者
ENV SOFTWARE nginx
RUN yum install -y $SOFTWARE
EXPOSE 80
CMD nginx -g "daemon off;"

8. VOLUME

用于指定持久化目录

一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:

  1. 卷可以容器间共享和重用
  2. 容器并不一定要和其它容器共享卷
  3. 修改卷后 会立即生效
  4. 对卷的修改不会对镜像产生影响
  5. 卷会一直存在,直到没有任何容器在使用它
VOLUME ["/usr/share/nginx/html"]

9. LABEL

给镜像添加标签

  1. 定义LABEL时,一个LABEL可以定义一个或者多个LABEL
  2. 有多个LABEL时尽量保持在一行内定义,避免产生过多的中间镜像
LABEL KEY1=VALUE1 KEY2=VALUE2 KEY3=VALUE3

10. EXPOSE

指定服务暴露端口

EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

EXPOSE 80
或者
EXPOSE 53/tcp 53/udp

11. COPY

将本地文件添加到容器中,不会自动解压文件,也不能访问网络资源

COPY index.html  /usr/share/nginx/html/index.html

12. ADD

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

ADD MYDATE.tar /data
ADD http://192.168.31.24/index.html  /usr/share/nginx/html/index.html

13. RUN

构建镜像时执行的命令

RUN ["ls","-lh","/etc"]
RUN ["ls -lh /etc"]
RUN ls -l /etc

RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定–no-cache参数,如:

docker build --no-cache
  1. 当一个Dockerfile里有多个RUN,那么依次执行
  2. 为了减少中间层,应该将所有的RUN放一行,用&&分割

14. CMD

构建镜像后调用,也就是在容器启动时才进行调用。

CMD ["nginx","-g","daemon off;"]
CMD nginx -g "daemon off;"

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

15. ENTRYPOINT

配置容器,使其可执行化。

ENTRYPOINT ["ls", "/usr/local"]
CMD ["/usr/local/tomcat"]

示例

root@ks-master:~/scratch# cat Dockerfile
FROM alpine:latest
ENTRYPOINT ["ls","-ld","/etc"]
CMD ["/usr/local","/tmp"]
root@ks-master:~/scratch# docker build -t test:v1 .
Sending build context to Docker daemon   7.35MB
Step 1/3 : FROM alpine:latest
 ---> 9ed4aefc74f6
Step 2/3 : ENTRYPOINT ["ls","-ld","/etc"]
 ---> Running in c4a4dc4ba7ac
Removing intermediate container c4a4dc4ba7ac
 ---> 7d915bbec6bc
Step 3/3 : CMD ["/usr/local","/tmp"]
 ---> Running in b13a9f25efd8
Removing intermediate container b13a9f25efd8
 ---> 17e6b8025f37
Successfully built 17e6b8025f37
Successfully tagged test:v1
root@ks-master:~/scratch# docker run -it --name test1 test:v1
drwxr-xr-x    1 root     root            66 May  9 05:06 /etc
drwxrwxrwt    2 root     root             6 Mar 29 14:45 /tmp
drwxr-xr-x    5 root     root            41 Mar 29 14:45 /usr/local

16. ONBUILD

用于设置镜像触发器,当当前的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发

ONBUILD RUN rm -rf /usr/share/nginx/html/*

17. Dockerfile测试

root@ks-master:~/scratch# cat Dockerfile
FROM alpine:latest

WORKDIR /usr/local/nginx
ARG Message="test message"
ENV Path=/usr/local/nginx File=aaa.txt
USER root
RUN echo "$Message" > $Path/$File
ENTRYPOINT ["cat"]
CMD ["/usr/local/nginx/aaa.txt"]

## 不带参数使用默认的ARG值进行填充
# docker build -t test:v1.08 .
# docker run -it --rm --name test2 test:v1.08
test message

## 带参数,使用自定义传入参数进行填充
# docker build --build-arg Message=qiuqin -t test:v1.09 .
# docker run -it --rm --name test2 test:v1.09
qiuqin
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile常用命令 的相关文章

  • 华为私有云平台FusionCompute搭建

    一 FusionCompute架构 架构CNA作为虚拟化操作系统 xff0c VRM作为虚拟化管理平台 正常主机都安装CNA xff0c 单独建立VRM集群作为管理集群 xff0c 我测试环境就一台主机 xff0c 所以CNA和VRM装在同
  • HTML中的表格合并

    HTML中的表格合并 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt lt title gt lt head gt
  • vba 正则表达式

    群友分享的 xff0c 内容解释非常清楚 Sub RegTest Dim oRegExp As Object 39 定义正则表达式对象 Dim oMatches As Object 39 定义匹配字符串集合对象 Dim str As Str
  • 一个可以直接使用的用于python日志记录的类

    一个用于Python3程序的日志记录类 xff0c 使用的时候 xff0c 将该类import进去后 xff0c 按照这里面的最后两行的测试程序使用即可 程序贴在这里 xff0c 省的以后造轮子 Github xff1a https git
  • python 安装 第三方库报错 -— 需要Visual C++ 14.0 compiler 及以上

    python 安装 第三方库报错 xff1a error Microsoft Visual C 43 43 14 0 or greater is required Get it with 34 Microsoft C 43 43 Build
  • 时间序列模型 (一):模型概述

    时间序列的其它博文系列 xff1a 时间序列模型 xff08 一 xff09 xff1a 模型概述 时间序列模型 xff08 二 xff09 xff1a 移动平均法 时间序列模型 xff08 三 xff09 xff1a 指数平滑法 时间序列
  • ubantu18开启audit审计日志

    1 检查系统是否安装audit服务 service auditd status 2 安装命令 sudo apt get install auditd 审计规则 auditctl w etc passwd p rwxa xff08 注意 xf
  • CentOS8 使用yum 安装 jdk8

    原文地址 1 安装方法 CentOS8上使用 yum 直接安装 xff0c 环境变量自动配置好 2 查看是否已安装 看到下面结果 xff0c 说明已经安装配置 jdk 1 2 3 4 root 64 localhost java versi
  • npm 更新不了,一直提示not support Node.js v12.18.4

    使用npm命令一直提示 xff1a npm WARN npm npm does not support Node js v12 18 4 根据网上提供的方法是全局更新npm npm i g npm 运行后仍然一直提示 npm WARN np
  • 特别实用而且功能强大的attributedText属性

    span class hljs preprocessor import span class hljs title 34 ViewController h 34 span span span class hljs preprocessor
  • 基本计算器算法实现

    基本计算器 没有括号基本计算 题目 给你一个字符串表达式 s xff0c 请你实现一个基本计算器来计算并返回它的值 整数除法仅保留整数部分 你可以假设给定的表达式总是有效的 所有中间结果将在 231 231 1 的范围内 注意 xff1a
  • 在windows和ubuntu下安装Syncthing

    Syncthing 一个可以用在不同设备之间 xff0c 同步文件的工具 window下安装 有客户端版本的 xff0c 由社区维护 xff0c 我下下来试了下 xff0c 没有跟到最新版本 xff0c 看其他文章好像有 bug xff0c
  • 自定义手写JDK动态代理

    前言 根据Java Porxy 实现原理实现我们手写的自定义代理类 xff0c 实现简易的动态代理流程 自定义InvocationHandler span class token keyword package span com span
  • PDFBox 优化内存方案

    前言 版本基于2 0 27 最近使用pdfbox 导入发现内存使用占用特别高 xff0c 通过查阅官方资料发现pdfbox 在处理一些复杂的pdf 消耗内存特别高 xff0c 这个是没法避免的 xff0c 内存设置小的很有可能导致内存溢出
  • 使用PageOffice实现文档(word,excel,pdf)在线预览编辑

    最近发现一款不错的插件的PageOffice 地址是 xff1a http www zhuozhengsoft com Technical 他可以实现word excel pdf在线预览以及在线编辑 虽然商用的话需要收费 xff0c 但是有
  • 存储过程实现批量插入数据

    前几天在公司做一业务模块测试的时候 xff0c 将测试都删除了 xff0c 导致客户端想拿测试数据拿不到了 xff0c 一下没时间一条一条的录数据 xff0c 所以只有采取存储过程实现模拟数据插入 数据需求 xff1a 有两个字段类型是De
  • 如何排查 tomcat 启动失败一闪而过原因

    1 问题描述 xff1a tomcat这个一闪而过 应该是老生常谈的问题了 xff0c 今天主要是以我出现的问题 xff0c 提供一个解决方案 因为一闪而过原因有多种 2 前面的基本配置就不再这里一一阐述了 直接记录我怎么找到自己的一闪而过
  • Java 实现表格导出到Excel(.xlsx)

    最近项目中需要将table 中数据导出到excel xff0c 当时我想的两种方案 xff0c 一种是通过前端插件TableExport js 发现简单使用的话 xff0c 只是可以导出table 中原生的数据 一旦table 有jstl
  • git 常用命令以及提交步骤

    git常使用的命令 1 git init 在当前目录新建一个代码库 2 git config user name 61 git config user email 61 设置代码提交时候的信息 3 git clone 需要clone 远程地
  • Java日志门面技术 SLF4J

    文章目录 背景SLF4J概述切换日志框架实际应用配合自身简单日志实现 slf4j simple 配置logback日志实现配置Log4J日志实现 需适配器 配置JUL日志实现 需适配器 添加slf4j nop依赖 日志开关 桥接旧的日志实现

随机推荐

  • 阿里云服务器(Ubuntu18.04版本)中安装coturn穿透服务器

    阿里云服务器 xff08 Ubuntu18 04版本 xff09 中安装coturn穿透服务器 一 安装依赖库二 下载源码并编译安装三 coturn启动命令四 阿里云端口配置五 安装 配置完成后测试 一 安装依赖库 sudo apt spa
  • 阿里云服务器(Ubuntu18.04版本)中安装Kurento流媒体服务器

    阿里云服务器 xff08 Ubuntu18 04版本 xff09 中安装Kurento流媒体服务器 一 安装coturn穿透服务器二 kurento Media Server KMS 卸载 安装 配置 一 安装coturn穿透服务器 具体如
  • Java抽象类及其实现

    任务描述 定义一个形状 xff08 sharpe xff09 的抽象类 xff0c 具有求面积的抽象方法 再分别定义sharpe类的实现类 xff1a 三角形 xff08 triangel xff09 编程要求 定义一个描述形状 xff08
  • 基于kurento-one2many二次开发实现多房间直播+共享桌面+切换摄像头+聊天互动

    基于kurento one2many二次开发实现多房间直播 43 共享桌面 43 切换摄像头 43 聊天互动 一 安装coturn穿透服务器二 安装kurento Media Server KMS 流媒体服务器三 开源项目访问地址四 压力测
  • MySQL基础学习笔记

    MySQL学习文档 一 MySQL基础知识 1 1 mysql各个版本的重要性介绍 MySQL Community Server 社区版本 xff0c 开源免费 xff0c 但不提供官方技术支持 MySQL Enterprise Editi
  • Java常见面试问题总结

    Java常见面试问题总结 说明 xff1a 本人是二线城市工作4 5年的菜鸟程序员 xff0c 以下面试问题更侧重于当地的初中级 高开 要是以北上广深的面试标准问则还远远不够 xff0c 就比如在一线城市JDK List Map Set x
  • RabbitMQ学习教程

    RabbitMQ学习教程 MQ考察重点 xff1a span class token number 1 span 了解过哪些MQ xff1f 不同MQ之间有什么区别 xff1f span class token number 2 span
  • ArchLinux安装配置及美化

    官方wiki xff1a https wiki archlinux org 基础安装 一 xff1a 制作安装介质 下载ISO镜像文件 xff1a https archlinux org download 官方下载网址 在linux系统中可
  • K8s kubectl 报错 c-bash: _get_comp_words_by_ref: command not found解决过程

    K8s kubectl error xff1a c bash get comp words by ref command not found 故障现象 xff1a 新搭了个测试环境 xff0c 准备cka的考试 source lt kube
  • OpenSSH权限提升漏洞(CVE-2021-41617)修复 Centos 7升级Openssh 8.8

    OpenSSH权限提升漏洞 xff08 CVE 2021 41617 xff09 修复 1 准备工作2 安装必须的包3 下载OpenSsh 8 8p14 OpenSsh 解压安装5 配置文件修改6 重启服务7 意外 Centos 7升级Op
  • Jenkins 构建报错:Couldn‘t find any revision to build. Verify the repository and branch configuration for

    Jenkins 构建报错 Couldn 39 t find any revision to build Verify the repository and branch configuration for 1 错误信息 2 错误原因3 解决
  • 利用阿里云下载国外镜像,国内顺畅下载k8s.gcr.io的镜像

    国内顺畅下载k8s gcr io的镜像 1 起因 配置kube dns是3个k8s gcr io的镜像无法下载 报错如下 Error response from daemon Get https k8s gcr io v2 net http
  • pip 使用阿里源

    pip 使用阿里源 使用pip install 的时候默认会去国外服务器下载 所以经常断开或者速度很慢 只需要在原来的命令后加上 i https mirrors aliyun com pypi simple即可直接从阿里源上安装 pip s
  • sun.misc包找不到

    转 http blog csdn net jbxiaozi article details 7351768 1 右键项目 属性 java bulid path jre System Library access rules resoluti
  • npm安装vue报错:npm ERR! code ETIMEDOUT

    npm安装vue报错 信息如下 C span class token punctuation span Users span class token punctuation span Q span class token operator
  • 将element-plus分页组件由默认英文,改为中文

    1 现象 分页组件默认显示为英文 但实际页面中大多都是中文 弄个英文显得比较突兀 2 配置 在main js中添加以下两句语句 span class token function import span locale from span c
  • [Gitops--2]Argocd和Gitlab-runner安装配置

    ArgoCd Argo是一组k8s原生工具集 用于运行和管理k8s上的作业和应用程序 Argo提供了一种在k8s上创建工作和应用的三种计算模式 服务模式 工作流模式和基于事件模式 所有的Argo工具都实现为了创建控制器和自定义资源 为什么选
  • Windows update 0x8024401c 0x80244019

    Windows 更新失败 报错 0x8024401c 0x80244019 以系统管理员身份运行 net stop wuauserv reg delete f HKEY LOCAL MACHINE span class token punc
  • K8s常见面试题20问

    K8s常见面试题19问 收集了一些K8s常见问题和同学们面试常被问到的问题 如果有新的面试题私聊或者留言给我 1 Docker和虚拟机有那些不同 虚拟化环境下每个 VM 是一台完整的计算机 xff0c 在虚拟化硬件之上运行所有组件 xff0
  • Dockerfile常用命令

    Dockerfile常用命令 1 Dockerfile Dockerfile是一个文本文件 用一组指令来完成镜像的构建 每一条指令构建一层镜像 所有尽量将相同的命令合并成一行以减少中间镜像的层数 2 From 必须 指定基础镜像即我从哪里可