docker(3) 构建dockerfile
文章目录
【注意】最后更新于 December 2, 2019,文中内容可能已过时,请谨慎使用。
上一章我们用的是 docker commit
命令创建的自己的库,虽然简单但是定制性比较差,因此我们采用另一种且更广泛的做法就是 docker build
命令,先上手做个demo
|
|
下面是 Dockerfile
中的代码
|
|
然后在 $HOME/document/www/build_demo
目录下运行
|
|
-t 就是我们新建镜像的标签
接下来我们查看一下本地的镜像列表里出现了什么
|
|
我们刚刚创建的镜像已经出现到本地的列表里面了 输入 docker history c994cb02df6e
查看镜像的构建流程
我们回顾一下整个流程:刚才所有的操作都是在 Dockerfile
这个文件中进行的,我们用到以下命令
. FROM gaofeifiy/ubuntu-last 新建的库采用 gaofeifiy/ubuntu-last 这个镜像构建的(就是上一章我们建的那个,因为写这个的时候电脑没网… 其实应该是 ubuntu:16.04 这类的基础镜像) . MAINTAINER GPF “5173180@qq.com” 指定了该镜像的作者和邮箱 . RUN touch /ReadMe.txt 运行系统命令,创建一个ReadMe.txt 文件 其他的RUN命令欧式同样的道理 . EXPOSE 80 指定镜像对外端口是80
下面介绍一下更多的Dockerfile相关的指令
. ENV 设置镜像中的环境变量 比如 ENV REFRESHED_AT 2017-02-22
设置缓存更新时间
. CMD 和docker run
命令类似,是等容器启动后执行的命令,会被docker run
指令干扰 例CMD ["/bin/bash","-l"]
这里推荐使用数组形式,防止出现-c参数的干扰
. ENTRYPOINT 和CMD命令类似,但是不会被docker run
的命令干扰,而且会把docker run
后的指令当作 ENTRYPOINT
的参数来用 例如:ENTRYPOINT ["/usr/sbin/nginx","-g","demon off"]
这条命令和 ENTRYPOINT ["/usr/sbin/nginx"]
加上 docker run -t -i xxx镜像 -g "demon off"
两条语句产生的作用相同
. USER 指定镜像以什么用户去运行,默认是root 也可以docker run -u
来指定用户
. VOLUME 创建一个容器的共享卷,这样的话多个镜像容器公用一套内容,相当于类中的静态变量
. ADD 将本地文件添加到镜像当中,会解压 仅限在以Dockerfile文件为根目录的目录下
. COPY 将本地文件拷贝到镜像当中,不会解压 仅限在以Dockerfile文件为根目录的目录下
. ONBUILD 当其他镜像使用本镜像的时候触发的命令 例如ONBUILD RUN echo 'hello world'
当别的镜像引用到这个镜像的时候就会执行这条命令
文章作者 GPF
上次更新 2019-12-02 (521dbfe)