在本章节中将和大家讲解:Dockerfile的第二部分:
Dockerfile
FROM 指令
主要作用是指定一个镜像作为构建自定义镜像的基础镜像,在这个基础镜像之上进行修改定制。
这个指令是 Dockerfile 中的必备指令,同时也必须是第一条指令。
在 Docker Store 上有很多高质量的官方镜像,可以直接作为我们的基础镜像。
作为服务类的,如 Nginx Mongo 等
用于开发的, 如 Python golang
操作系统类, 如 Centos ubuntu
除了一些现有的镜像,Docker 还有一个特殊的镜像 scratch
这个镜像是虚拟的,表示空白镜像
FORM scratch
这以为着这将不以任何镜像为基础镜像。
可以把可执行的二进制文件复制到镜像中直接执行,容器本身就是和宿主机共享 Linux内核的。
使用 Go 语言开发的应用很多会使用这种方式来制作镜像,这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
插个小消息,也方便想学习的同学,在文章下方留言即可试听课程外加领取千锋HTML5、UI交互设计、PHP、Java+云数据、大数据开发、VR/AR/Unity游戏开发、Python人工智能、Linux云计算、全栈软件测试、网络安全等全部的视频学习教程。
制作自己的 Hello world
在任意一台 Linux 机器上,安装 gcc
查看有没有安装
[root@localhost hello_qf]# rpm -qa gcc glibc-static
glibc-static-2.17-222.el7.x86_64
gcc-4.8.5-11.el7.x86_64
没有的话,进行安装即可
[root@localhost hello_qf]# yum install gcc glibc-static
编辑 C 源代码文件
[root@localhost docker]# cat hello.c
#include <stdio.h>
int main()
{
printf(“Hello, Yangge! \n”);
return 0;
}
将源代码文件编译为可执行的二进制文件
[root@localhost hello_qf]# gcc --static hello.c -o hello
编译好后,测试一下
[root@localhost hello_qf]# ls
hello hello.c
hello 是我们编译好的二进制文件
hello.c 是 C 的源码文件
[root@localhost hello_qf]# ./hello
Hello Yangge # 输出结果,说明编译成功
编辑
编辑 Dockerfile
在有 hello 二进制的文件目录下,编译 Dockerfile 文件,内容如下:
[root@localhost hello_qf]# ls
Dockerfile hello hello.c
[root@localhost hello_qf]# cat Dockerfile
FROM scratch
ADD hello /
CMD ["/hello"]
ADD 是把当前目录下的 hello 文档拷贝到 容器中的根目录下
CMD 执行根目录下的 hello 文件
构建新的镜像