Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像
commit
从一个镜像运行容器,修改容器内容,再使用docker commit,构建一个镜像到本地
Dockerfile
使用Dockerfile构建自定义镜像
FROM
指定基础镜像,必须是第一条指令
格式:
FROM <image> FROM <image>:<tag>例如 FROM ubuntu
MAINTAINER
指定镜像创建者和联系方式,选填
格式:
MAINTAINER <name>例如 MAINTAINER Oxye oxye@qq.com
RUN
容器内部执行命令,每个RUN相当于在原有镜像基础上再加一层
RUN命令有两种格式
1. RUN <command> 2. RUN ["executable", "param1", "param2"]第一种后边直接跟shell命令
在linux操作系统上默认 /bin/sh -c
在windows操作系统上默认 cmd /S /C
第二种是类似于函数调用。
可将executable理解成为可执行文件,后面就是两个参数
例如 RUN echo “test” > /opt/temp/app.js
ADD
一个复制命令,把文件复制到镜像中
将src源文件复制到dst目标文件,src是相对被构建的源目录的相对路径, 可以是一个url ,dst是容器中的绝对路径
语法如下:
1. ADD <src>... <dest> 2. ADD ["<src>",... "<dest>"]例如 ADD test.txt /opt/temp
COPY
一个复制命令
语法如下:
1. COPY <src>... <dest> 2. COPY ["<src>",... "<dest>"]与ADD的区别, COPY的只能是本地文件,其他用法一致
ENV
设置环境变量
语法有两种
1. ENV <key> <value> 2. ENV <key>=<value> ...两者的区别就是第一种是一次设置一个,第二种是一次设置多个
例如 ENV WEB_VERSION 1.0.7
EXPOSE
暴漏容器运行时的监听端口给外部
但是EXPOSE并不会使容器访问主机的端口
如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数
EXPOSE <port>例如 EXPOSE 8080 开放8080端口
VOLUME
实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器中,当数据需要持久化时用这个命令
语法为:
VOLUME ["/data"]WORKDIR
设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效, 可以设置多次
语法:
WORKDIR /path/to/workdirARG
设置变量命令
语法:
ARG <name>[=<default value>]CMD
容器启动时要运行的命令,一个Dockerfile只能有一个CMD生效,如果有多个则最后一个生效
语法有三种写法
1. CMD ["executable","param1","param2"] 2. CMD ["param1","param2"] 3. CMD command param1 param2RUN是构件容器时就运行的命令以及提交运行结果
CMD是容器启动时执行的命令,在构件时并不运行
ENTRYPOINT
启动时的默认命令,只能写一条,如果写了多条,那么只有最后一条生效
ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
语法如下:
1. ENTRYPOINT ["executable", "param1", "param2"] 2. ENTRYPOINT command param1 param2例如 ENTRYPOINT [“top”, “-b”]
USER
设置启动容器的用户,可以是用户名或UID,所以,只有下面的两种写法是正确的
如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行
USER daemo USER UIDDocker学习和应用(二)_使用Docker
Flux7 Docker 系列教程(三):使用Dockerfile实现自动化
Dockerfile及命令详解
Docker Dockerfile
Dockerfile实例——(实践操作!)