如何建立你自己的Docker镜像
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.
如何建立你自己的Docker镜像相关推荐
- docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)
文章目录 docker镜像 制作镜像的过程 基于已有镜像创建 基于本地模板创建 基于Dockerfile创建 Dockerfile操作指令 Docker的数据管理 数据卷 docker的网络通信 容器 ...
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
一个用于构建和推送Docker镜像的Maven插件. 使用Maven插件构建Docker镜像,将Docker镜像push到DockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇 ...
- 构建Docker镜像(三)
作者:李晓辉 联系方式:Xiaohui_li@foxmail.com QQ:939958092 一.建立Dockerfile 1.准备文件 新建一个目录和一个 Dockerfile mkdir /st ...
- 大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken
Docker注册表的主要目的是存储和分发Docker镜像,看似是一个相对简单的任务,但是如果遇到了像Uber这样的大规模计算集群,就很容易成为可伸缩性的瓶颈.在多区域和混合云系统的计算环境中,镜像分发 ...
- docker 镜像修改的配置文件自动还原_原创 | 全网最实在的docker入门教程四
作者:潘吉祥 上一篇我们学习了如何使用Dockerfile制作自己的镜像,不过这种方式更像纯粹的运维方式,作为开发者来说,未免有些小繁琐,一个不小心写错些命令就执行失败,我们还不知道错误在哪,这着实有 ...
- Docker镜像基本使用
使用 Docker 镜像 Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像. 获取镜像 docker pull [选项] [Docker Re ...
- docker 镜像重命名_Docker镜像管理(二)
在<Docker镜像管理(一)>中介绍了使用Docker Hub来管理你的Docker镜像,小伙伴们在创建仓库时,细心的同学可能已经发现再次创建private类型的仓库时,不能创建了,如下 ...
- Docker源码分析(十):Docker镜像下载
http://www.infoq.com/cn/articles/docker-source-code-analysis-part10 1.前言 说Docker Image是Docker体系的价值所在 ...
- docker 导入镜像_官方下一代Docker镜像构建神器 -- BuildKit
BuildKit是Docker官方社区推出的下一代镜像构建神器--可以更加快速,有效,安全地构建docker 镜像.Docker v18.06已经集成了该组件.BuildKit可用于多种导出格式(例如 ...
最新文章
- python表白程序-python如何写出表白程序
- Eclipse通过JDWP调试Dalvik
- 由社区推动的 .NET 6 新 API
- Centos7下安装Python3.5
- 运算放大器基本参数—压摆率(直观解释)
- Kubernetes 的网络原理 (五)---CNI网络模型
- 使命召唤4:现代战争
- Tasker Android系统增强神器,Android系统增强神器 Tasker
- 新的一年,如何做好日计划、月计划与年计划?
- 基于51单片机WIFI遥控防盗电子密码锁APP控制方案原理图设计
- java 微信 jar_weixin-java-tools
- 如何让Join跑的更快?(文末送书)
- Relax中的量化管理
- ip addr命令解析
- Onestage Grounding
- 中国疫苗行业发展态势及供需前景预测报告2022-2027年
- html表格怎么控制文字大小,如何用html设置文本输入框输入字体的大小
- java-net-php-python-java在线花店网站计算机毕业设计程序
- 竖脊肌(02):俯卧两头起
- 请大神帮我看看这是什么问题
热门文章
- 图像处理与识别的算法中若有非线性变换,那么请一定注意归一化的处理会影响结果
- opsforlist 存在贼覆盖_RedisTemplate常用集合使用说明-opsForList(三)
- linux搭建--ubuntu下安装libvirt注意事项(二)
- 应用语言学 计算机语言学,应用语言学的名词解释
- PHP使用CURL案例
- ubuntu设置字体编码GBK和UTF-8
- 基于XMPP协议的aSmack源码分析
- android源码的目录
- makefile中命令的显示
- 【转载】从康耐视(NASDAQ : CGNX)看国内视觉识别行业的机会