版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
版权所有,未经许可,禁止转载
章节
本章我们将介绍Dockerfile的一些常用指令,更多指令可参考官方文档。
指令的基本语法
Dockerfile中,指令的基本语法如下:
# Comment
INSTRUCTION arguments
INSTRUCTION
指令本身可以是大写或小写,但通常为了与参数区别,指令习惯用大写。
示例
#This is a demo Image
FROM ubuntu
MAINTAINER [email protected]
RUN apt-get update
RUN apt-get install -y nginx
CMD ["echo", "Image created"]
FROM
FROM
指令用指定基础镜像。如果本地没有基础镜像,将从Docker Hub下载。
示例
FROM docker.io/centos:latest
FROM docker.io/centos:6
- 如果tag(类似版本)
6
没有指定,将会用最新的镜像,即lastest
。 FROM
指令在Dockerfile中是必须的,其他指令是可选的,可根据需要添加。
MAINTAINER
MAINTAINER
指明此镜像的维护者。
示例
FROM docker.io/centos:latest
FROM docker.io/centos:6
LABEL
LABEL
指令配置镜像的元数据信息。一个LABEL
指令配置一个键值对。
示例
LABEL "Application_Environment"="Development"
LABEL "Application_Support"="LearnITGuide.net Group"
COPY
COPY指令向镜像添加目录、文件等。
该指令有2种格式:
示例
COPY src dest
COPY /root/testfile /data/
COPY [“src”,“dest”]
COPY ["/root/testfile","/data/"]
RUN
RUN指令为当前镜像执行命令。
示例
RUN yum update
RUN systemctl start httpd
或者
RUN ["yum","update"]
RUN ["systemctl","start","httpd"]
CMD
CMD指令设置容器运行时的默认命令。例如:nginx容器运行时,需要默认启动nginx服务器,可以CMD指令设置。
Dockerfile中只允许有一个CMD指令,如果有多个,只有最后一个会生效。如果运行容器时,指定了其他命令,CMD会被覆盖,例如:docker run -it nginx /bin/bash
,指定了/bin/bash
,会运行此命令,覆盖了CMD中指定的命令。
示例
CMD ping google.com
CMD python myapplication.py
或者
CMD ["ping","google.com"]
CMD ["python","myapplication.py"]
WORKDIR
WORKDIR指令为Dockerfile中的任何RUN、CMD和COPY指令设置工作目录。如果工作目录不存在,默认情况下将创建它。可以在Dockerfile中多次使用WORKDIR。
示例
WORKDIR /app/
WORKDIR /java_dst/
ENV
ENV指令设置容器中的环境变量。例如: app_version = 2.0,如下所示
示例
ENV APP_DIR /data/
ENV app_version 2.0
EXPOSE
EXPOSE指令公开容器的端口,但仅用于容器间通信。
示例
EXPOSE 80 443
EXPOSE 80/tcp 8080/udp
如果想将容器端口与主机端口绑定,让外部可以访问,应该使用
docker run
的-p
参数,如下所示:docker run -p <HOST_PORT>:<CONTAINER_PORT> IMAGE