Docker基础之十一: 镜像操作(Dockerfile)

简介: Docker镜像(Dockerfile) https://docs.docker.com/engine/reference/builder/ Docker可以通过Dockerfile的指令来编译Image,Dockerfile的主要好处是可以通过极少的空间来动态构建一个镜像,但是对国内用户而言,

Docker镜像(Dockerfile)

(对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。)

https://docs.docker.com/engine/reference/builder/

Docker可以通过Dockerfile的指令来编译Image,Dockerfile的主要好处是可以通过极少的空间来动态构建一个镜像,但是对国内用户而言,通常是比较通过的,因为下载国外的资源都比较慢。

1 Dockerfile 参考手册

1.1 如何使用

建立了Dockerfile之后,进入到所在目录,然后执行docker build.

通过-f选项,可以指定 Dockerfile:

$ docker build -f /path/to/a/Dockerfile .

通过-t选项可以为镜像添加一个tag:

$ docker build -t shykes/myapp .

build过程中,会一条一条的执行语句,比如:

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 0 : FROM alpine:3.2
 ---> 31f630c65071
Step 1 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 2 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \& wait/' | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

1.2 Dockerfile格式

# Comment
INSTRUCTION arguments

指令是不区分大小写的,不过一般都使用大写来区分指令和参数。Dockerfile的第一句指令,必须是'FROM',这个后面紧跟的是基础镜像名称。#可以用来注释。

1.3 环境变量替换指令

环境变量指令是ENV,这个类似于编程语言的变量,只能在Dockerfile中使用。例如:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux

其中支持变量应用的指令包括:

ADD
COPY
ENV
EXPOSE
LABEL
USER
WORKDIR
VOLUME
STOPSIGNAL
ONBUILD

1.4 dockerignoe file

如果你的编译目录下有一些文件是不需要打包进Image的,你可以使用该文件进行过滤。重要涉及的指令是ADD和COPY。

1.5 FROM

FROM <image>

或者

FROM <image>:<tag>

或者

FROM <image>@<digest>

FROM指令指定了目标Image的基础镜像。tag是某个特定版本的镜像, digest是最新引入的一种ID,类似于唯一标示符。

1.6 MAINTAINER

MAINTAINER <name>

这个字段一目了然,就是设置作者。

1.7 RUN

RUN包含两种格式:

  • RUN (shell格式,这种命令运行在shell中 /bin/sh -c)
  • RUN ["executable", "arg1", "arg2"] (exec格式) RUN指令可以执行任何命令,并在当前image的顶层添加一个文件层,并提交到新的image中。由此我们可以看出,每一个RUN指令都会新加一层文件系统,虽然这个并不占多少空间,不过还是推荐尽可能多的减少指令。因此我们可以使用\来做换行处理。
    RUN /bin/bash -c 'source $HOME/.bashrc ;\
    echo $HOME'
    
    不换行形式:
    RUN /bin/bash -c 'source $HOME/.bashrc ; echo $HOME'
    
    exec模式:
    RUN apt-get dist-upgrade -y
目录
相关文章
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
647 100
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
676 99
|
缓存 Docker 容器
优化Docker镜像大小的五个实用技巧
优化Docker镜像大小的五个实用技巧
1044 98
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1127 6
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
775 16
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
495 8
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
782 76
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
应用服务中间件 Linux Shell
Docker进阶 dockerfile指令构建docker镜像
Docker进阶 Dockerfile指令,编译dockerfile文件构建镜像,dockerfile常用指令,实操训练:Dockerfile构建Nginx镜像: FROM #指定基础镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建的时候需要运行的命令 ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容 WORKDIR #镜像的工作目录 VOLUME #挂载的目录 EXPOST #暴露端口配置
Docker进阶 dockerfile指令构建docker镜像