Dockerfile(上)

如果没有dockerfile文件,那么我们新建一个容器的时,需要讲基础镜像运行起来,然后进入容器中,进行相应的改造,然后在commit这个容器,使用dockerfile,这个过程可以自动的完成。
dockerfile文件需要有一个专门的目录,构建时会读取该目录下的所有文件,所以这个目录下应该放的是我们需要的文件,可以包含子目录,如果有.dockerignore文件,这个文件的内容就是互虐文件夹下的什么文件,可以使用通配符,一半来说Dockerfile,第一个“D”应该大写。

FROM

FROM是必须有的一个指令,并且必须是第一个非注释行,用于指定base镜像,后续的操作都是基于这个base镜像的。可以使用两种,第一种是指定sha256的值,这样镜像就是唯一的,第二种就是指定标签,不过第一种更安全,第二种意思更加明确。

FROM busybox@b534869c81f05ce6fbbdd3a3293e64fd032e059ab4b28a0e0d5b485cf904be4b
FROM busybox:latest
MAINTAINER

在低版本的docker中,一般指定镜像的作者,是一个可选指令。

MAINTAINER "oyd oyd@qq.com"
LABEL

指定镜像的元数据,是一个可选参数,数据都是key-value型的,可以指定多个

LABEL email="oyd@qq.com" time="1214"
COPY

用于从Docker宿主机向镜像中复制文件

  • COPY <src> … <dest>
  • COPY ["<src>",…"<dest>"]
    src:要复制的源文件或者目录,支持通配符,使用相对路径,只能是Dockerfile所在文件夹之内的文件。
    dest:目标路径,也就是文件复制进去后所放的位置,一般都是绝对路径
    注意事项
  • 如果src是目录,那么其中的文件会被递归复制,但是src目录本身不会被复制
  • 如果指定了多个src ,或者src中使用了通配符,但是dest必须是一个目录,必须是以"/"结尾
  • dest如果事先不存在,他会被自动创建,包括多级目录。
COPY index.html /data/web/html/
[root@node7 myfile]# docker build  ./ -t  web:0.1
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM busybox:latest
 ---> b534869c81f0
Step 2/3 : LABEL email="oyd@qq.com" time="1214"
 ---> Running in e35dc9ef85c7
Removing intermediate container e35dc9ef85c7
 ---> 241af9e3bfc5
Step 3/3 : COPY index.html /data/web/html/
 ---> 1cd6a50a96f1
Successfully built 1cd6a50a96f1
Successfully tagged web:0.1
[root@node7 myfile]# docker run --rm web:0.1 cat /data/web/html/index.html
hello busybox
ADD

ADD和copy类似,ADD支持TAR和URL

  • ADD <src>…<dest>
  • ADD ["<src>"…"<dest>"]
    如果src是一个URL而且dest不以“/”结尾,那么指定的文件会被下载下来并且被直接被创建为;如果src以/结尾,那么文件会被下载下来保存到该文件夹下面
    如果src是一个本地的系统上的压缩文件,他就会被当作一个目录解压,通过URL获取的文件不会自动解压。
    如果src有多个,那么dest就必须以/结尾,如果只有一个src,dest不以/结尾,那么dest会被当作文件写入src的内容。
ADD http://nginx.org/download/nginx-1.17.6.tar.gz /usr/local/
[root@node7 myfile]# docker run --rm web:0.2 ls /usr/local/
nginx-1.17.6.tar.gz
ADD nginx-1.17.6.tar.gz /usr/local/
[root@node7 myfile]# docker run --rm web:0.3 ls /usr/local/
nginx-1.17.6
[root@node7 myfile]# docker run --rm web:0.3 ls /usr/local/nginx-1.17.6
CHANGES
CHANGES.ru
LICENSE
README
auto
conf
configure
contrib
html
man
src
WORKDIR

指定从当前指定起到下一个workdir的工作目录

WORKDIR /usr/local/
ADD nginx-1.17.6.tar.gz ./ 
[root@node7 myfile]# docker build  ./ -t  web:0.4
Sending build context to Docker daemon  1.041MB
Step 1/3 : FROM busybox:latest
 ---> b534869c81f0
Step 2/3 : WORKDIR /usr/local/
 ---> Running in c654b1172f9b
Removing intermediate container c654b1172f9b
 ---> 24edc2481b1e
Step 3/3 : ADD nginx-1.17.6.tar.gz ./
 ---> adc12f0b7b6c
Successfully built adc12f0b7b6c
Successfully tagged web:0.4
[root@node7 myfile]# docker run --rm web:0.4 ls /usr/local/nginx-1.17.6
CHANGES
CHANGES.ru
LICENSE
README
auto
conf
configure
contrib
html
man
src
VOLUME

指定一个挂载点,会挂载到宿主机上去。相当于指定了一个V

VOLUME /data/web/html/
        "Mounts": [
            {
                "Type": "volume",
                "Name": "54db7463158fab066064185c005d633281aedaef75ee73e3dd9d0ee7b4675115",
                "Source": "/var/lib/docker/volumes/54db7463158fab066064185c005d633281aedaef75ee73e3dd9d0ee7b4675115/_data",
                "Destination": "/data/web/html",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
EXPOSE

指定容器需要暴漏的端口,RUN的时候需要使用-P才会暴漏出来。

EXPOSE 80/tcp 22/ssh
[root@node7 myfile]# docker run -d --rm  --name web -P web:0.6 sleep 60
21c83393296536b3b2ec811e0af6003b4ba236427a9fe4c61d0ec16d902c2e17
[root@node7 myfile]# docker port web
22/tcp -> 0.0.0.0:32769
80/tcp -> 0.0.0.0:32768
ENV

bulid时可以使用变量,并且支持默认参数

ENV WEB=nginx-1.17.6.tar.gz 
ADD ${WEB:-nginx-1.17.6.tar.gz} ${DEST:-/usr/local/}
[root@node7 myfile]# docker run  --rm web:0.7 ls /usr/local/  ##变量生效
nginx-1.17.6
[root@node7 myfile]# docker run  --rm web:0.7 printenv  ##运行为容器时也在
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=c2e0d0ce13d4
WEB=nginx-1.17.6.tar.gz
HOME=/root
[root@node7 myfile]# docker run -e WEB=nginx-1.17.7.tar.gz --rm web:0.7 printenv  ##会被run的时候覆盖
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e8edb78dc485
WEB=nginx-1.17.7.tar.gz
HOME=/root
RUN

在build过程中执行的一些命令

RUN mkdir -p /data/web/html/ && \
    echo 'hello buxsybox' > data/web/html/index.html
[root@node7 myfile]# docker run  --rm web:0.8 cat /data/web/html/index.html
hello buxsybox
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值