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常用命令 的相关文章

  • printf 在Linux终端上输出彩色字体 (串口也适用)

    有时我们希望在LINUX终端上按照调试级别打印不同颜色的调试信息 xff0c 如 include lt stdio h gt define DBG PRINT format arg do fprintf stdout 34 ld d fla
  • vSLAM重读(4): OKVIS--KeyFrame-based Visual-Inertial SLAM

    1 摘要 视觉传感器与IMU传感器互补 61 61 gt VIO系统 xff1b 由最初的以滤波为主题 xff0c 现在逐渐转换为非线性优化来实现SLAM xff1b 提出一种方法将视觉信息与IMU测量数据紧密结合 xff0c 将IMU的误
  • vSLAM重读(5): vSLAM中对双目相机的数据处理及与单目相对比

    1 双目相机概述 双目立体视觉模型 双目模型求取深度 双目立体相机分别校准可参考 ROS 单目相机 分别校准 双目立体匹配算法案例 https www cnblogs com riddick p 8486223 html https www
  • ROS回顾学习(11): TF之static_transform_publisher

    主要用于静态坐标转换 两种发布形式 1 俯仰角 43 位置坐标 span class token comment static transform publisher x y z yaw pitch roll frame id child
  • 菜鸟专学:从头到尾创建自己的SLAM系统

    RobotSlamApplication项目二 xff1a 小型SLAM系统 研究背景 xff1a 因为之前比较浮躁 xff0c 总是喜欢研究别人的库然后测试跑通 xff0c 效果好就拿来修修改改 然后测试测试就用 xff0c 效果不好就抛
  • 伽马分布与 贝塔分布

    伽马函数 称 为伽马函数 xff0c 其中参数 xff0c 伽马函数具有如下性质 xff1a n为自然数 xff1b 或写作 余元公式 xff1a 对于 有 与贝塔函数 的关系 对于 伽马函数是严格凹函数 x足够大时 xff0c 可以用St
  • Hanoi汉诺塔步骤实现图示说明(C程序设计,例7.8)

    一 题目 古代有一个梵塔 塔内有3个座A B C 开始时A座上有64个盘子 盘子大小不等 大的在下 小的在上 如下图所示 有个老和尚想把这64个盘子从A座移到C座 但规定每一次只允许移动一个盘 且在移动过程中在3个座上都始终保持大盘在下 小
  • PX4飞行模式整理

  • docker打包、部署、添加用户组

    docker的打包与部署 参考文章 xff1a link 1 xff0c 查看当前正常运行的容器 docker ps docker ps a 显示所有容器 xff0c 包括未运行容器 2 xff0c 将正在运行的容器打包成镜像 docker
  • 树莓派VNC连接失败,认证界面无法输入用户名

    文章目录 问题背景思考 xff1a 解决方法 xff1a 第一步 xff1a 使用命令新建桌面 xff1a 第二步 xff1a vnc客户端连接时 xff0c 并且指定桌面号连接成功 xff01 优化方案 xff1a 参考引用 问题背景 由
  • vue按钮获取元素

    下面展示一些 内联代码片 64 click 61 34 search event 34 search e 获取所有元素 console log e 获取文字 console log e currentTarget innerText
  • ORBSLAM2在Ubuntu20.04&ROS noetic下配置与测试

    在解决问题过程中看了很多大佬的文章 总结一下资源及bug及bug可能有效的解决方案 有些忘了 1 bug 最常见的应该是编译器版本不同和库文件版本不同导致的语法差异 1 1 Eigen版本问题 CMakelist 44行改为find pac
  • 虚拟机开机黑屏(硬盘空间不足)

    1 现象 开机后正常运转 xff0c 出现 11 548785 piix4 smbus 0000 00 07 3 SHBus Host Controller not enabled i12 241671 sd 32 0 0 0 sda As
  • slam报错大讲堂

    1 g2o链接文件找不到 error while loading shared libraries libg2o csparse extension so cannot open shared object file No such fil
  • initramfs错误导致无法进入系统

    说是不正常关机 导致的错误 总之就是开不了机了 并且弹出对话框 不知道输入啥 查网上说要 strong span style color 4da8ee fsck t ext4 dev sda1 span strong 但是没有卵用 其实到这
  • ubuntu下vscode 突然打不开

    https stackoverflow com questions 51027327 ubuntu 18 04 var lib snapd has other write 40777 报错如下 xff1a var lib snapd has
  • 普罗米修斯踩坑解法大合集

    主流1 仿真环境下报错 Not arming geofence RTL requiers valid home xff1b 以及Compass Sensors inconsistent等 去年买的跑个仿真还有地理围栏和校准传感器 xff0c
  • python集合问题大合集

    1 python 多维列表初始化 Python的列表相比于c 43 43 xff0c 很坑爹的一点是如果访问未赋值列表单元的位置 xff0c 是不能直接访问的 xff08 而c 43 43 有默认值为0 xff09 xff0c 例如 xff
  • 零基础入门无人机--无人机姿态--2

    四旋翼在其四个轴臂上四个桨的高速转动作用下 xff0c 会受到四个桨的拉力 xff0c 拉力方向与机身垂直 xff0c 当四个桨产生的拉力总和大于机身重力时 xff0c 飞机处于上升状态 xff1b 当总拉力小于机身重力时 xff0c 飞机
  • 使用harbor搭建docker私有仓库

    1 安装私有仓库 参照 xff1a https blog csdn net qq 35959573 article details 80664353 xff1b https www jianshu com p 32f077a3960e xf

随机推荐

  • python奇im巧技大合集

    1 嵌套函数下层函数修改上层函数变量值 问题 xff1a 在嵌套函数 xff0c 即def fun1 def fun2 类型的函数中 xff0c 如果函数fun2想要修改fun1中的变量 xff0c 就不能用global 来声明变量了 xf
  • linux系统下编译错误大合集

    1 pcl库相关报错 error divscalar is not a member of pcl traits error plus is not a member of pcl traits 后面一定还有一长串报错 xff09 解法 x
  • VSCode使用git-【界面化处理】

    此教程从创建一个git项目开始处理 xff0c 内容比较细致 xff0c 可以摘取需要的部分观看 目录 在gitee上创建一个git项目 VSCode同步远程代码仓库 git的提交操作 中途的小问题 回归正题 git的拉取操作 1 两个人在
  • 【ROS】Ubuntu18.04下安装ROS-Melodic的步骤及rosdep update报错的解决方案

    写在前面 xff1a 笔者从大二就开始接触ROS操作系统 xff0c 期间经历过多次ROS的安装与重装 xff0c 每一次都痛苦不堪 每一次的安装都会重复踩很多坑 xff0c 也会踩一些新坑 xff0c 因此借此机会打算把安装ROS Mel
  • 【C++】for循环中带冒号(:)用法简介

    基本用法 正常我们想要输出一个数组的全部元素时 xff0c 需要采用以下的方法 xff1a span class token comment 随机定义的数组 span span class token keyword int span ar
  • 阿里云物联网平台web端,可视化开发,简单实例

    Web可视化 阿里云物联网平台提供了一种可快速开发的web服务 xff0c 只需要拖入一些控件 xff0c 做一些配置就可以完成一个简单的物联网web应用 xff0c 对单一场景 xff0c 需求简单的项目非常实用 首先进入物联网平台 xf
  • 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
  • PX4之启动脚本

    PX4通过rcS脚本来设定需要启动的程序 xff0c 比如设备驱动 控制模块 数据通讯等 rcS脚本在项目中的文件位置 ROMFS px4fmu common rcS 对应硬件平台固件上的位置 etc init d rcS 启动脚本流程如下
  • pip 使用阿里源

    pip 使用阿里源 使用pip install 的时候默认会去国外服务器下载 所以经常断开或者速度很慢 只需要在原来的命令后加上 i https mirrors aliyun com pypi simple即可直接从阿里源上安装 pip s
  • 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
  • Nginx第三方模块nginx_upstream_check_module实现http检测

    1 故障现象 架构如下 当时servera的容器oom了 开始不停重启 造成80端口是活着的 但没法正常提供http服务 原先的配置如下 upstream aaa span class token punctuation span serv
  • 【云原生 | Kubernetes 系列】---Prometheus监控mysql

    1 Prometheus监控mysql 对mysql的版本要求 MySQL gt 61 5 6 MariaDB gt 61 10 3 1 1 测试环境准备 span class token comment apt install maria
  • [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 必须 指定基础镜像即我从哪里可