<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Docker on Michele Bologna</title>
    <link>https://www.michelebologna.net/tags/docker/</link>
    <description>Recent content in Docker on Michele Bologna</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sat, 25 Apr 2020 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.michelebologna.net/tags/docker/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How a Terraform &#43; Salt &#43; Kubernetes GitOps infrastructure enabled a zero downtime hosting provider switch</title>
      <link>https://www.michelebologna.net/2020/how-a-terraform-salt-kubernetes-gitops-infrastructure-enabled-a-zero-downtime-hosting-provider-switch/</link>
      <pubDate>Sat, 25 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2020/how-a-terraform-salt-kubernetes-gitops-infrastructure-enabled-a-zero-downtime-hosting-provider-switch/</guid>
      <description>&lt;h2 id=&#34;the-switch&#34;&gt;&#xA;  The switch&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#the-switch&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link to heading&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link to heading&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;It has been a busy weekend: I switched the hosting provider of my whole cloud infrastructure from &lt;a href=&#34;https://m.do.co/c/8d1614f882f8&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;DigitalOcean&lt;/strong&gt;&lt;/a&gt; to &lt;a href=&#34;https://hetzner.cloud/?ref=7UwSgYbEI1ef&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Hetzner&lt;/strong&gt;&lt;/a&gt;. If you are reading this it means that the switch is completed and you are being served by the Hetzner cloud.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TLS-terminated Bitlbee with custom protocols</title>
      <link>https://www.michelebologna.net/2020/tls-terminated-bitlbee-with-custom-protocols/</link>
      <pubDate>Sat, 18 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2020/tls-terminated-bitlbee-with-custom-protocols/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/mbologna/docker-bitlbee/commit/6695bafca40f285ad1794f500804ec2b14ebf114&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Five years ago&lt;/a&gt; I started a small GitHub project aimed to run &lt;a href=&#34;https://www.bitlbee.org&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Bitlbee&lt;/strong&gt;&lt;/a&gt; seamlessly in a &lt;strong&gt;container&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Why Bitlbee?&lt;/p&gt;&#xA;&lt;p&gt;Back in the day, I was relying heavily on &lt;strong&gt;IRC&lt;/strong&gt; for my daily communications and the plethora of other protocols that were starting to get traction was too much: I wanted to have a bridge between my IRC client and the other protocols to be able to communicate only by using my IRC client without installing any resource consuming monster (enough said).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Startup order in Docker containers</title>
      <link>https://www.michelebologna.net/2019/startup-order-in-docker-containers/</link>
      <pubDate>Mon, 07 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2019/startup-order-in-docker-containers/</guid>
      <description>&lt;h1 id=&#34;motivation&#34;&gt;&#xA;  Motivation&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#motivation&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link to heading&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link to heading&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;I recently dealt with an application that is comprised of &lt;em&gt;multiple services&lt;/em&gt; running in containers. Even though every part of this application is correctly split into each separated microservice, the independence of each service is not enforced. This lack of independence has several drawbacks, one of which is that containers must be started by following a pre-defined startup order. Otherwise, some containers might be terminated due to an application error (the application breaks when an unexpected error occurs, e.g. it is relying on another linked service that is not ready to accept the connection).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send an email from a Docker container through an external MTA with ssmtp</title>
      <link>https://www.michelebologna.net/2019/send-an-email-from-a-docker-container/</link>
      <pubDate>Mon, 04 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2019/send-an-email-from-a-docker-container/</guid>
      <description>&lt;p&gt;I packaged a standard application (think of it as a standard PHP or &lt;insert your preferred framework here&gt;) into a Docker container. So far, it was working flawlessly, but then a problem arose: &lt;em&gt;send an email from the Docker container&lt;/em&gt; (the event is triggered within the container).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Preventing Docker from manipulating iptables rules</title>
      <link>https://www.michelebologna.net/2018/preventing-docker-from-manipulating-iptables-rules/</link>
      <pubDate>Mon, 06 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2018/preventing-docker-from-manipulating-iptables-rules/</guid>
      <description>&lt;p&gt;By default, &lt;a href=&#34;https://docs.docker.com/network/iptables/#add-iptables-policies-before-dockers-rules&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Docker manipulates iptables rules&lt;/a&gt; to provide network isolation:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Chain FORWARD (policy DROP)&#xA;target prot opt source destination&#xA;DOCKER all -- 0.0.0.0/0 0.0.0.0/0&#xA;&#xA;[...]&#xA;&#xA;Chain DOCKER (1 references)&#xA;target prot opt source destination&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don&amp;rsquo;t mind having my iptables rules for forwarding manipulated, but there is a caveat: when you expose a container (with &lt;code&gt;-p&lt;/code&gt;), then the port will be exposed to every network interface (which means the whole Internet too). Let&amp;rsquo;s make an example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically update your Docker base images with watchtower</title>
      <link>https://www.michelebologna.net/2018/automatically-update-your-docker-base-images-with-watchtower/</link>
      <pubDate>Fri, 09 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2018/automatically-update-your-docker-base-images-with-watchtower/</guid>
      <description>&lt;p&gt;I’m an avid user of &lt;strong&gt;Docker&lt;/strong&gt; &lt;strong&gt;containers&lt;/strong&gt;, using base images pulled from the public registry &lt;strong&gt;DockedHub&lt;/strong&gt;. As you may know, Docker containers are based on Docked &lt;em&gt;base images&lt;/em&gt;, e.g. I run postgres containers that are based on Postgres base image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reverse engineer a Docker run command from an existing container</title>
      <link>https://www.michelebologna.net/2017/reverse-engineer-a-docker-run-command-from-an-existing-container/</link>
      <pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2017/reverse-engineer-a-docker-run-command-from-an-existing-container/</guid>
      <description>&lt;p&gt;During my usual backup routine, I wanted to gather how a Docker container I started a while ago was run, especially the &lt;code&gt;docker run&lt;/code&gt; command; this is required in case I need to re-run that container and I want to preserve the options (e.g. env variables, ports, etc.).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playing with Docker: tips and tricks to write effective Dockerfiles</title>
      <link>https://www.michelebologna.net/2015/playing-with-docker-tips-and-tricks-to-write-effective-dockerfiles/</link>
      <pubDate>Wed, 01 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2015/playing-with-docker-tips-and-tricks-to-write-effective-dockerfiles/</guid>
      <description>&lt;p&gt;Recently I have been playing with &lt;a href=&#34;https://www.docker.com/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Docker containers&lt;/a&gt;, and I am sure you already know what Docker is. In this post I will describe what I have learnt while using Docker containers and preparing Dockerfiles.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
