Dockerfile制作镜像

dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本文件执行,就能制作出镜像了

一句话什么是dockerfile

Dockerfile : automate the steps of creating a Docker image

dockerfile脚本指令

  1. FROM base-image 指定基础镜像,作为构建新镜像的底层
  2. MAINTAINER zhangjiaqi77777@outlook.com 指定镜像的构建者
  3. RUN 命令 后面的命令就像类似shell脚本的命令一样。每一个RUN就是一层镜像。
  4. CMD 指令 用于指定启动容器默认的主进程命令。因为容器其实就是进程,它不像虚拟机那样启动后不运行任何东西也能静默运行。容器需要有一个主进程一直持续,然后就会退出。可以想象,容器就是一个包着一个主进程在那里跑,主进程就是容器的灵魂,灵魂没了,容器也会消失。注意命令:如果是shell 格式 sh -c "执行行命令" 那么这是通过shell作为主程序运行,当shell执行完子进程,shell就执行完成,主进程也就退出,那么容器也就退出了。所以我们尽量使用直接二进制文件执行的方式,不用shell -c 执行。而是CMD ["", "", ""] 将命令空格拆分到列表中。这样只要主进程一致运行,那么容器也就不会退出。
  5. ENTRYPOINT 后面跟上 ["", "", ""] 命令 An ENTRYPOINT allows you to configure a container that will run as an executable 这样容器在启动时,如docker run ,容器像是一个可执行程序一样,执行ENTRYPOINT 指定的可执行程序,并将CMD 主进程的命令列表,作为参数传递给ENTRYPOINT。 有什么作用,可以作为启动容器主进程前的预处理程序。如检查设置相关。。。(dockerfile只能有一个)
  6. COPY 指令 从外界(URL)复制文件到容器的文件系统中
  7. ADD 指令 类似COPY,除了URL外还支持一个归档文件,并在copy到目的路径后解包。
  8. ENV 设置容器中的环境变量
  9. ARG 定义build时的上下文变量,这里的变量定义可以设置默认值,如果在docker build --build-arg 传入了对应名字的变量时,这个变量值将使用传入的值。类似于python脚本的通过argv接受参数功能。ARG定义的变量取值方式和EVN一样,前面加$,关于ARG与ENV名称冲突,已ENV优先。
  10. LABEL 设置一些元信息,LABEL设定的在镜像间时可继承的。
  11. WORKDIR /home/test 指定工作路径,像RUN,CMD, ENTRYPOINT, COPY, ADD 的工作目录。可以多个WORKDIR 指定,来切换路径,并且可以相对路径。
  12. VOLUME指令 由于容器运行时产生的数据需要持久化,那么就需要给容器创建挂载点,挂载点就是VOLUME指令指定的,这样就容器就可以将宿主机或者其它容器的卷挂在到这个点上。
  13. ONBUILD 是在作为基础镜像时,在下游使用本镜像时,出发这个操作在下游build上下文环境中。
  14. USER 为运行之命令进程的用户或用户组。
  15. EXPOSE 和VOLUME类似,如果容器要提供网络服务,那么传输层的端口可以通过EXPOSE先指定。但是不一定马上就要使用。

小结

  1. 区分CMD ENTRYPOINT的功能
  2. 理解VOLUME EXPOSE 这两个对外接口
  3. ARG 与 ENV 冲突的话,优先级
  4. USER 指定进程用户用户组相关
  5. RUN 是基础镜像中执行的命令

Docker 0x05: Dockerfile制作镜像的更多相关文章

  1. Docker build Dockerfile 构建镜像 - 二

    Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...

  2. 通过dockerfile制作镜像

    Dockerfile是一个用于构建Docker镜像的文本文件,其中包含了创建Docker镜像的全部指令.就是将我们安装环境的每个步骤使用指令的形式存放在一个文件中,最后生成一个需要的环境. Docke ...

  3. Docker之dockerfile制作jdk镜像

    目的: Dockerfile简介 Dockerfile制作jdk镜像 Dockerfile简介 了解dockerfile之前要先了解Docker基本概念和使用可参考:https://www.cnblo ...

  4. Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像

    一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作 ...

  5. Docker部署运行springboot项目,并使用Dockerfile制作镜像

    前言: 本来是要搭建一个自动化部署分布式项目的服务器平台的,使用jenkins+k8s+ELK+springboot把一个简单的springboot项目给搞起来,由于工程太大,先分开把每个技术组件单独 ...

  6. docker(9)Dockerfile制作镜像

    前言 如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本 Dockerfile编写 ...

  7. docker-使用Dockerfile制作镜像

    最近项目中有使用docker,组内做了关于docker的培训,然后自己跟着研究了一下,大概了解如何使用.我是基于tomcat镜像制作(不需要安装jdk,配置环境变量),基于centos镜像制作需要安装 ...

  8. WIN7安装Docker Toolbox、制作镜像并发到阿里云

    一.安装Docker Toolbox,并配置国内源加速 WIndows7不支持Hyper-v,所以只能采用Docker Toolbox的方式使用Docker.传送门:http://mirrors.al ...

  9. Docker之Alpine制作镜像且上传至阿里云

    目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...

随机推荐

  1. WebForm 打开默认页

    原文:https://www.cnblogs.com/lionden/p/3728716.html <configuration> <system.webServer> < ...

  2. Linux系统中python默认版本为python2.7,修改为python3 项目上传码云

    # 查询系统本系统中安装的python版本 ls -l /usr/bin/python* 1.在虚拟机上新建虚拟环境 # 系统中python默认版本为python2.,可以将其修改为python3 # ...

  3. Linux下进程间通信方式——共享内存

    1.什么是共享内存? 共享内存就是允许两个或多个进程共享一定的存储区.就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时候,其它进程都会察 ...

  4. jupyterlab数据处理

    目录 jupyterlab: jupyterlab简介: jupyterlab特点: jupyterlab安装,启动 使用jupyterlab: 设置jupyterlab jupyterlab: ju ...

  5. [技术博客]微信小程序审核的注意事项及企业版小程序的申请流程

    关于小程序审核及企业版小程序申请的一些问题 微信小程序是一个非常方便的平台.由于微信小程序可以通过微信直接进入,不需要下载,且可使用微信账号直接登录,因此具有巨大的流量优势.但是,也正是因为微信流量巨 ...

  6. 【RS】Wide & Deep Learning for Recommender Systems - 广泛和深度学习的推荐系统

    [论文标题]Wide & Deep Learning for Recommender Systems (DLRS'16) [论文作者] Heng-Tze Cheng, Levent Koc, ...

  7. ubuntu更改源为aliyun的源;ROS改为新加坡源

    在修改source.list前,最好先备份一份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old 执行命令打开source.list文件 ...

  8. [转帖]IBM Q3财报:云营收达到50亿美元 上升11%

    IBM Q3财报:云营收达到50亿美元 上升11% http://www.eetop.cn/cpu_soc/6946136.html 2019年Q3 IBM的营收 从千亿到 缩减到了 八百亿刀 卖掉了 ...

  9. 最细的eclipse 安装maven踩过的坑

    Eclipse安装maven插件踩过的坑 在线安装maven eclipse安装maven插件,在网上有各种各样的方法,博主使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能 ...

  10. 50道Java线程面试题分析及答案

    下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程 ...