管理货柜的码头工人-- Docker (二)

Dockerfile 是什么?

简单来说,它是一个描述 Docker Image 如何建立的过程,描述的方法有点类似像安装说明文件一样。下面是一个 Dockerfile 范例:

在撰写 Dockerfile 的时候,关键字通常会用全大写,如上面的例子是 FROM MAINTAINER RUN 三个。后面接的就是执行的内容,每个 Dockerfile 都一定会有一个 FROM ,它代表 Image 要从哪开始做起。 MAINTAINER 是标示 Dockerfile 维护者。 RUN 是执行 shell 指令,上面有两个 RUN ,第一个是用 apt 安装 zip extension ,第二个是安装 PHP Composer 。

看完这个 Dockerfile 应该可以猜得出来,它描述了如何建置有 Composer 的 Docker Image 。实际建置的指令如下:

这样就建好了一个有 Composer 的 Docker Image 了,来试 run 看看:

补充说明: --rm 指的是每次执行完指令,容器就删除; Image 名称后面接的是指令,所以也可以接 composer 或 ls 等等。

如何从头写一个 Dockerfile

写 Dockerfile 并不难,做起来就很像是给一台空的机器,再安装需要的软体和设定,最后就会成为一个符合需求的 Docker Image 。

比方说我们想要一个可以执行 Gulp 的 Image ,首先应该会想到的是,我们需要 Node 。因此第一步要上 Docker Hub 找有没有 Node , Node 这么热门当然官方有提供 Image 。因此我们决定好版本后,就可以开始写第一行了:

写好一行之后,这时要开始发挥 CI 精神了!要先验证嘛!因此先 build 再执行看看,有没有 node 我们可以执行 node -v 试试:

有看到版本了!再来 Gulp 可以用 package.json 安装,也可以用 -g 全域安装,那我们要的是一个可以全域执行 Gulp 的 Image ,所以使用全域安装好了:

这次应该就可以用 gulp -v 了!

接着我们就可以用这样的方法来执行 Gulp 的任务了:

今天学习了怎么使用 Docker 建置属于自己的环境,这样就可以把家里许多服务都容器化,但接着该如何管理它们呢?