技术栈:
1. 构建系统
2. 镜像仓库
3. 宿主机管理
4. 配置管理
5. 部署
6. 编排
7. 日志
8. 监控

镜像:
1. 如果用户像往常一样运行包安装命令,这些永远也用不上的缓存包文件将会永远地成为镜像的一部分。不过,如果用户在同一条安装命令中删除它们,这些文件就会像从未存在过一样。
RUN xxxxxxxxxxxxxxxxxxx \
&& xxxxxxxxxxxxxxxxxxx \
&& rm -f ......

  1. 通过环境变量将配置传递给容器内部
  2. 当用户需要包装一个无法通过环境变量配置的服务时,使用模板文件,使用一个入口点脚本,获取环境变量并在文件系统上生成配置文件,然后调用实际进程,该进程将在启动时读取那些新生成的配置文件。
    让镜像在Docker变化时对自身进行重新配置,docker-gen这个工具在Docker提供的容器信息基础上,使用提供的模板来生成配置文件,它动作的方式是它会监视或轮询Docker进程以获取容器内的变化(添加、删除等),并在发生变化时从模板重新生成配置文件。 https://github.com/jwilder/docker-gen
  3. 将日志文件链接到标准输出,如在nginx中配置
    access_log /var/log/nginx/access.log main;
    在Dockerfile中,将/dev/stdout链接到该文件
    RUN ln -sf /dev/stdout /var/log/nginx/access.log

私有仓库
1. 加固(SSL、认证)https://docker.github.io/registry/deploying/
基于令牌的认证方式是唯一可供选择的安全选项

  1. 最小化Docker镜像 docker-squash https://github.com/jwilder/docker-squash

在生产环境中使用Docker的一些标准:
1. 在一个构建系统中构建所有镜像
2. 不要使用或禁止使用非标准做法
3. 使用标准基础镜像
4. 使用Docker进行集成测试

配置
由于配置管理擅长的是装配宿主机,因而它们在新的容器化的世界里并没有多少用武之地。它们的作用也从负责配置整个系统转变成只是负责配置运行这些应用服务的基础设施,这包括从Docker宿主机的配置到Mesos集群的搭建等。
Chef
https://github.com/chef-cookbooks/docker
https://github.com/chef-boneyard/chef-container
Ansible
https://github.com/angstwad/docker.ubuntu
http://docs.ansible.com/ansible/docker_module.html
Salt Stack
Puppet
https://forge.puppet.com/garethr/docker/readme

存储引擎
https://labs.ctl.io/
查看镜像分层的工具 Image Layers https://imagelayers.io/
AUFS
DeviceMapper 预分配thin provisioning
https://www.kernel.org/doc/Doc ... pper/
在生产环境下应用devicemapper引擎时请记得一定要设置成使用真实的块设备来存储数据和元数据设备。
https://github.com/docker/dock ... apper
BTRFS
https://btrfs.wiki.kernel.org/index.php/Main_Page
OverlayFS
https://git.kernel.org/cgit/li ... s.txt
VFS 不提供写时复制,不太适用于生产环境,但依旧算是挂载Docker卷的一个不错的解决方案,,在FreeBSD这样的非Linux平台上运行

网络
零配置网络zeroconf http://zeroconf.org/
多主机的容器间通信
大使模式(ambassador pattern) https://docs.docker.com/engine ... king/
开放虚拟交换机(OVS)和GRE隧道: 用OVS创建一个网桥来取代默认的docker0,然后在内网的宿主机之间创建一个安全的GRE隧道。
https://goldmann.pl/blog/2014/ ... osts/
libnetwork https://github.com/docker/libnetwork
swarm https://github.com/docker/swarm
共享网络命名空间 
kubernetes http://kubernetes.io
pod https://github.com/GoogleCloud ... ds.md
启动容器时带上参数--net=container:NAME_or_ID,就可以将该容器加入到NAME_or_ID容器的“基础”网络命名空间
https://speakerdeck.com/gyre00 ... iners
Docker允许用户在创建容器的时候和它的宿主机共享网络命名空间,该宿主机本身在PID 1进程的命名空间里运行它的网络栈,对于容器来说它们可以很轻松地加入宿主机的网络命名空间里,即:容器的网络栈和宿主机之间是共享的。--net=host
IPv6 当前Docker已经加入了对IPv6的支持 http://docs.docker.com/engine/ ... king/
pipework
https://github.com/jpetazzo/pipework
pipework镜像 https://hub.docker.com/r/dreamcat4/pipework/
weave
https://github.com/weaveworks/weave
安全增强 http://www.weave.works/weave-net-cryptography-faq/
可视化 weave scope 
https://github.com/weaveworks/scope
http://thenewstack.io/how-to-d ... orks/
快速网络路径 http://www.weave.works/weave-fast-datapath/
Docker插件系统
https://blog.docker.com/2015/0 ... gins/
把weave当做Docker的插件使用 http://www.weave.works/weave-a ... ugin/
flannel
https://github.com/coreos/flannel
VXLAN https://en.wikipedia.org/wiki/ ... e_LAN
etcd https://github.com/coreos/etcd
calico (3层解决方案) 原生的IPv6支持,分布式BGP路由
http://www.projectcalico.org
ClusterHQ powerstrip https://github.com/ClusterHQ/powerstrip

调度
Mesos+marathon
优势资源公平算法 https://www.cs.berkeley.edu/~alig/papers/drf.pdf
Kubernetes
OpenShift (Red Hat) https://www.openshift.com/open ... more/
Atomic项目 http://www.projectatomic.io
Red Hat容器安全标准 https://securityblog.redhat.co ... arts/

服务发现
最低要求:服务注册/服务声明、服务查找/服务发现
服务注册的两种实现方式:
1. 把服务注册的模块直接嵌入到应用服务的源代码里
2. 使用一个伙伴进程(或者说是协同进程)来帮忙处理注册的任务
DNS
SkyDNS 
https://github.com/skynetservices/skydns
SkyDNS docker镜像 https://hub.docker.com/r/skynetservices/skydns/
skydock (SkyDNS集成到Docker的方案,目前只能用在一台Docker宿主机上) https://github.com/crosbymichael/skydock
weave-dns (允许跨多台Docker宿主机,但必须在专有的weave覆盖网络上使用)
https://github.com/weaveworks/ ... vedns

Zookeeper
znode
Apache Curator(zookeeper客户端库) http://curator.apache.orgX17X 入门文档 http://tomaszdziurko.pl/2014/0 ... cing/

etcd
生产环境集群设置方案 https://coreos.com/os/docs/lat ... .html
安全模型 https://github.com/coreos/etcd ... ty.md
Docker Service Discovery Using Etcd and Haproxy http://jasonwilder.com/blog/20 ... very/

consul 分布式键值存储、分布式监控工具、DNS服务器
https://www.consul.io/docs/index.html
serf https://www.serfdom.io
Web UI https://github.com/hashicorp/c ... ME.md
registrator https://github.com/gliderlabs/registrator
镜像 https://registry.hub.docker.co ... ator/

Eureka
https://github.com/Netflix/eureka
https://github.com/Netflix/eur ... rview
Netflix http://techblog.netflix.com
http://netflix.github.io

Smartstack 技术无关性,不需要用户编写任何额外的应用代码,可被部署到祼机、虚拟机或Docker容器里
包含zookeeper、haproxy以及
Nerve 监控机器和服务的健康状况 https://github.com/airbnb/nerve
Synapse 服务发现 https://github.com/airbnb/synapse

nsqlookupd 在大规模基础设施里运行分布式消息队列的解决方案
http://nsq.io/components/nsqlookupd.html
http://nsq.io/components/nsqd.html

日志
在其它容器一侧收集日志
docker run -v /logs --name redis registry/redis
docker run -d --volumes-from redis --name log_collector registry/logcollector

监控
Datadog https://www.datadoghq.com/blog ... adog/
Docker Python API docker-py https://github.com/docker/docker-py
Docker 远程API https://docs.docker.com/refere ... _api/
Docker集群管理系统Shipyard https://github.com/shipyard/shipyard
docker ps 
docker stats

 

Docker生产环境实践指南的更多相关文章

  1. web资源预加载-生产环境实践

    此文记录资源预加载在我们项目的实践,技术难度不算高,重在介绍一套技术方案的诞生与实施,其中都进行了哪些思考,依据什么来做决策,如何进行效果评估,等等.为读者在制定技术方案时提供一定启示. 背景 资源预 ...

  2. docker 生产环境基础应用

    项目背景 此项目是在已有项目基础上,开发的一套相对独立的系统.项目总体分为三部分,前端.中间应用服务.流媒体服务.前端技术选型为vue+elementui,中间应用服务为.net core webap ...

  3. Filebeat 收集K8S 日志,生产环境实践

    根据生产环境要求,需要采集K8Spod 日志,和开发协商之后,pod中应用会将日志输出到容器终端上,这时可以直接用filebeat 采集node节点上面的/var/log/containers/*.l ...

  4. 【转】CentOS 6.5 生产环境优化指南

    原文链接:https://www.deepwebcn.com/82.html centos6.5 CentOS 6.5 系统安装之后并不能立即投入生产环境使用,常常需要先经过我们运维人员的优化才行.优 ...

  5. [转]Docker 生产环境之配置容器 - 限制容器资源

    默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的给定资源.Docker 提供了一些方法来控制容器可以使用多少内存.CPU 或块 IO,并设置 docker run 命令的运行时配置标志.本 ...

  6. Logstash生产环境实践手册(含grok规则示例和ELKF应用场景)

    ELKF应用场景: 1) datasource->logstash->elasticsearch->kibana 2) datasource->filebeat->log ...

  7. Docker 生产环境之配置容器 - 自动启动容器

    原文地址 Docker 提供了重启策略,以控制容器在退出时是否自动启动,或在 Docker 重新启动时自动启动.重启策略可确保链接的容器以正确的顺序启动.Docker 建议使用重启策略,并避免使用流程 ...

  8. 基于centos7.3 redhat7.3安装LAMP(php7.0 php7.1)生产环境实践

  9. 生产环境实践:Cana实现MySQL到ES实时同步

    注:由于文章篇幅有限,完整文档可扫下面二维码免费获取,更有深受好评的大数据实战精英+架构师好课等着你. 速点链接加入高手战队:http://www.dajiangtai.com/course/112. ...

随机推荐

  1. Hive操作表部分总结

    创建表: create table tableName(time INT,userid BIGINT,url STRING,ip STRING COMMENT 'IP Address of the U ...

  2. web.xml 文件配置01

    web.xml 文件配置01   前言:一般的web工程中都会用到web.xml,方便开发web工程.web.xml主要用来配置Filter.Listener.Servlet等.但是要说明的是web. ...

  3. Vs程序自动获取windows7/vista系统管理员权限

    1.在工程中加入MANIFEST资源(C#) 打开VS2005.VS2008.VS2010工程,查看在Properties下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程 ...

  4. Linux进程切换代码分析

    朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这次我们来分析L ...

  5. Visual Studio Enterprise 2015下载 Update3

    Visual Studio 2015 是一个丰富的集成开发环境,可用于创建出色的 Windows.Android 和 iOS 应用程序以及新式 Web 应用程序和云服务. 1.适用于各种规模和复杂程度 ...

  6. [IIS]IIS扫盲(三)

      IIS扫盲贴 --==[精品]==--   IIS扫盲贴     --==[精品]==-- 2000对应iis5.0  xp对应iis5.1  2003对应iis6.0        作者: II ...

  7. /etc/resolv.conf overwritten. Redhat/Centos

    Prevent /etc/resolv.conf from being blown away by RHEL/CentOS after customizing If you are using RHE ...

  8. JS转义 escape()、encodeURI()、encodeURIComponent()区别详解

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  9. java学习第6天

    今天主要是学习下static静态变量的了解 ,主要是用于多个对象相同的成员变量,用以节省空间.它是随着类的加载而加载可以是方法也可以是对象.直接通过类名调用.比如main方法就是,可以直接调用. ma ...

  10. web语义化与h5新增标签

    Web语义化就是html告诉我们也告诉机器这一块是什么内容,例如:“这行是一个标题,这几行组成一个段落,这是一个列表,那是一个链接.”   Web语义化有三个阶段: 1.h1~h6.thead.ul. ...