Docker(五)如何构建Dockerfile

时间:2023-03-09 15:48:57
Docker(五)如何构建Dockerfile

摘自

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