Dockerfile 是一个由一堆命令+参数构成的脚本,使用 docker build 即可执行脚本构建镜像,自动的去做一些事,主要用于进行持续集成。
Dockerfile 的格式统统为:
# Comment
INSTRUCTION arguments
必须以 FROM BASE_IMAGE 开头指定基础镜像。
更详细的规范与说明请参考 Dockerfile reference。这里我们以基于上面的 joe/centos:v1 作为基础镜像,然后在根目录创建 a 目录为例。
创建Dockerfile文件名为a. 如下:
FROM joe/centos:v1
RUN mkdir a
然后使用当前目录的Dockerfile创建镜像,不需要指定文件名
命令如下:
docker build -t runoob/ubuntu:v1 .
执行:
> docker build -t newfiledocker:v1 .
Sending build context to Docker daemon 3.584kB
Step 1/2 : FROM joe/centos:v1
---> 68e83119eefa
Step 2/2 : RUN mkdir a
---> Running in 1127aff5fbd3
Removing intermediate container 1127aff5fbd3
---> 25a8a5418af0
Successfully built 25a8a5418af0
Successfully tagged newfiledocker:v1
新建基于 newfiledocker 的容器并在终端中打开,发现里面已经有 a 文件夹了。
> docker docker run -it newfiledocker:v1 /bin/bash
root@e3bd8ca19ffc:/# ls
a bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
其他使用dockfile的方式
指定使用的dockerfile
使用命令
vim -f /soft/docker/Dockerfile
#输入dockerfile的内容,保存退出
docker build -t newfiledocker:v1 -f /soft/docker/Dockerfile
使用url创建 Dockerfile 镜像
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像,命令如下:
docker build github.com/creack/docker-firefox
也就是说 我们找到很多资源里公布的dockerfile就可以直接远程创建。
在 Docker Store 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如 nginx、redis、mongo、mysql、httpd、php、tomcat 等;也有一些方便开发、构建、运行各种语言应用的镜像,如 node、openjdk、python、ruby、golang 等。可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。
如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,如 ubuntu、debian、centos、fedora、alpine 等,这些操作系统的软件库为我们提供了更广阔的扩展空间。
除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
FROM scratch
…
如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。
不以任何系统为基础,直接将可执行文件复制进镜像的做法并不罕见,比如 swarm、coreos/etcd。对于 Linux 下静态编译的程序来说,并不需要有操作系统提供运行时支持,所需的一切库都已经在可执行文件里了,因此直接 FROM scratch 会让镜像体积更加小巧。使用 Go 语言 开发的应用很多会使用这种方式来制作镜像,这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
借助 Dockerfile 的能力,Docker 留下了无限的可能。 |