dockerfile 常用指令

FROM

指定在哪个基础镜像上创建镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。

语法:

FROM <image>  或者 FROM <image>:<tag>  或者 FROM <image>:<digest> 
<tag>和<digest> 是可选项,默认值为latest
example:FROM centos 以centos为基础镜像

RUN

 功能为运行指定的命令

语法:

1. RUN <command>  2. RUN ["executable", "param1", "param2"]

第一种后边直接跟shell命令

  • 在linux操作系统上默认 /bin/sh -c
  • 在windows操作系统上默认 cmd /S /C

第二种是类似于函数调用。

可将executable理解成为可执行文件,后面就是两个参数。

每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。

CMD

功能为容器启动时要运行的命令

语法

1. CMD ["executable","param1","param2"] 2. CMD ["param1","param2"] 3. CMD command param1 param2

第三种比较好理解了,就时shell这种执行方式和写法

第一种和第二种其实都是可执行文件加上参数的形式

CMD和RUN的区别:CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关。

EXPOSE

设置容器对外暴露的端口,在docker run时需要使用-p参数才生效

ADD

 一个复制命令,把本地的文件,目录或远程文件URL复制到镜像中

语法:

1. ADD <src>... <dest> 2. ADD ["<src>",... "<dest>"]

COPY

ADD的用法类似

语法:

1. COPY <src>... <dest> 2. COPY ["<src>",... "<dest>"]

与ADD的区别COPY的<src>只能是本地文件

ENV

功能为设置环境变量

语法:

1. ENV <key> <value> 2. ENV <key>=<value> ...

第一种是一次设置一个,第二种是一次设置多个

VOLUME

可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种

语法:

VOLUME ["/data"]

一般的使用场景为需要持久化存储数据时

ENTRYPOINT

语法:ENTRYPOINT command param1 param2
功能和CMD一样,但是配置容器启动后执行的命令,ENTRYPOINT命令并且不可被 docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run --entrypoint选项。

example:ENTRYPOINT "/usr/sbin/nginx -c /etc/nginx/nginx.conf"

USER
指定容器运行时的的用户名和UID

WORKDIR

为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。 
 例如:WORKDIR /a
 WORKDIR b
 WORKDIR c
 RUN pwd最终路径是/a/b/c。

HEALTHCHECK

 容器健康状况检查命令

语法:

1. HEALTHCHECK [OPTIONS] CMD command 2. HEALTHCHECK NONE

第一个的功能是在容器内部运行一个命令来检查容器的健康状况

第二个的功能是在基础镜像中取消健康检查命令

[OPTIONS]的选项支持以下三中选项:   

--interval=DURATION 两次检查默认的时间间隔为30秒
    --timeout=DURATION 健康检查命令运行超时时长,默认30秒
    --retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3

返回值如下:0: success - 表示容器是健康的  1: unhealthy - 表示容器已经不能工作了  2: reserved - 保留值

 

创建一个Nginx的镜像

 Dockerfile 示例:


############################################################
# Dockerfile to build Nginx Installed Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
1.FROM ubuntu
# File Author / Maintainer
2.MAINTAINER Maintaner Name
安装Nginx
# Install Nginx
# Add application repository URL to the default sources
3.RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
# Update the repository
4.RUN apt-get update
# Install necessary tools
5.RUN apt-get install -y nano wget dialog net-tools
# Download and Install Nginx
6.RUN apt-get install -y nginx

Bootstrapping
安装Nginx后,我们需要配置Nginx并且替换掉默认的配置文件
# Remove the default Nginx configuration file
7.RUN rm -v /etc/nginx/nginx.conf
# Copy a configuration file from the current directory
8.ADD nginx.conf /etc/nginx/
# Append "daemon off;" to the beginning of the configuration
9.RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# Expose ports
10.EXPOSE 80
# Set the default command to execute
# when creating a new container
11.CMD service nginx start
保存 dockfile。

使用Dockerfile自动构建Nginx容器
因为我们命令Docker用当前目录的Nginx的配置文件替换默认的配置文件,我们要保证这个新的配置文件存在。在Dockerfile存在的目录下,创建nginx.conf