从空白镜像创建Docker hello world

写在前面

尝试搞了下docker,网上的教程大多是让下载一个ubuntu这种完整镜像,寥寥几篇从空白镜像开始创建的,也要去下载一个文件系统;我的天,就一个hello world,不至于吧
本篇会以三种方法,从空白镜像创建一个迷你的docker hello world镜像

基础知识

# 使用当前目录作为根目录构建镜像
docker build -t myimage .
# 查看镜像列表
docker images
# 导出镜像
docker save myimage > myimage.tar
# 加载镜像
docker load < myimage
# 启动镜像
docker run -it myimage

Dockerfile中的指令

FROM:指定基础镜像
COPY:将文件或目录复制到镜像中
CMD:容器创建时的默认命令

注意:docker构建的时候会以当前目录为根目录,也就是说,比如我在/home/arco/docker目录下创建镜像,想从/bin目录下拷贝个文件到镜像中,是拷不了的,要先把这个文件拷贝到/home/arco/docker/bin目录下

方法一:使用echo工具

linux系统中最简单的打印命令就是echo了,直接弄个echo过来输出一下多方便呢?
那就搞个如下的Dockerfile试试

FROM scratch
COPY /bin/echo /bin/echo
WORKDIR /
CMD ["/bin/echo", "hello docker"]

看似没啥问题,实则运行不了,报错如下:
在这里插入图片描述
原因:echo是个链接了动态库的可执行文件,只拷个echo能执行才怪了
执行ldd命令查看echo依赖的库:
在这里插入图片描述
嗯,依赖c库和链接器,那就把它们都拷过来,在当前目录下新建lib64目录,如下所示:
在这里插入图片描述

修改Dockerfile如下:

FROM scratch
COPY /bin/echo /bin/echo
COPY /lib64/libc.so.6 /lib64/libc.so.6
COPY /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
WORKDIR /
CMD ["/bin/echo", "hello docker"]

创建-执行:
在这里插入图片描述
导出镜像查看,大小3.4兆
在这里插入图片描述

方法二,使用c语言程序

这次不用echo,自己写程序打印
c源代码如下:

#include<stdio.h>
int main()
{
    printf("hello docker!\n");
    return 0;
}

ldd查看编译出的可执行文件:
在这里插入图片描述
嗯,和echo的依赖一样,那么目录结构就是:
在这里插入图片描述
Dockerfile内容如下:

FROM scratch
COPY /a.out /a.out
COPY /lib64/libc.so.6 /lib64/libc.so.6
COPY /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
WORKDIR /
CMD ["/a.out"]

创建-执行:
在这里插入图片描述
导出镜像查看,大小也是3.4兆(比echo那个小了几十kb
在这里插入图片描述

方法三,使用汇编语言

x86平台AT&T入门汇编请参考:AT&T hello world 有对下面汇编代码的解释

汇编源码如下:

.data
	strr:   .string  "hello docker~\n"
	len = .-strr
.text
	.global _start
_start:
	movq    $1,    %rax    # syscall number of write
	movq    $1,    %rdi    # param1: stdout
	movq    $strr, %rsi    # param2: str address
	movq    $len,  %rdx    # param3: out length
	syscall

	movq    $60,   %rax    # syscall number of exit
	syscall

汇编代码写的hello world并不依赖c库,直接通过write系统调用输出hello world
Dockerfile内容如下(hello是汇编代码编译出的可执行文件)

FROM scratch
COPY /hello /hello
WORKDIR /
CMD ["/hello"]

创建-执行:
在这里插入图片描述
导出镜像查看,大小仅有12kb
在这里插入图片描述

小结

以上方法任选其一即可

  • 55
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值