2023

Docker tips and tricks – choosing the right image

Some time ago I start an article about microservices but I got no time to continue the series. Nevertheless, I’ll publish the first one of the series. It’s a simple yet effective article on how to optimize often tremendous by size images to something that takes a lot less space and therefore can be run much faster.

The original code of a Dockerfile to run quite a simple python app looks like this:

FROM ubuntu:latest
WORKDIR /app
COPY ./app /app
RUN apt-get update && apt-get install python3 -y
RUN apt-get update && apt-get install python3-pip -y
RUN pip install requests==2.27.1
ENTRYPOINT [“echo”,”Hello”]

The result after we build the Dockerfile:

~/repo/docker-articles$ time docker build . -t original:0.1 --quiet
docker build . -t original:0.1 --quiet  0.10s user 0.09s system 0% cpu 35.108 total
$ docker images -a                                                                                                                                                                 REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
original     0.1       27cfff826324   7 seconds ago   438MB

Let’s optimize:

FROM python:3.8-alpine
WORKDIR /app
COPY ./app /app
RUN pip install --no-cache-dir requests==2.27.1
ENTRYPOINT ["python", "hello.py"]

Changes:

  • Update the docker image to a python alpine (use the latest python on lightweight Alpine Linux)
  • Remove install python & pip steps (they come prepackaged)
  • Use –no-cache-dir to save some space

Result:

~/repo/docker-articles$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
optimized    0.1       f5036ae50ca7   16 seconds ago   55MB

Build time:

~/repo/docker-articles$ time docker build . -t optimized:0.1 --quiet
docker build . -t optimized:0.1 --quiet  0.08s user 0.07s system 2% cpu 7.027 total

Build size reduced by 155.375%

Build time reduced by 133.291%

Choosing the right image with Docker is crucial. With a simple change, we can save 155% on the container’s size and reduce build time by 133%! With the next tutorial we’ll see multi-stage builds and how we can produce miniature, yet completely working and idempotent docker containers adding just a little more code in our Dockerfile.

Равносметката за 2022

Фю, 2022 си беше предизвикателство. Този път започвам с хубавото:

  • РОДИ СЕ ОГИ. Е на, каня се от септември месец да пиша за това, но търся муза и така и не писах, но имаме второ детенце, което носи огъня в себе си – Огнян. В ретроспекция съм убеден, че това биха били най-добрите години в живота ми.
  • Здрави сме.
  • Смених работата, нещо за което вече писах.
  • Време беше да поговорим открито за депресията.
  • Бях на Hills of Rock където откровено си откъснах главата на Slipknot, на Sabaton, на Testament. Пихме от обед, стояхме до късно, два дни бях с пусната коса, видях се с Вальо и Вельо, с Тошко и със Стаката, с Дима и Сашо, сигурно и с някой друг, вече не помня. Душата ми още потръпва като се подсетя за моментите.
  • Кафето освен основен стимулант в моя живот се затвърди като страст тази година. Реших да вдигна нивото и да сменя кафеварката (с която Златина ме зариби по specialty coffees) с нещо по-сериозно. Първо взехме Saeco Exprelia, но не се харесахме и реших да мина на ултимавитната Gaggia Classic с няколко подобрения. Към момента търся правилната рецепта за това колко ситно да го смеля, колко грама да сложа и колко грама да ми е екстракцията, но има хубави дни в които се получава повече от задоволително. (Освен това Злати ми подари и Wacaco Nanopresso, което със сигурност ще нося на Дунав Ултра!)

Какво не се случи:

  • Не карах толкова, колкото ми се искаше, НО направих почти 1200 км за миналата година (в първите три месеца основно).
  • Борбата с килограмите продължава.
  • Не свирих колкото ми се искаше.
  • Не писах колкото ми се искаше.
  • Оги се роди две седмици по-рано и се наложи да отложа в последния момент участието си в QA:Challenge Accepted, нещо, което ще поправя идната година.

Какво следва:

  • Да стана още по-добър татко и съпруг.
  • В професионален план – много, ама много. Имам да уча още много, много, много, нещо, което ме прави много доволен.
  • Преди час (в 1:30 някъде) си купих билет за Дунав Ултра 2023 така, че познайте дали няма да пиша през ден за подготовката ми!
  • Чакат ме няколко много вълнуващи бревета.