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