Dockerfile介绍与指令解析

2023-05-16

一.Dockerfile介绍

镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。我们之前的例子都是使用来自docker hub的镜像,直接使用这些镜像只能满足一定的需求,当镜像无法满足我们的需求时,就得自定制这些镜像。

镜像的定制就是定制每一层所添加的配置、文件。如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本,用脚本来构建、定制镜像,这个脚本就是dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令 构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

二.Dockerfile指令解析

1. FROM参数(指定基础镜像)

FROM scratch # 制作base image基础镜像,尽量使用官方的image作为base image

FROM centos # 以centos为基础镜像,进行二次构建镜像

FROM ubuntu:14.04 # 带有tag的base image

2. LABEL参数(标签, 定义作者信息)

LABEL version=“1.0” # 容器元信息,帮助信息,Metadata,类似于代码注释

LABEL maintainer=”zero@163.com" # 标签表示作者信息

3. RUN参数(是一个万能指令,执行命令)

#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!

RUN yum update && yum install -y vim \

    Python-dev # 反斜线换行

RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”

4. WORKDIR参数(相当于linux的cd命令)

WORKDIR /root # 相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd

WORKDIR /test # 如果没有就自动创建

WORKDIR demo # 再进入demo文件夹

RUN pwd     # 打印结果应该是/test/demo

5. ADD参数(把宿主机的一个文件,添加到容器空间内)

ADD /opt/django/manage.py /opt/  # 把宿主机的/opt/django/manage.py放到容器空间内的/opt/目录下

ADD /opt/python3.6.tar.gz /opt/  # ADD的解压文件作用,将宿主机的/opt/下的python3.6.tar.gz解压到容器内的/opt/目录下

ADD and COPY

ADD hello /  #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录

ADD test.tar.gz /  #添加到根目录并解压

 

WORKDIR /root

ADD hello test/  # 进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径

COPY hello test/  # 等同于上述ADD效果

6. COPY参数(拷贝指令)

# 将宿主机的文件, 拷贝到容器内,但是没有解压缩的命令,尽量使用COPY,不要使用ADD

COPY filename /opt/

ADD与COPY

   - 优先使用COPY命令

    -ADD除了COPY功能还有解压功能

添加远程文件/目录使用curl或wget

7. ENV参数(docker的环境参数指令)

ENV # 环境变量,尽可能使用ENV增加可维护性

ENV MYSQL_VERSION 5.6 # 设置一个mysql常量,这个${MYSQL_VERSION}类似于全局常量

RUN yum install -y mysql-server=“${MYSQL_VERSION}”  # 如果版本号有变更,则只需要改这个常量就可以了

8.VOLUME and EXPOSE

存储和网络

RUN and CMD and ENTRYPOINT

RUN:执行命令并创建新的Image Layer

CMD:设置容器启动后默认执行的命令和参数

ENTRYPOINT:设置容器启动时运行的命令

 

Shell格式和Exec格式

RUN yum install -y vim

CMD echo ”hello docker”

ENTRYPOINT echo “hello docker

9.Exec格式

RUN [“apt-get”,”install”,”-y”,”vim”]

CMD [“/bin/echo”,”hello docker”]

ENTRYPOINT [“/bin/echo”,”hello docker”]

通过shell格式去运行命令,会读取$name指令,而exec格式是仅仅的执行一个命令,而不是shell指令

cat Dockerfile

    FROM centos

    ENV name Docker

    ENTRYPOINT [“/bin/echo”,”hello $name”]#这个仅仅是执行echo命令,读取不了shell变量

    ENTRYPOINT  [“/bin/bash”,”-c”,”echo hello $name"]

10.CMD

容器启动时默认执行的命令

如果docker run指定了其他命令(docker run -it [image] /bin/bash ),CMD命令被忽略

如果定义多个CMD,只有最后一个执行

11.ENTRYPOINT

让容器以应用程序或服务形式运行

不会被忽略,一定会执行

最佳实践:写一个shell脚本作为entrypoint

COPY docker-entrypoint.sh /usr/local/bin

ENTRYPOINT [“docker-entrypoint.sh]

EXPOSE 27017

CMD [“mongod”]

[root@master home]# more DockerfileFROm centos

ENV name Docker#CMD ["/bin/bash","-c","echo hello $name"]

ENTRYPOINT ["/bin/bash","-c","echo hello $name”]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile介绍与指令解析 的相关文章

随机推荐

  • 特定标志检测算法流程-棋盘格

    ROS标定工具是采用棋盘格 xff0c 具体实现是OPENCV 将输入图像降采样到大约VGA分辨率 xff0c 并在全尺寸图像中检测校准目标角点 结合这些明显正交的职责作为一个优化 棋盘式检测在大图像上太昂贵 xff0c 所以最好在较小的显
  • 无人驾驶——激光雷达篇

    激光雷达技术简介 无人驾驶技术是多项技术的集成 xff0c 包括传感器 定位与深度学习 高精地图 路径规划 障碍物检测与规避 机械控制 系统集成与优化 能耗与散热管理等 无人车系统的感知端由不同的传感器组成 xff0c 其中包括GPS xf
  • simulink搭建简单的陷波滤波器

    simulink搭建简单的陷波滤波器 陷波滤波器的设计模型的搭建通过matlab自带软件设计的滤波器与simulink自带滤波器模块对比 陷波滤波器的设计 具体设计方法可参见这篇 xff1a 算法学习笔记之50HZ陷波滤波器设计 下面给出各
  • docker——常用指令

    docker pull url 从url拉取容器 docker run d url 后台运行镜像 xff0c 如果不存在该镜像 xff0c 则会自动下载 docker exec it 容器id bash 进入镜像容器 xff0c 容器的id
  • Realsense、kinect在ROS环境下的骨骼识别(基于NuiTrack)

    ps 出售我购买的nuitrack liecense xff0c 支持月付 在弄不明白ROS Kinectic之后的openNI之后终于还是向Nuitrack骨骼识别屈服了 xff1a 那么先看看NuiTrack是啥 xff1a https
  • 深度图像帧差法处理以及CV16UC1深度图像的存储方式

    最近为了拾取桌面上的任务目标 xff0c 采用了实时图像与背景图像相减的方法来进行 xff0c 因为采用彩色图像相减会有影子的干扰 xff0c 所以采用了深度图像 但是深度图像的Mat是CV16UC1格式的 矩阵内部数据采用uint 16格
  • Couldn't find executable named joy_node below /opt/ros/kinetic/share/joy解决方法

    最近想用joy node这个节点 xff0c 然后就通过 sudo apt get install ros kinetic joy 去安装 xff0c 然后运行rosrun joy joy node时候一直错误显示Segmentation
  • ros修改map_server地图发布的map关联的坐标系frame_id(多机器人联合建图用)

    帮师弟做多机器人联合建图的时候 遇到了map的坐标系问题如下 map server发布的 map话题包含了frame坐标系关联 想要正确的让多个机器人共同建图导航需要修改 map话题以及其绑定的frame坐标系 防止机器人之间的相互冲突 下
  • ROS传输图像带宽不够用的解决方法(realsenseD415压缩图像)

    最近在做图像的深度学习识别 xff0c 但是移动机器人上的电脑配置不够 xff0c 只能用我的电脑远程的去处理图像 xff0c 但是遇到了严重的带宽瓶颈 xff0c 按照我的电脑150Mbps的无线网卡来算 xff0c 每秒的极限传输速度就
  • dockerfile配置运行

  • 气压计高度融合—卡尔曼滤波

    实验平台 xff1a 自制飞控板 xff0c STM32F407主控 xff0c 传感器 xff1a MPU6050 MS5611 正文 xff1a 前几天看了这篇文章 xff0c 做了气压计的高度融合 http www zxiazai c
  • GD32F303移植FreeRTOS

    GD32F303移植FreeRTOS 一 移植环境 系统 xff1a WIN7 MDK xff1a keil v5 26 开发板 xff1a GD32F303C EVAL 固件库 xff1a V1 0 2 FreeRTOS版本 xff1a
  • FreeRTOS静态创建任务

    一 静态方式创建任务和删除任务 1 gt 测试环境 系统 xff1a WIN7 MDK xff1a keil v5 26 开发板 xff1a GD32F303C EVAL 固件库 xff1a V1 0 2 FreeRTOS版本 xff1a
  • python实现smote处理正负样本失衡问题

    机器学习中难免遇到正负样本不平衡问题 xff0c 处理办法通常有梁总 xff0c 一 xff1a 过采样 xff0c 增加正样本数据 xff1b 二 xff1a 欠采样 xff0c 减少负样本数据 xff0c 缺点是会丢失一些重要信息 sm
  • echarts 饼图hover效果,饼图中间显示自定义信息

    option 61 tooltip show true trigger 39 item 39 position 39 35 39 39 32 39 backgroundColor 39 implements 39 textStyle col
  • MATLAB在线工具

    在线Matlab工具 xff0c 不用安装matlab了 xff0c 里面的语法几乎和matlab相同 matlab网页版 xff1a 1 octave online http octave online net 2 matlab onli
  • Apache IoTDB下载与安装

    1 中文官方文档 xff1a https iotdb apache org zh 2 下载地址 xff1a https iotdb apache org zh Download 发行版本踩了个小坑 xff1a 1 0 0版本启动时如果作为单
  • 【游戏开发】游戏开发书籍汇总

    1 游戏设计的艺术 2 游戏设计的100个原理 3 我在美国学游戏设计 4 游戏新手村 xff1a 从零开始做游戏 5 Directx游戏开发终极指南 6 Windows游戏编程大师技巧 7 快乐之道 xff1a 游戏设计的黄金法则 人类的
  • 【获奖公布】“我的2016”主题征文活动

    还记得2015的年末 xff0c 2016的新年伊始 xff0c 你给自己定下的目标 xff0c 对自己许下的诺言么 xff1f 时光荏苒 xff0c 一年又在指缝间溜走了 xff0c 离2016的结束还剩十多天 xff0c 在接下来的这十
  • Dockerfile介绍与指令解析

    一 Dockerfile介绍 镜像是容器的基础 xff0c 每次执行docker run的时候都会指定哪个镜像作为容器运行的基础 我们之前的例子都是使用来自docker hub的镜像 xff0c 直接使用这些镜像只能满足一定的需求 xff0