摘自

https://mp.weixin.qq.com/s/_hq9dPe6390htN8BTkoQeQ

一、Dockerfile的指令集

由于Dockerfile中所有的命令都是以下格式:INSTRUCTION argument,指令(INSTRUCTION)不分大小写,但是约定俗成是大写的。

1、FROM

FROM是用于制定基础的images,一般格式为FROM<images> or FROM<IMAGE>:<TAG> ,所以有的Dockerfile都用该以FROM开头,FROM命令指明Dockerfile所创建的镜像文件以什么镜像为基础,FROM以后的所有指令都会在FROM的基础上进行创建镜像。可以在同一个Dockerfile中多次使用FROM命令用于创建多个镜像。比如我们需要指定python2.7的基础镜像,可以像如下写法一样:

FROM python:2.7

2、MAINTAINER

MAINTAINER是用于指定镜像创建者和联系方式,一般格式为MAINTAINER<name>。这里我设置我的ID和邮箱

MAINTAINER AAA <AAA@ffff.com>

3、COPY

COPY是用于复制本地主机的<src>(为Dockerfile所在目录的相对路径)到容器中的<dest>。当使用本地目录为源目录时,推荐使用copy。一般格式为copy <src><dest>。例如我们要拷贝当前目录到容器中的/app目录下,我们可以这样操作

COPY . /app

4、WORKDIR

WORKDIR用于配合RUN,CMD,ENTRYPOINT命令设置当前工作路径。可以设置多次,如果是相对路径。一般格式为 WORKDIR/path/to/word/dir。

WORKDIR /app

5、RUN

RUN pip install -r requirements.txt

6、EXPOSE

EXPOSE命令用来指定对外开放的端口。一般格式为EXPOSE<PORT>,例如上面那个例子,开放5000端口:

EXPOSE 5000

7、ENTRYPOINT

ENTRYPOINT可以让你的容器表现得像一个可执行程序一样。一个Dockerfile中只能有一个ENTRYPOINT,如果有多个,则最后一个生效。格式有两种

  • ENTRYPOINT["executable", "param1", "param2"]:推荐使用的exec形式
  • ENTRYPOINT command param1 param2: shell形式

例如下面这个,我们要将python变成那个可执行的程序,我们可以这样取做:

ENTRYPOINT ["python"]

8、CMD

CMD命令用于启动容器时默认的执行命令,CMD命令可以包含可执行文件,也可以不包含可执行文件。不包含可执行文件的情况下就要用ENTRYPOINT指定一个,然后CMD命令参数就会作为ENTRYPOINT的参数。

CMD命令有三种格式:

  • CMD["executable", "param1", "param2"]: 推荐使用的exec形式
  • CMD["param1", "param2"]: 无可执行程序形式
  • CMD command param1 param2: shell形式

一个Dockerfile中只能有一个CMD,如果有多个,则最后一个生效。而CMD的shell形式默认调用 /bin/sh -c执行命令。CMD命令会被Docker命令行传入的参数覆盖: docker run busybox /bin/ echo Hello Docker会把CMD里的命令覆盖。

例如我们要启动 /app,我们可以用如下命令实现:

CMD ["app.py"]

二、构建Dockerfile

我们大体已经把Dockerfile的写法讲述完毕,我们可以自己动手写一个例子:

FROM nginx
MAINTAINER AAAA <AAAA@FFFF.com>
RUN echo 'Hello World' > /usr/share/nginx/html/index.html

转载于:https://www.cnblogs.com/ylxn/p/10510492.html

Docker(五)如何构建Dockerfile相关推荐

  1. Docker最全总结,DockerFile,Docker编排容器,Docker镜像,Docker-compose构建

    文章目录 Docker 简介 为什么使用docker: Docker引擎: Docker系统镜像: Docker容器: Docker仓库: ubuntu安装docker: ubuntu脚本自动安装: ...

  2. Docker 的数据管理(Dockerfile的概述和构建)

    文章目录 1 Docker 的数据管理 1.1 数据卷 1.2 数据卷容器 2 端口映射(2:31) 3 容器互联(使用 centos 镜像) 4 Docker 镜像的创建 4.1 基于现有镜像创建 ...

  3. docker镜像的构建及Dockerfile的详解应用,镜像加速器,镜像优化

    docker镜像的构建及dockerfile的祥解应用 1.镜像的构建 1.1创建一个Dockerfile 1.2构建镜像 1.3查看镜像的分层结构 1.4镜像的缓存特性 2.Dockerfile详解 ...

  4. 这就是你日日夜夜想要的docker!!!---------Dockerfile构建nginx、Tomcat、MySQL镜像

    文章目录 构建nginxDockerfile镜像 构建DockerfileTomcat 构建Dockerfile MySQL镜像 构建nginxDockerfile镜像 这里的nginx软件包使用ng ...

  5. Docker 多阶级构建:Docker 下如何实现镜像多阶级构建?

    通过前面课程的学习,我们知道 Docker 镜像是分层的,并且每一层镜像都会额外占用存储空间,一个 Docker 镜像层数越多,这个镜像占用的存储空间则会越多.镜像构建最重要的一个原则就是要保持镜像体 ...

  6. Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像

    文章目录 Docker的安装 Docker的使用:docker run命令 查看本地存在的镜像:docker images命令 编写Dockerfile,制作容器镜像 docker build制作镜像 ...

  7. docker 多阶段构建

    多阶段构建 之前的做法 在 Docker 17.05 版本之前,我们构建 Docker 镜像时,通常会采用两种方式: 全部放入一个 Dockerfile 一种方式是将所有的构建过程编包含在一个 Doc ...

  8. 『中级篇』Docker Cloud自动构建 Docker image(55)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』Docker Cloud自动构建 Docker image(55) 一步一步的接近下面这个图,来通过时间的方式git ...

  9. Docker多步构建更小的Java镜像

    译者按: 最新版Docker将支持多步构建(Multi-stage build),这样使用单个Dockerfile就可以定义多个中间镜像用于构建,测试以及发布等多个步骤,并且有效减小最终镜像的大小. ...

最新文章

  1. php正则表达式判断url,判断url的正则表达式
  2. esp8266 防掉线方法_esp8266 smartconfig-智能配网分析和使用及注意事项
  3. mysql创建多实例,mysql 单服务器创建多实例
  4. C语言实现合并两个链表 含注释
  5. Java往前拼接,利用Java程序将字符串进行排序与拼接
  6. BZOJ5215[Lydsy2017省队十连测] 商店购物
  7. geotools将shp数据存入postgres
  8. 使用Roberts算子进行图像分割(Matlab自编程实现)
  9. VirtualBox基础使用教程
  10. 企业OA办公系统选型技巧实用指南
  11. 无法获得下列许可solidworks standard无效的(不一致的)使用许可号码(-8,544,0) solidworks2020 (亲测有效)
  12. ABAP 去重 delete adjacent duplicates
  13. cnn app for android phones,Freedom Apk Download for Android Phones / Tablets Latest Version
  14. 最近在读的一些文章-2019.04
  15. IntelliJ idea (最新版)激活方法
  16. C#实现万年历(农历、节气、节日、星座、属相、生肖、闰年等)
  17. ByteCTF2021安全范儿高校挑战赛线上Misc-《HearingNotBelieving》
  18. 如何在桌面或者开始菜单中创建快捷方式
  19. R 熵权法计算权重及综合得分
  20. 42岁女博士相亲,要求对方年薪三百万,主要为淘汰一类档次低男人

热门文章

  1. spring--(25)声明式事务
  2. [0] Tornado Todo 开篇
  3. Github管理Eclipse分布式项目
  4. getpass函数简单使用
  5. 眼睛看特定角度有闪光的处理办法
  6. Errors were encountered while processing 解决方法
  7. mysql8碰到 ERROR 1064 (42000)
  8. 国内人工玻璃体和日本人工玻璃体的区别
  9. intellij行数输出限制
  10. bitbucket初次使用