业内docker技巧和最佳实践的想法
业内docker技巧和最佳实践的想法
最佳实践问题
这里有一些技巧,可能符合或可能不符合最佳实践,回复评论将不胜感激。
•保持映像小:使用--no-install-recommends选项的apt-get,安装真正的依赖性,而不是大的元数据包(如的texlive-full)。
•避免结合RUN命令,等创建更多的AUFS层? (限为一次42,但现在是至少127)。
•可以使用Run git clone......将数据添加到一个容器到ADD位置,这缓存无效。
•使用自动化构建链接到Github上,基于Dockerfiles而不是push本地映像生成。这不仅使Dockerfile透明地提供,并提供一个链接,人们可以提交问题库,但它也有助于确保可在Hub上的映像从Hub(从入口点),而不是本地地从任何可用获得的基础映像。这可以帮助避免非同步的各种可能而出现的错误。
Docker的标签使用
不幸的是,Docker似乎用这个词标记都是指应用到映像标签(例如,在docker build -t imagelabel。在-t参数“tags”的形象为“imagelabel',所以我们不必记住它的哈希)而且还使用标签来指代一个冒号,如后应用到映像名称的末尾的串,Ubuntu:latest中的latest。后者是作为Docker Hub的“标签”选项卡下的“tags”的定义。对于这种标签(我将随意称之为一种“版本标记”来区分)的最佳做法还不清楚。
一种情况是清楚的标注特定版本。Docker的自动构建让用户无论是“版本标记”链接到一个分支或git的历史标签。在这种情况下的“分支”可以指任一个不同的GIT中分支或仅仅是一个不同的子目录。匹配一个Git标签提供了最明确的使用docker版本标签;提供相对静态版本稳定连结。 (我说“相对”静态的,因为即使我们不改变Dockerfile,如果我们重新构建Dockerfile我们可能会得到应有的较新版本包括了软件存在的新形象,这可以很好的相对于固定的安全漏洞,而且还可能会打破先前有效环境)。
用例是不太清楚的是使用Docker,这些“版本tags”,表示相关的图像之间的其他差异,如eddelbuettel/docker-ubuntu-r:add-r和eddelbuettel/docker-ubuntu-r:add-r-devel。为什么这些不同tags,而不是不同的根源还不清楚,除非它是多个docker文件在一个单一的存储库Github上的便利。不过,这是完全可以配置自动构建指向同一个Github上repo,而不是增加额外的完全独立的docker hub构建的tags在同一个docker枢纽repo。
Docker语言从git术语学习借用,但它解释这些过于夸张是相当危险的。
保持一个干净的docker环境
•运行交互式容器--rm标志,以避免之后将其删除。
•删除所有停止容器:
docker rm $(docker ps -a | grep Exited | awk '{print $1}')
•清理未标记的图像docker:
docker rmi $(docker images -q --filter "dangling=true")
•停止并删除所有容器(包括运行容器!)
docker rm -f $(docker ps -a -q)
Docker和它的持续集成
•我们可以安装,但不能在Travis-CI在这个时候跑Docker。看来linux内核提供有太旧。也许,当他们升级到Ubuntu14:04映像...
•(至少在没有vagrant/ VirtualBox虚拟层之间)的docker型可发送Shippable-CI,我们不能运行Docker。Docker运行在Docker里是不可能的(见下文)。
•出于同样的原因,我们不能在drone.io CI运行Docker。然而,Drone提供它的系统,可以在自己的服务器,这完全托管服务不同的是,允许的自定义映像上运行的开源版本。不幸的是,我不能让它在这上面工作。
Docker内运行docker:
docker容器内,我们不能直接安装docker。我们可以解决这个问题,加入一个完整的虚拟化层 - 如docker中的Vagrant运行/ VirtualBox的运行在docker。
或者,我们可以较为聪明,告诉我们的docker简单地使用不同的卷存储其AUFS层。Matt Gruter具有这是一个非常巧妙的例子,它可以使用,例如运行Drone服务器(运行docker)docker容器(mattgruter/drone)内。
我相信这只是工作,如果我们运行与--privileged权限外docker的映像,如我们不能用像Shippable的服务器这会把我们带入一个预置的docker的容器上使用这种方法。
本文翻译自:http://www.carlboettiger.info/2014/08/29/docker-notes

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
openstack 下网络[路由绑定]故障解决
1. 查询网络信息 [root@kf-test-pinyun-048228 ~(keystone_admin)]# neutron net-list | grep w2 | 01a7ab13-65a8-4300-a53b-d6a774414c2a | w2 | 67f3da0b-a513-4857-8ad7-2283494a3b4f 192.168.0.0/24 | 2. 查询子网信息 [root@kf-test-pinyun-048228 ~(keystone_admin)]# neutron subnet-list | grep 67f3da0b-a513-4857-8ad7-2283494a3b4f | 67f3da0b-a513-4857-8ad7-2283494a3b4f | 2 | 192.168.0.0/24 | {"start": "192.168.0.21", "end": "192.168.0.200"} | 3. 查询当前路由信息 [root@kf-test-pinyun-048228 ~(keystone_admin)]#neutron router-list ...
- 下一篇
[Docker大讨论]docker并非万能,你也不必把所有的东西都部署在docker上
[Docker大讨论]docker并非万能,你也不必把所有的东西都部署在docker上 当读了一篇文章"在docker容器中运行并升级MySQL服务器":https://intercityup.com/blog/running-upgrading-mysql-server-docker/之后,我觉得docker并非万能,你也不必把所有的东西都部署在docker上,比如数据库。 作者在容器中升级mysql碰到了问题,同时提出了4个解决方案:1.启动一个新的升级版本的mysql容器但显然,你需要先听到旧容器再启动新容器,这样你就会宕机2.使用Percona或者MariaDB做集群3.在运行的容器中升级软件4.作者更推荐最后一种,就是不要为数据库使用docker 作者最后总结说,docker适用于应用程序部署,但是不适用于数据库,各位学习docker的同学觉得如何呢?
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长