<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 5/6/2015 8:31 AM, <a class="moz-txt-link-abbreviated" href="mailto:couch@cs.tufts.edu">couch@cs.tufts.edu</a>
      wrote:<br>
    </div>
    <blockquote
      cite="mid:20150506123653.4AE3810F24F5@pmx.eecs.tufts.edu"
      type="cite">
      <meta name="generator" content="Windows Mail 17.5.9600.20689">
      <style data-externalstyle="true"><!--
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
}
p.MsoNormal, li.MsoNormal, div.MsoNormal {
margin:0in;
margin-bottom:.0001pt;
}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst, 
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle, 
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
line-height:115%;
}
--></style>
      <div data-externalstyle="false" dir="ltr" style="font-family:
        'Calibri', 'Segoe UI', 'Meiryo', 'Microsoft YaHei UI',
        'Microsoft JhengHei UI', 'Malgun Gothic',
        'sans-serif';font-size:12pt;">
        <div style="color: rgb(0, 111, 201); font-family: Arial;
          font-size: 14pt;">I might add that what makes Docker useful
          for us is that we can deal with rather complex configuration
          management requirements -- including several version-locked
          interlocking subsystems -- without changing the host OS. </div>
        <div style="color: rgb(0, 111, 201); font-family: Arial;
          font-size: 14pt;"><br>
        </div>
        <div style="color: rgb(0, 111, 201); font-family: Arial;
          font-size: 14pt;">But I might add that this is “survival of
          that which fits.” </div>
      </div>
    </blockquote>
    <br>
    I think this is one of the double-edge swords of Docker -- as you
    (almost) completely capture configuration, it's far too easy to
    create a non-repeatable "golden image" and pass it around.  Of
    course, it's fairly easy to *NOT* do this as well, but there will be
    less immediate pain to using Docker with a "this one works, go with
    it" model than there is with VM images.<br>
    <br>
    I will add that as most Docker images are fairly well contained (pun
    intended), it's fairly easy to put the whole container through a
    build/validation/deployment pipeline.  You can usually (depending on
    container linkage issues) have high confidence that things work in
    PROD the way they worked in DEV and TEST.  (NOTE:  this is going to
    be less and less true as we move more into inter-container
    relationships and service discovery through e.g. consul or etcd).<br>
    <br>
    <blockquote
      cite="mid:20150506123653.4AE3810F24F5@pmx.eecs.tufts.edu"
      type="cite">
      <div data-externalstyle="false" dir="ltr" style="font-family:
        'Calibri', 'Segoe UI', 'Meiryo', 'Microsoft YaHei UI',
        'Microsoft JhengHei UI', 'Malgun Gothic',
        'sans-serif';font-size:12pt;">
        <div style="color: rgb(0, 111, 201); font-family: Arial;
          font-size: 14pt;">The main reason we use Docker is that it is
          literally <strong>too difficult </strong>for our developers
          to build the run/test configuration unassisted. This means
          that any work we can do for them -- through docker -- is
          definitely worth it, even though that work can be involved,
          especially in interfacing host/guest OS resources.<br>
        </div>
      </div>
    </blockquote>
    <br>
    One the one hand, that seems dangerous to me -- using Docker to work
    around a build difficulty problems feels too much like sweeping
    problems under the rug.  <br>
    <br>
    On the other hand, Docker *does* allow good separation of concerns. 
    For example, "Ops" can own a base image, with proper instrumentation
    and operational features, and "Dev" can simply inherit from that
    image.<br>
    <br>
    Perhaps the single most powerful pattern in Docker is the similarity
    to OO programming (inheritance and composition).  It works well for
    a Devops mindset to say "this machine is *JUST LIKE* that machine,
    plus this other stuff".  Software Development has spent many years
    getting good at decomposition through inheritance and inclusion. 
    Docker (particularly adding Fleet or Compose) allows us to express
    this at the system level.<br>
    <br>
    --<br>
    D<br>
  </body>
</html>