文章目录

    • @[toc]
  • 使用
  • 常用标签
    • FROM
    • RUN
    • CMD
    • ENTRYPOINT
    • VOLUME
      • 注意

使用

docker build -t 镜像名称[:镜像标签] -f Dockerfile所在目录 .例如 docker build -t myapp .    那么将会根据当前路径里的Dockerfile构建一个名为myapp的镜像;

注意,-f才是指定dockerfile路径,后面的点是镜像构建上下文


常用标签

FROM

FROM:定制的镜像都是基于 FROM 的镜像

RUN

run在docker build时执行,cmd在docker run时执行

RUN有两种形式:

  • RUN (如同执行shell命令 - /bin/sh -c)
  • RUN [“executable”, “param1”, “param2”] (exec形式)

exec形式被解析为JSON数组,这意味着必须使用双引号(“),而不是单引号(’)


CMD

指定启动容器后,提供默认命令及参数,会被docker run 后面参数替换
dockerfile中可以有多条cmd命令,但只是最后一条有效

格式:

  • CMD <shell 命令> (shell form)
  • CMD ["<可执行文件或命令>","","",…] (exec form)
  • CMD ["","",…] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。
第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,但这样docker会在指定的命令前加 /bin/sh -c 执行,可能会出问题;

exec形式被解析为JSON数组,这意味着必须使用双引号(“),而不是单引号(’)

例如使用第2种格式

Dockerfile
FROM centos
CMD ["echo", "this is a echo test" , "this is a echo test"]构建
docker build -t mycentos .运行
docker run mycentos输出
this is a echo test this is a echo test

ENTRYPOINT

在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准。
在Dockerfile中,ENTRYPOINT指令或CMD指令,至少必有其一。

Entrypoint指令用于设定容器启动时第一个运行的命令及其参数。
执行docker run如果带有其他命令参数,不会覆盖ENTRYPOINT指令,并且会被作为ENTRYPOINT指令的参数。

ENTRYPOINT ["executable", "param1", "param2"]   // 这是 exec 模式的写法,注意需要使用双引号。
ENTRYPOINT command param1 param2                   // 这是 shell 模式的写法。

CMD作为ENTRYPOINT的参数

FROM ubuntu
...
ENTRYPOINT ["echo"]
CMD ["defaultvalue"]构建
docker build -t mycentos .运行
docker run mycentos输出
defaultvalue

同理,docker run mycentos aaa会输出aaa,因为aaa会覆盖Dockerfile里的CMD命令


例子

FROM frolvlad/alpine-oraclejdk8
VOLUME /tmp
COPY ./xxx.jar app.jar
RUN sh -c "touch /app.jar"
EXPOSE 8088ENTRYPOINT ["java", "-jar", "app.jar"]

VOLUME

通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。

注意

  1. 通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。

  2. 通过docker run没有指定-v命令(或者docker compose 中没有指定volume命令) docker会创建一个匿名的volume,与主机/var/lib/docker/容器id/_data目录对应。

    • 例如,DockerFile中指定VOLUME /tmp,而docker run中没有指定-v命令,那么docker将自动把容器/tmp目录挂载到宿主机/var/lib/docker/容器id/_data目录下
  3. docker run -v命令如果同时指定了宿主机目录和容器目录,那么Dockerfile volume命令或被覆盖

  4. 容器数据持久化,删除容器,映射的主机目录数据不会变

dockerfile入门相关推荐

  1. DockerFile 入门到精通

    文章目录 一.DockerFile快速入门 1. DockerFile 解析 2. DockerFile编写规范 3. DockerFile指令 二.构建自己centos镜像 2.1. 制作Docke ...

  2. Dockerfile 入门看这篇就够了

    在使用docker时,有很多像往容器中复制war包.修改容器配置之类的操作,很繁琐,配置失败或异常时就又是一遍重复的操作,这时候,就要用到这个脚本文件–Dockerfile 以下是我对Dockerfi ...

  3. Docker Review - dockerfile 入门篇

    文章目录 Docker 镜像.容器 .Docker file 概述 Docker File文件格式 Docker File 解读 1.FROM 指定基础镜像 2.RUN 执行命令 3.COPY 复制文 ...

  4. DockerFile入门指南

    第一发布地址:http://hphblog.cn/2019/04/07/DockerFile/ 简介 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 1:每 ...

  5. Docker : Docker使用DockerFile入门案例

    1.美图 2.DockerFile如下 (base) lcc@lcc negix$ pwd /Users/lcc/soft/docker/negix (base) lcc@lcc negix$ cat ...

  6. Dockerfile入门教程

    文章目录 1.Dockerfile介绍 2.Dockerfile的规则 2.1 格式 2.2 执行顺序 2.3 其他 3. 指令 3.1 FROM 3.2 MAINTAINER 3.3 USER 3. ...

  7. Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像

    文章目录 Pre Docker 官方镜像 Dockerfile dockerfile制作tomcat镜像 准备软件 编写Dockerfile文件 dockerfile构建镜像 启动镜像 测试访问tom ...

  8. Linux中Docker入门知识

    Docker基础 1 Docker概述 我们开发的代码会接触到不同环境:开发环境.测试环境以及生产环境: 1.1 Docker概述 Docker 是一个开源的应用容器引擎 Docker 可以让开发者打 ...

  9. Linux中Docker入门知识基础

    Linux中Docker入门知识docker基础 1 Docker概述 我们开发的代码会接触到不同环境:开发环境.测试环境以及生产环境: 1.1 Docker概述 Docker 是一个开源的应用容器引 ...

  10. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

最新文章

  1. 顺序表-元素逆置(首尾交换)
  2. CTC损失函数 Transformer用的
  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单
  4. VTK:字形2D用法实战
  5. 作业调度方案(codevs 1156)
  6. FastDFS集群部署
  7. saxparser_使用SaxParser和完整代码进行XML解析
  8. [python]删除列表中相同的元素
  9. mysql 主从备份 主服务器配置_同一服务器配置Mysql主从备份
  10. 画米老鼠_蔡康永都在买的画你也买得起,村上隆作品收藏大全
  11. Markdown编辑公式
  12. python的线程组怎么写_Python高级——多任务编程之线程
  13. hdoj_1711_Number Sequence
  14. WF的性能特征(一)
  15. 一道容易栽坑的有趣的面试题(关于js,定时器,闭包等)
  16. 第01课 OpenGL窗口(1)
  17. 解决键盘老是不消失实现delegate委托实例化过程
  18. task文件服务器无法反弹,手把手带你玩转NAS 篇二十一:小米Redmi AC2100路由器刷机padavan保姆级教程...
  19. NTP服务器的相关配置
  20. 敏捷转型中的敏态与稳态

热门文章

  1. java canvas画矩形,HTML5 编程之Canvas
  2. hive中groupby优化_工作中总结的关于hive的优化方案
  3. Java一套拳法刷掉n个遍历树的问题
  4. windows会不会被linux取代,深度Linux系统会取代Windows系统吗?
  5. mysql 密码过期解决图例_MYSQL 密码过期解决办法
  6. 基于 Spark推荐 系统应用 现 状
  7. 使用大量数据提高算法性能的前提条件
  8. 智慧城轨信息技术架构及信息安全规范_会员信息 | 中国铁设:在深圳,我们打造智慧地铁的“最强大脑”...
  9. python图像边缘检测报告_python计算机视觉2:图像边缘检测
  10. Chapter 1 : MySQL体系结构和搜索引擎