Alpine Linux的什么是Docker社区所钟爱?轻量级容器意味着更多的计算资源。Alpine Linux的确是轻型的,也就是说Alpine Linux是面向安全应用的轻量级 Linux 发行版。
你喜欢存钱吗?我喜欢存钱。更好地资源利用就像拥有幸福的银行账户。
让我们对Docker上的Alpine Linux一探究竟。在Alpine Linux上可以建立属于我们自己的镜像。
创建你自己的容器
建立一个镜像的第一步是创建一个新的目录,并打开Dockerfile。接来下,用你最喜爱的文本编辑器取代“atom”行。
cd ~
mkdir buildingDockers
cd buildingDockers
atom Dockerfile
在atom中,添加以下代码到文件中并保存。
FROM iron/base
这是Iron.io容器的基础镜像,但你实际上可以命名任意Docker repo里你想要的的镜像。
我喜欢iron/base镜像,因为这是一个Iron.io博客。但也因为它增加了必要的库,当我们开始添加和构建其他包的时候可以派上用场。
我们首先需要FROM命令。让我们创建容器!在命令行中键入:
docker build -t namehere .
身披Shell的勇士
好了,我们已经有一个容器。现在,我们用它做什么?
访问shell是一个很棒的方法,并且很有成就感。它也很方便进行故障排除。打开镜像并释放shell,试试:
docker build -t namehere .
注意,这不是Bash。
有许多有用的命令来创建Docker镜像。为了简化,本文只介绍FROM和RUN命令。这绝对是值得查看整个列表选项的官方文档。
生而为RUN
RUN如何执行一个命令。例如,Alpine Linux 有一个很棒的存储类包,类似apt-get之类。为了看已安装的东西,尝试添加以下代码到你的Dockerfile:
RUN apk info
我们的安装包是如此有用。让我们添加一些东西。为此,从Alpine Linux packages repo中选择一个包。现在,将它添加至Dockerfile:
RUN apk add packageNameHere
最佳的实践和警告
Docker本身就有一个伟大的最佳实践指南。在这篇文章中,他们指出保持镜像小的重要性。避免膨胀很简单和直观。没问题,对吧?只是安装你需要的软件。
你也在Dockerfile中限制RUN命令的数量?Dockerfile 建立在层中。每个命令添加一个新的层。更多的层意味着更多的工作要做,你要将它们干净利落的合并在一起。
层可多可少
减少分层,我建议对命令分组。我们希望添加一个单独的层解决尽可能多的工作。以下是分组命令:
RUN command1 && command2
通过使用“ ”和回车使它更具可读性:
RUN command1
&& command2
&& command3
直到变成脑力负担之前,分组命令都是伟大的。当那种情况发生,优先考虑维护性。如果它减少了认知负荷,使用一个额外的RUN命令。Kelsey Hightower在《12 Fractured Apps》中指出,扭转一个RUN命令到shell脚本中是一个稍显逊色的方法来保证镜像的可维护性。
删除缓存,没人会因此受伤
没必要在Docker-land中安装缓存包。所以,让我们删除缓存。在你的Dockerfile结尾处添加以下语句:
RUN rm -rf /var/cache/apk/*
Musl Milk
如果你敢于用官方之外的Alpine Linux apk生态系统,你就有很大的机会选择从源代码进行编译。请注意,Alpine Linux依赖于Musl而不是GCC。
照着这么编译。
Busy Beat Boxin’
Alpine Linux在发行版大小上作出一些牺牲。他们选择BusyBox,而不是安装*Nix实用工具的标准套件。BusyBox是常用的实用工具中不错的精简型。
那就意味着一些实用工具可能不接受一般的GNU标记。这也意味着有些实用工具可能会完全消失。想要curl在你的镜像中?那你必须安装它。
保持学习
维基百科上有Alpine Linux的资料,你可以自己寻找更方便的技巧。
最后,有我们便利的IronWorker指南,很容易检视Docker镜像。如果你想看看我们如何写Dockerfiles,访问github.com/iron-io/dockers.