dockerfile指令不区分大小写,但是约定指令为大写
FROM
所有dockerfile必须以FROM命令开始,指定当前镜像是基于哪个镜像建立的,可以重复
例如
FROM ubuntu
RUN
执行后面的shell或者exec命令,可以重复,如果是RUN多个命令,可以使用&&连接命令
例如
RUN yum install wget && wget 。。。
COPY
复制文件到容器的指定目录中
例如
COPY dir /mydir/
ADD
功能和COPY类似,但是如果加入的源文件是gzip,xz,bzip2格式的压缩文件时会自动解压到容器目录下,如果无法解压就无法复制压缩文件
CMD
类似于RUN,CMD是在容器run时执行,RUN是在build生成image时执行,只能有一个,如果有多个则最后一个生效
例如
CMD
CMD {"命令或者可执行文件", "参数", "参数"]
ENTRYPOINT(入口点)
docker run 时添加的参数会被加到ENTRYPOINT后面当做命令的参数,ENTRYPOINT如果有多个则只有最后一个生效,配合CMD一起使用,ENTRYPOINT放命令和固定参数,CMD放可变参数,如果run的时候有参数,则执行ENTRYPOINT和传入的参数,如果没有参数,则执行ENTRYPOINT和CMD
例如
FROM nginx
ENTRYPOINT ["nginx", "-c"]
CMD ["/my.conf"]
然后docker build -t test .
如果 docker run test 那么容器启动后会执行 nginx -c /my.conf
如果 docker run test -c /new.conf 那么容器启动后会执行 nginx -c /new.conf
ENV(environment)
定义环境变量,k-v的形式,然后就可以使用 $k 引用拿到value
例如
ENV DIR /User/joker
RUN cd $DIR
VOLUME
定义产生的数据保存位置,可以在docker run 的时候 -v 修改位置
EXPOSE
声明端口
WORKDIR
指定工作目录,文件夹必须提前创建好,
USER
指定可以执行后面命令的用户或者用户组
发布自己image
docker hub 中注册用户
服务器上
修改自己要发布的image标签,用户名/image
docker tag liuxiansen66/imageName
发布
docker push liuxiansen66/imageName
成功后可以docker hub 自己的 profile 中看到