liujijiang

Dockerfile

2020.05.23

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 中看到