写一个C文件

$ vim helloworld.c
#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello world\n");
    return 0;
}

编译

# 编译的时候,使用 -static 静态编译,静态链接就是把需要的东西都整合一起了
# 如果是动态编译,以后执行的时候还需要去链接库,很可能因为环境没有库无法执行
$ gcc helloworld.c -static -o helloworld

新建 Dockerfile 文件

$ vim Dockerfile
FROM scratch
ADD helloworld /       #  把 helloworld 添加到根目录
CMD ["/helloworld"]

build image(通过build获取镜像)

$ docker build -t hhcycj/hello-world .  # -t 指定tag,.代表当前目录下

查看镜像已经有前面build的了

$ docker images
REPOSITORY             TAG                  IMAGE ID                CREATED                  SIZE
hhcycj/hello-world   latest               9cfbee4de435        About an hour ago    861kB
ubuntu                     14.04               6e4f1fe62ff1          2 months ago           197MB
hello-world               latest              fce289e99eb9         13 months ago         1.84kB

运行image

$ docker run hhcycj/hello-world
hello world

查看这个Image的分层(layer)

因为from scratch,相当于我们是从空镜像开始,不算1层,所以一共只有2层

$ docker history 9cfbee4de435
IMAGE                    CREATED                 CREATED BY                               SIZE                COMMENT
9cfbee4de435        About an hour ago   /bin/sh -c #(nop)  CMD ["/helloworld"]             0B
4869730cc4d1        About an hour ago   /bin/sh -c #(nop) ADD file:199029a8fa9d3e019…    861kB