2

I've been using Docker for almost two years now, I've to say it's a super powerful tool and allow easy environments deploys, but I keep questioning why people use Docker in production? Even in the place I work they do and they can't explain it very well

I mean, you are creating a container that hosts services in a computer that already have services running, being one of these services the Docker daemon, all this shit doesn't add a lot of overhead to the application?

I mean, it's not better to just install python in Ubuntu instead installing Docker in Ubuntu, run the Docker daemon, start a container with other services and now I run python?

Just saying

Comments
  • 1
    I rewrote a python app in go, and put it in an Alpine container. This program has to run on 30 servers in the field, plus more as we do more installs. It's easier to ship a container than install the necessary dependencies. That's why we use docker in production anyway.
  • 0
    @wbeauford so it's a thing of convenience? I mean, in your case you prefer to "lose" around 200 mb of ram instead doing 30 installs. It's a good point. Thanks!
  • 2
    Better isolation between applications. Better reliability because you can fully package the app and exactly reproduce it in production. More efficient than using separate VMs but providing similar logical isolation. If you use it with container schedulers like Kubernetes you get some insane advantages for devops.
  • 0
    Scaling is also an issue it can help with too. It's more efficient to have a few of the same containers to do some load balancing, if the work load calls for it. @Nastrand
  • 1
    Scaling mentioned above, so I'll say consistency.

    Suppose you've done all your development and testing in containers and you have config written in a certain way... But then in prod it's a different stack so you have prod specific code or config. This is bad - environment differences is just another thing that can go wrong or break.

    Going the other way, if you're investigating an issue in production, helps to have prod-like test environments, in both infrastructure and application layers.

    I guess the other part is also upgrades to packages/dependencies. E.g. your python example - could build a new image and use that everywhere instead of needing to upgrade python in every server. So less work = happy IT people :)
  • 0
    @deMark but this can be solved without Docker, I mean, of course is more work to do but you can create an exact replica of the Docker image without using the Docker image and put it inside your production server.

    At the end a Docker file is basically a bunch of bash instructions that can be used in any console. And when we do this we will be using the resources of the machine better because we don't need to have the extra Docker daemon and the repeated services.

    I mean, of course is more work to IT people, but seems like the right thing to do in the cases when you wanna use all your computer power.
Add Comment