摘自

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 

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

Docker(五)如何构建Dockerfile的更多相关文章

  1. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

  2. docker学习笔记:简单构建Dockerfile【Docker for Windows】

    参考与入门推荐:https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html#autoid-0-0-9 最近学习docker,写一个简单构建Doc ...

  3. Docker镜像的构建(五)

    目录 构建镜像 1.使用 commit 命令构建 1.1 运行一个要进行修改的容器 1.2 安装 Apache 软件包 1.3 提交定制容器 2.使用 Dockerfile 构建 2.1 我们的第一个 ...

  4. Docker(五):Dockerfile

    我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键,Dockerfile 可以非常容易的定义镜像内容,同时在我们后期的微服务实践中,Docke ...

  5. docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群

    题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...

  6. Docker学习重点(7)~DockerFile

    一.DockerFile DockerFile是用来构建docker镜像的文件,可以理解为命令参数脚本! 1.构建步骤: 编写一个dockerfile文件 docker build 构建成为一个镜像 ...

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

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

  8. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  9. [转帖]Docker五种存储驱动原理及应用场景和性能测试对比

    Docker五种存储驱动原理及应用场景和性能测试对比 来源:http://dockone.io/article/1513 作者: 陈爱珍 布道师@七牛云   Docker最开始采用AUFS作为文件系统 ...

随机推荐

  1. Spring cloud config 使用gitHub或者gitee连接

    1. 创建SpringCloud项目,引入对应的Spring-config-server对应的jar <dependency> <groupId>org.springframe ...

  2. http请求415错误Unsupported Media Type

    王子乔 每一个认真生活的人,都值得被认真对待 http请求415错误Unsupported Media Type 之前用了封装的ajax,因为请求出了点问题,我试了下jQuery的$.ajax,报出了 ...

  3. Day3--Python--字符串,for循环,迭代

    常见的基本数据类型: 1.int 整数 主要用来进行数学运算 2.bool 布尔. 判断真假. if 和 while循环中常用 3.str 字符串,一般放小量数据 4.list 列表.可以存放大量的数 ...

  4. dubbox知识

    关于dubbox有以下小知识要注意: 1.传参数不能传List参数以及NULL,可以传""和0 2.不能传int类型 3.配置provider的时候,注意不要启动重连机制 < ...

  5. Luogu P3254 圆桌问题

    题目链接 \(Click\) \(Here\) 水题.记得记一下边的流量有没有跑完. #include <bits/stdc++.h> using namespace std; const ...

  6. redis的使用场景和基本数据类型

    一:redis使用的场景 redis是一个高性能的NoSQL数据库,特点是高性能,持久存储,适应高并发的应用场景. 下面看看它的使用场景1.取最新N个数据的操作比如取网站的最新文章,通过下面方式,我们 ...

  7. (转载) python3: beautifulsoup的使用

    转载: https://www.cnblogs.com/chimeiwangliang/p/8649003.htmlfrom bs4 import BeautifulSoup import reque ...

  8. python自动化开发-[第七天]-面向对象

    今日概要: 1.继承 2.封装 3.多态与多态性 4.反射 5.绑定方法和非绑定方法 一.新式类和经典类的区别 大前提: 1.只有在python2中才分新式类和经典类,python3中统一都是新式类 ...

  9. docker安装优化

    1.优化 #关闭防火墙 [root@docker03 ~]# systemctl stop firewalld.service [root@docker03 ~]# systemctl disable ...

  10. @jsonProperty 实现返回自定义属性名字

    实现场景: 比如说前端需要返回userPic 这个字段,但是我们数据库定义的是pic字段. 可以用@jsonProperty 来实现 public class User{ @JsonProperty( ...