Docker
істотно: Docker — сильний інструмент, але не кожен проєкт потребує контейнеризації.; :contentReference [oaicite:5]{index=5}
Контейнер зазвичай містить:
Тематичні мітки
Bind mounts корисні для:
Docker дає ізоляцію, але контейнер не є собою абсолютним security boundary.; -v pgdata:/var/lib/postgresql/data \ FROM node:22-alpine
</div>
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
build: .; Docker у production потребує дисципліни.;== Docker Image ==
* build image;
* run tests in container;
* run database for integration tests;
* push image to registry;
* deploy by tag or digest;
* scan image;
* generate SBOM;
* promote image between environments;
* rollback.; Вона лише пакує й запускає застосунок зручніше.; Docker добре підходить, якщо потрібно:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Тести піднімають тимчасову базу даних у контейнері, проганяють сценарії й видаляють середовище після завершення.; Вона надає можливість пакувати застосунки з їхніми залежностями в images, запускати їх як containers, описувати середовище через Dockerfile і Docker Compose, використовувати registries, автоматизувати CI/CD і спрощувати шлях від локальної розробки до production.; * Документація щодо containers, images, registries, volumes, networks, BuildKit, multi-stage builds, CI/CD, Kubernetes, Docker Swarm, SBOM і container security.; Сценарії:
<syntaxhighlight lang="dockerfile">
'''Контейнер''' — це ізольований бізнес-процес або група процесів, які запускаються з Docker image.; '''Практична роль:''' якщо завтра знайдуть уразливість у бібліотеці, SBOM допоможе оперативно зрозуміти, чи є собою вона у вашому image.; Офіційна документація описує Docker Engine як open source containerization technology for building and containerizing applications.;<syntaxhighlight lang="dockerfile">
Kubernetes краще для:
== Root user у контейнері ==
== SBOM ==
|-
| Ізоляція
| На рівні ОС і namespaces
| Повна guest OS через hypervisor
|-
| Розмір
| Зазвичай менший
| Зазвичай більший
|-
| Старт
| Швидкий
| Повільніший
|-
| Kernel
| Ділить kernel із host
| Має власне guest OS kernel
|-
| Типовий сценарій
| Application packaging
| Повна ізольована ОС
|}
</div>
</div>
</div>
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
'''Критично:''' якщо secret потрапив у image layer, просте видалення файлу в наступному Dockerfile-кроці має змогу не прибрати його з історії.; * Контейнер має змогу стартувати за секунди, бо не завантажує повну guest OS як VM.; Контейнер має власну файлову систему, network namespace, process namespace і набір налаштувань, але використовує ядро host-системи.; postgres:18
* license compliance;
* vulnerability management;
* supply chain security;
* audits;
* incident response;
* dependency tracking;
* enterprise governance;
* customer requirements.; * `latest` — це без ускладнень tag, а не гарантія найкращої або стабільної версії.; '''HEALTHCHECK''' надає можливість Docker або orchestrator зрозуміти, чи контейнер здоровий.; Іноді найкращий перший крок — без ускладнень добре контейнеризований моноліт.; :contentReference [oaicite:1]{index=1}
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
POSTGRES_USER: app
=== Production deployment ===
Docker застосовується для:
BuildKit дає:
docker stop container_name
</div>
COPY .; * кожен сервіс має свій image;
* незалежні dependencies;
* простіше scaling;
* CI/CD по сервісах;
* isolation;
* легше локально підняти stack через Compose;
* deployment через Kubernetes або інший orchestrator.; '''Bind mount''' підключає директорію host-системи в контейнер.;{{SEO
|title=Docker — платформа контейнеризації для застосунків, образів, Dockerfile, Compose, Docker Engine і DevOps
|description=Docker — Wiki-стаття про платформу контейнеризації для розробки, доставки й запуску застосунків. Розглянуто Docker Engine, Docker Desktop, Docker CLI, Dockerfile, Docker Image, Docker Container, Docker Compose, Docker Hub, registry, volumes, networks, BuildKit, multi-stage builds, Dockerfile best practices, Docker Swarm, Kubernetes, безпеку, CI/CD, DevOps, переваги, обмеження, цікаві факти і хороші практики.
|keywords=Docker, Docker Engine, Docker Desktop, Docker CLI, Dockerfile, Docker Image, Docker Container, Docker Compose, Docker Hub, containerization, containers, container image, registry, volume, Docker network, BuildKit, multi-stage build, Docker Compose file, Docker Engine 29, DevOps, CI/CD, Kubernetes, Docker Swarm, container security
|alternativeTo=віртуальні машини для легших application packaging сценаріїв; ручне встановлення залежностей на сервер; Vagrant для частини dev environment задач; system packages без ізоляції; Kubernetes для простих локальних сценаріїв; Podman у Docker-compatible workflows; LXC для application container packaging; bare-metal deployment без reproducibility; складні shell scripts для розгортання застосунків
}}
* контейнер не є собою повною VM;
* security boundary не абсолютний;
* storage для stateful apps складний;
* networking має змогу заплутувати;
* Docker Desktop має змогу споживати багато ресурсів;
* неправильні images можуть бути небезпечними;
* secrets без зайвих зусиль випадково включити в image;
* production потребує orchestration і monitoring;
* debugging іноді складніший;
* Windows/macOS використовують додатковий virtualization layer;
* root і privileged containers створюють ризики;
* image bloat має змогу уповільнювати builds і deploy.; * Docker Engine documentation.; * Docker Engine;
* Docker CLI;
* Docker Compose;
* GUI;
* Kubernetes у частині сценаріїв;
* інтеграцію з файловою системою;
* керування images і containers;
* extensions;
* конфігурація resources;
* інтеграцію з WSL 2 на Windows.; Монолітний застосунок додатково можна контейнеризувати.; volumes:
WORKDIR /app
</div>
Бази даних можна запускати в Docker, особливо для локальної розробки й тестів.; '''Multi-stage build''' надає можливість мати кілька етапів у Dockerfile й переносити в фінальний image тільки потрібні файли.; Docker популяризував підхід, де застосунок описується через Dockerfile, збирається в image, пушиться в registry і запускається через одну команду.; POSTGRES_DB: appdb
Docker і бази даних
переважні аспекти Docker
Практична роль: цей Compose-файл піднімає застосунок і базу як один локальний stack.; * Docker Build documentation.; Критерій Docker Compose застосовується для: істотно: tag має змогу змінитися, а digest вказує на конкретний вміст.; LXC
image: postgres:18
Найлюдяніший факт: Docker став популярним не з цієї причини, що контейнери були новими, а з цієї причини, що він зробив їх зрозумілими для звичайного розробника.; Офіційна документація Docker описує Docker як open platform for developing, shipping, and running applications.;</syntaxhighlight>
HEALTHCHECK --interval=30s --timeout=3s \
Docker Engine — це основна технологія Docker для створення й запуску контейнерів.; * Docker security documentation.;== .dockerignore ==
volumes:
- захисту host;
- стабільності;
- multi-service environments;
- production isolation;
- тестування поведінки при нестачі ресурсів;
- cost control.; USER app
- base image;
- installed packages;
- application files;
- dependencies;
- environment variables;
- metadata;
- default command;
- exposed ports;
- filesystem layers.;</syntaxhighlight>
Docker надає можливість зібрати застосунок разом із його залежностями в образ і запускати його однаково на різних машинах: ноутбуці розробника, тестовому сервері, CI/CD, хмарі або production-інфраструктурі.; * Docker image складається з шарів, з цієї причини порядок інструкцій у Dockerfile впливає на cache і швидкість build.; Не монтуйте чутливі директорії без потреби.; * Docker добре підходить і для монолітів, і для мікросервісів.; Офіційна довідка Docker описує Compose file як файл, що визначає multi-container application.; depends_on:
- писати logs у stdout/stderr;
- збирати logs централізовано;
- не зберігати важливі logs лише в контейнері;
- контролювати log rotation;
- не писати secrets у logs.; Головна думка: Docker — це не без ускладнень спосіб “запустити щось у контейнері”.; * локальної розробки;
- збірки images;
- простих контейнерів;
- Compose-сценаріїв;
- навчання container basics.; Якщо він залежить від випадкових ручних кроків, Docker втрачає одну зі своїх головних переваг.;</syntaxhighlight>
Можливі проблеми:
</syntaxhighlight>
Docker не є собою магічною заміною архітектури, безпеки, backup або моніторингу.; db_data:
WORKDIR /app
</syntaxhighlight>
Контейнери можуть обмежувати CPU і memory.; Практична роль: image — це “зліпок” застосунку, а container — запущений екземпляр цього зліпка.;
services:
Scanning сприяє перевіряти:
Resource limits корисні для:
docker images
Приклад:
Docker Engine є собою open source containerization technology.; Приклад:
</div>
Dockerfile має змогу містити:
'''SBOM''' або '''Software Bill of Materials''' — список компонентів у software artifact, зокрема container image.; * Docker daemon;
* Docker CLI;
* REST API;
* container runtime;
* image management;
* networking;
* volumes;
* build functionality;
* registry interaction.; * network complexity;
* distributed tracing;
* service discovery;
* versioning;
* observability;
* latency;
* data consistency;
* operational complexity.; Docker
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Основні команди:
'''Висновок:''' Docker зручніший для пакування застосунків, а LXC — для сценаріїв, ближчих до легкої віртуалізації Linux-систем.; Docker Engine є собою open source container engine, а Docker Desktop — окремий desktop-продукт із власними умовами використання.; Для публікації потрібен `-p` або відповідна Compose-конфігурація.;== Контейнер ==
* баз даних;
* uploaded files;
* кешів;
* persistent data;
* logs у частині сценаріїв;
* shared data між контейнерами;
* local development state.; * config;
* connection strings;
* feature flags;
* environment-specific settings;
* runtime behavior.; Image складається з шарів і зазвичай створюється з Dockerfile.; {| class="wikitable"
Volumes використовують для:
CMD ["python", "app.py"]
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Приклад логіки:
Docker має змогу бути не найкращим вибором, якщо:
Це корисно для:
</div>
<syntaxhighlight lang="bash">
docker run --privileged some-image
Docker має власну network model.; * bridge;
* host;
* none;
* overlay;
* macvlan;
* custom bridge networks.; * Docker зробив контейнери масовим developer tool, хоча Linux-контейнери існували й до нього.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
</div>
== Docker Network ==
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
!; Застосунок деплоїться як image з конкретним tag або digest, а rollback означає повернення до попереднього image.; * Docker Engine release notes.; FROM golang:1.24-alpine AS build
</div>
Docker надає можливість переглядати logs контейнера.;</div>
Docker корисний не лише для мікросервісів.; Docker має обмеження.; Для компанії це потрібно перевіряти окремо.; Для production часто краще pin version або digest, а не покладатися на `latest`.; * Найбільша сила Docker — не “магічна ізоляція”, а повторюваність середовища.;== Docker CLI ==
'''Практична роль:''' Docker робить CI/CD чистішим, бо pipeline функціонує з конкретним artifact — container image.; - db
Push to registry
docker version
!; '''LXC''' — Linux containers на нижчому рівні, які часто більше схожі на lightweight system containers.; Run tests
== Docker і LXC ==
* Docker Hub;
* GitHub Container Registry;
* GitLab Container Registry;
* Amazon ECR;
* Google Artifact Registry;
* Azure Container Registry;
* self-hosted registry;
* Harbor;
* private enterprise registry.;== Приклади сценаріїв використання ==
Приклад:
Найлюдяніший факт: Docker — це спосіб перестати сперечатися, у кого яка реліз Node, Python або PostgreSQL стоїть локально, і без ускладнень запустити однакове середовище.;== Dockerfile ==
Потрібно продумати:
Проста різниця: Docker сприяє створити й запустити контейнер, а Kubernetes керує великою кількістю контейнерів у кластері.;node_modules
.git
'''Критично:''' не монтуйте Docker socket у контейнер без дуже вагомої причини.;== Docker Swarm ==
|-
| технічна архітектура
| Зазвичай daemon-based
| Daemonless підхід
|-
| Rootless
| Підтримується, але історично Docker часто асоціювали з daemon
| Сильний rootless focus
|-
| CLI
| Docker CLI
| Docker-compatible команди в багатьох сценаріях
|-
| Ecosystem
| Дуже широка
| Сильна в Linux/Red Hat ecosystem
|}
'''Практична роль:''' registry — це як складський облік контейнерних образів, з якого production або CI/CD бере потрібні версії.; volumes:
!; Потрібно перевіряти джерело, теги, актуалізація й репутацію image.;</div>
`--privileged` дає контейнеру дуже широкі права.; * застосунок;
* runtime;
* бібліотеки;
* конфігурацію;
* environment variables;
* entrypoint;
* filesystem layer;
* exposed ports.;
</syntaxhighlight>
environment:
</syntaxhighlight>
- однакових toolchains;
- швидкого onboarding;
- VS Code Dev Containers;
- ізоляції dependencies;
- різних версій мов;
- навчальних середовищ;
- reproducible development;
- командної роботи.; Краще використовувати:
переважні аспекти:
Docker дуже часто застосовується в CI/CD.; Вони корисні для:
Docker Hub застосовується для: </syntaxhighlight> Типові network modes:
істотно: Dockerfile має бути відтворюваним.; Контейнер із доступом до Docker socket часто фактично отримує контроль над host.; * використовувати `.dockerignore`;
- не зберігати secrets в image;
- не використовувати `latest` у production без контролю;
- робити multi-stage builds;
- запускати бізнес-процес від non-root user;
- мінімізувати base image;
- оновлювати base images;
- сканувати images;
- використовувати healthchecks;
- писати logs у stdout/stderr;
- використовувати volumes для persistent data;
- обмежувати resources;
- не монтувати Docker socket без потреби;
- pin versions або digests;
- використовувати CI/CD для build і push;
- документувати Compose setup;
- видаляти непотрібні images і volumes обережно.; * Docker Engine;
- Docker CLI;
- Docker Desktop;
- Docker Compose;
- Docker Hub;
- Docker Scout;
- Docker Hardened Images;
- commercial services.; Для реального використання потрібно розрізняти open source компоненти, desktop-продукти, hosted services і commercial features.;
postgres:18
Docker і ліцензії
Підказка: найкращий перший Docker-сценарій — підняти локальні залежності проєкту через Compose: базу, кеш і застосунок.; * services;
- replicated containers;
- overlay networks;
- rolling updates;
- secrets;
- configs;
- простіших cluster deployments.;
Приклад: `.dockerignore` виключає файли з build context.; .; {| class="wikitable"
Приклад простого Docker Compose
docker info
Docker і Podman
Deploy to staging
BuildKit — сучасний backend для збірки Docker images.; FROM alpine:3.22 EXPOSE 3000 USER app
nginx:1.27-alpine
Небезпека: найболючіша помилка Docker-початківця — видалити контейнер із важливими даними й тільки потім дізнатися, що volume не був налаштований.; істотно: `EXPOSE` у Dockerfile документує порт, але не завжди відкриває його назовні.; * Dockerfile описує не тільки файли image, а й startup behavior контейнера.; Це комфортно, але ризиково.; * Docker Documentation.;</syntaxhighlight>
Integration tests
docker run -d \ Docker image tag — це людська назва версії, як ілюстрація: Docker став одним із головних інструментів сучасного DevOps, cloud-native розробки, microservices, CI/CD і локальних середовищ розробки.; :contentReference [oaicite:2]{index=2}
CI/CD
Цікаві факти про Docker
істотно: не кожен image у registry є собою безпечним або офіційним.; Висновок: Docker має найширше developer adoption, а Podman часто цікавий там, де важливий daemonless і rootless Linux-підхід.; * Docker reference documentation.;== Docker і мікросервіси ==
- production orchestration;
- multi-node clusters;
- service discovery;
- autoscaling;
- complex deployments;
- cloud-native platforms.; app:
- secret manager;
- Docker secrets у Swarm-сценаріях;
- Kubernetes Secrets із додатковим захистом;
- cloud secret managers;
- BuildKit secrets для build-time secrets;
- least privilege credentials.; RUN npm ci --omit=dev
--name db \
Deploy to production
dist
Краще: Приклад небезпечного запуску:
web:
- локальних dev environments;
- multi-service apps;
- test stacks;
- databases;
- queues;
- cache;
- reverse proxy;
- small deployments у частині сценаріїв.; Він знаходить відомі проблеми, але не замінює code review, тестування й threat modeling.; app:
переважні аспекти для моноліту: Приклад:
Практична роль: Docker CLI — це центральний інструмент розробника для швидкої роботи з контейнерами.; Приклад:
- однакове dev/test/prod середовище;
- оперативно піднімати залежності;
- пакувати застосунок із dependencies;
- запускати integration tests;
- використовувати CI/CD;
- створювати microservices;
- запускати локальний PostgreSQL або Redis;
- робити reproducible builds;
- деплоїти container images;
- працювати з Kubernetes;
- спростити onboarding;
- ізолювати toolchains.; image: postgres:18
Docker Image — це шаблон, з якого запускаються контейнери.; До Docker контейнеризація вже існувала у світі Linux забезпечується через Docker не винайшов саму ідею контейнерів, але зробив її масовою; додатково реалізовано але була складнішою, менш зручною й не мала такого простого developer experience.; * Dockerfile reference.; POSTGRES_USER: app
Registry зберігає:
docker pull nginx:alpine
Практична роль: у контейнерному світі лог краще сприймати як потік подій, який забирає зовнішня платформа логування.; COPY .;== Цікавий факт == docker run -p 8080:80 nginx:alpine WORKDIR /src Потрібно контролювати: Приклад:
- db
Docker і віртуальні машини
Висновок
Практична роль: Docker network надає можливість контейнерам спілкуватися між собою без ручного прописування IP-адрес.; !; Run checks
Docker зазвичай фокусується на application containers.;</syntaxhighlight>
CMD wget -qO- http://localhost:3000/health || exit 1
* застосунок дуже простий і не має складних dependencies;
* потрібна повна VM-ізоляція;
* потрібна GUI-heavy desktop application без спеціальної підготовки;
* команда не готова вчити container basics;
* production storage не продуманий;
* потрібно запускати системні сервіси як у повній ОС;
* security policy забороняє Docker daemon;
* потрібна дуже проста static deployment без runtime;
* проблему можна вирішити пакетним менеджером або single binary.;
| ; Приклад:
</syntaxhighlight> <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Типові помилки початківців ==
'''Проста аналогія:''' контейнер — це не цілий будинок, а окрема кімната з потрібними інструментами, яка ділить фундамент із будівлею.; '''Практична роль:''' запуск від non-root user зменшує ризики, якщо застосунок або dependency має вразливість.; '''Головне правило:''' хороший Docker-проєкт має маленький image, зрозумілий Dockerfile, безпечні secrets, reproducible build і чіткий шлях до deployment.; db:
* database passwords;
* API keys;
* tokens;
* private keys;
* certificates;
* cloud credentials.; Docker Engine має client-server архітектуру.; !; Docker
== Приклад безпечнішого Dockerfile-фрагмента ==
Docker-проєкти часто працюють із секретами:
Docker CLI застосовується для:
.env
'''Docker Desktop''' — це застосунок для Windows, macOS і Linux, який спрощує використання Docker на робочому комп’ютері.; FROM python:3.13-slim
<syntaxhighlight lang="dockerfile">
FROM node:22-alpine
'''Docker CLI''' — command-line інтерфейс для роботи з Docker.; docker rm container_name
* однакове середовище;
* простіший deploy;
* isolation dependencies;
* rollback через image tag;
* CI/CD;
* локальна розробка програмного забезпечення;
* staging parity;
* менше “works on my machine”.; Docker Engine version 29 є собою актуальною гілкою release notes, у якій Docker публікує зміни, known issues і fixes.;=== Dev container ===
== Docker у production ==
'''Docker Swarm''' — вбудований у Docker підхід до orchestration, який надає можливість керувати кластером Docker nodes.;</div>
Погані практики:
my-app:2026-05-09
Image містить:
image: redis:latest
</div>
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Приклад простого Dockerfile для Python ==
* запуску контейнерів;
* збірки образів;
* перегляду логів;
* керування volumes;
* керування networks;
* роботи з registry;
* debugging;
* автоматизації;
* CI/CD.; '''Docker''' — це одна з найважливіших платформ контейнеризації для сучасної розробки.; :contentReference [oaicite:4]{index=4}
'''істотно:''' Docker Swarm простіший за Kubernetes, але має меншу ecosystem і менше поширення в сучасному cloud-native production.; .; * Docker Compose file reference.; Podman
build: .; Для Compose сервіси в одній мережі можуть звертатися один до одного за service name.; Багато container images за замовчуванням запускають бізнес-процес від root.;<syntaxhighlight lang="yaml">
Але Docker ecosystem ширший за Docker Engine:
environment:
COPY requirements.txt .; '''Практична роль:''' BuildKit робить Docker builds швидшими, безпечнішими й краще придатними для CI/CD.; *.log
<syntaxhighlight lang="bash">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
* менших build contexts;
* швидших builds;
* захисту secrets;
* чистіших images;
* уникнення випадкового копіювання зайвого.; Критерій
<syntaxhighlight lang="yaml">
Для production потрібно уважно продумати:
redis:
- "3000:3000"
</div>
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
</div>
docker logs app
== Registry ==
* порт 8080 на host;
* перенаправляється в порт 80 контейнера.; Він легший, швидше стартує й використовує менше ресурсів, але має іншу модель ізоляції.; Це спосіб зробити середовище застосунку відтворюваним, переносимим і керованим.; environment:
POSTGRES_PASSWORD: secret depends_on: розробників.; Virtual machine
docker build -t my-app .; :contentReference [oaicite:3]{index=3}
WORKDIR /app
== Bind mounts ==
WORKDIR /app
docker run hello-world
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Docker часто застосовують, коли потрібно для створення container images, які потім запускаються в Kubernetes.; |-
| ключовий фокус
| Application containers
| System containers
|-
| Типовий image
| Один застосунок або сервіс
| Ближче до повної Linux-системи
|-
| Developer workflow
| Dockerfile, images, registry
| Більш системний контейнерний підхід
|}
<syntaxhighlight lang="dockerfile">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>
DATABASE_URL: postgres://app:secret@db:5432/appdb
Для production істотно:
<syntaxhighlight lang="bash">
* base images;
* vulnerability scanning;
* non-root users;
* capabilities;
* seccomp;
* AppArmor або SELinux;
* read-only filesystem;
* secrets;
* network exposure;
* mounted volumes;
* Docker socket;
* image provenance;
* supply chain;
* registry access;
* updates.; '''Практична порада:''' якщо застосунку не потрібен root, не запускайте його від root.; Для важливих даних потрібні volumes, backups і перевірений restore.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Приклад:
'''істотно:''' Docker Engine і Docker Desktop — не одне й те саме.; * images;
* tags;
* digests;
* layers;
* metadata;
* signatures у відповідних сценаріях;
* vulnerability scan results у частині платформ.; * Docker overview.; Digest — це content-addressed ідентифікатор image.; '''Проста аналогія:''' multi-stage build — це як приготувати їжу на кухні, але в коробку покласти тільки готову страву, а не всю кухню.; * швидші builds;
* кращий cache;
* parallel build steps;
* secrets під час build;
* SSH forwarding;
* multi-platform builds;
* better output;
* advanced Dockerfile features;
* buildx.;== Dev containers ==
</div>
Scan image
'''Podman''' — альтернатива Docker для запуску контейнерів, популярна в Linux-середовищах.; * reproducible environments;
* швидкий запуск контейнерів;
* ізоляція залежностей;
* Dockerfile як infrastructure-as-code;
* Docker Compose для локальних stacks;
* велика ecosystem;
* Docker Hub і registries;
* CI/CD-friendly workflow;
* multi-stage builds;
* BuildKit;
* простіший onboarding;
* зручність для microservices;
* переносимість між середовищами;
* менше ручної інсталяції на сервері;
* зручність для тестування.; :contentReference [oaicite:6]{index=6}
'''Практична порада:''' Docker варто обирати, коли проблема звучить як “нам потрібне однакове середовище для запуску застосунку”.;
Code push істотно: Docker полегшує мікросервіси, але не робить distributed systems простими.; - postgres_data:/var/lib/postgresql/data build: .; Розробник запускає застосунок, PostgreSQL і Redis через Docker Compose, не встановлюючи всі залежності напряму в систему.; EXPOSE 8000 BuildKitdb: '''Docker volume''' — механізм для збереження даних поза життєвим циклом контейнера.; Docker Engine складається з:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>
docker run --memory=512m --cpus=1.0 my-app:1.0
* локальної розробки;
* live reload;
* тестування;
* доступу до локальних файлів;
* dev containers;
* build tasks.; .; У production його потрібно уникати, якщо немає чіткої й перевіреної причини.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''Практична роль:''' Compose надає можливість підняти цілий маленький “світ застосунку” однією командою.; Приклад:
<syntaxhighlight lang="dockerfile">
Це означає:
Команда описує середовище розробки в контейнері, щоб усі мали однакові версії інструментів.; * Docker Hub documentation.; '''Помилка:''' думати, що Docker автономно робить застосунок безпечним, масштабованим і production-ready.; COPY package*.json ./
Приклад:
COPY package*.json ./
* створити non-root user;
* використовувати `USER`;
* мінімізувати capabilities;
* не запускати privileged container;
* не монтувати host filesystem без потреби;
* використовувати read-only root filesystem у частині сценаріїв.; Офіційна довідка Docker описує Dockerfile як файл, що визначає вміст і startup behavior одного контейнера.;<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
Registry має змогу бути:
Рекомендовано:
'''Цікавий факт:''' Docker не змушує переходити на мікросервіси.; services:
Kubernetes додає:
Воно корисне для:
'''істотно:''' для production краще додати non-root user, healthcheck, точні dependency versions і не копіювати зайві файли.;</div>
volumes:
* orchestration;
* monitoring;
* logging;
* backups;
* secrets;
* image scanning;
* healthchecks;
* restart policies;
* resource limits;
* network policies;
* storage;
* updates;
* rollback;
* registry availability;
* base image maintenance.; Compose зручний для локальної розробки, де застосунку потрібні кілька сервісів.;== Docker Compose ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Docker logs ==
</div>
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Приклад:
<syntaxhighlight lang="bash">
'''Docker Compose''' — інструмент для опису й запуску multi-container applications.; EXPOSE 3000
'''Практична порада:''' без resource limits один контейнер має змогу з’їсти більше пам’яті або CPU, ніж ви очікували.; Docker надає можливість відокремлювати застосунки від інфраструктури, щоб швидше доставляти програмне забезпечення.;<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
== Tags і digests ==
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''Практична роль:''' dev container сприяє новому розробнику стартувати не за день налаштувань, а за кілька команд.; .;== Docker і Kubernetes ==
переважні аспекти:
Порти дозволяють відкрити сервіс контейнера назовні.; docker run -e NODE_ENV=production -e PORT=3000 my-app:1.0
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
COPY .;== Хороші практики Docker ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Docker-контейнери й virtual machines вирішують схожі, але різні задачі.;== Volumes ==
Docker краще для:
docker run --rm -v "$PWD":/app -w /app node:22-alpine npm test
== Environment variables ==
'''Container registry''' — це сховище для container images.; DATABASE_URL: postgres://app:secret@db:5432/appdb
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
COPY .;<syntaxhighlight lang="dockerfile">
</div>
RUN pip install --no-cache-dir -r requirements.txt
== Docker Desktop ==
Environment variables часто використовують для конфігурації контейнерів.; coverage
docker logs -f app
'''Критично:''' база даних у контейнері — це нормально, але інформаційні дані мають жити не “в контейнері”, а в правильно керованому storage з backup.;</div>
Сьогодні Kubernetes значно популярніший для великих production-сценаріїв, але Swarm має змогу бути простішим для невеликих Docker-native кластерів.; Healthcheck корисний для:
COPY --from=build /src/app /app/app
== Privileged containers ==
Це має змогу бути потрібно для деяких low-level або lab-сценаріїв, але в production зазвичай небажано.; Він дуже сильний у відтворюваності, пакуванні, ізоляції залежностей і developer experience, але потребує правильних практик: `.dockerignore`, non-root users, volumes для даних, image scanning, secrets management, healthchecks, resource limits і продуманий deployment.; '''істотно:''' healthcheck має перевіряти реальну готовність сервісу, а не без ускладнень факт, що бізнес-процес ще не завершився.; services:
'''істотно:''' bind mount дає контейнеру доступ до host-файлів.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
ports:
</div>
</div>
Docker часто використовують у microservices architecture.;=== Локальна розробка програмного забезпечення web app === docker volume create pgdata Добрі сценарії: Головна перевага: Docker робить середовище застосунку частиною самого проєкту, а не усною інструкцією для адміністратора.; істотно: image scanning не гарантує безпеку.; docker run -p 8080:80 nginx:latest
docker pull nginx:latest істотно: контейнеризація не замінює production-архітектуру.; Docker container RUN go build -o app ./cmd/app Приклад: CMD ["node", "server.js"] == Безпека Docker ==
== Загальний характеристика ==
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
</div>
<syntaxhighlight lang="text">
!; - db_data:/var/lib/postgresql/data
Build Docker image
Docker Hub — популярний registry для Docker images.;== Secrets ==
docker ps
Container image scanning шукає відомі вразливості в base image і packages.;
Критично: privileged container сильно зменшує ізоляцію.; У документації встановлення Docker Engine згадується Apache License, Version 2.0.; Основні переважні аспекти Docker: </syntaxhighlight> - "8000:8000" POSTGRES_DB: appdb Контейнер не є собою повною віртуальною машиною.;== Ports == CI збирає Docker image, запускає тести, сканує image і пушить його в registry.;</syntaxhighlight> Критично: якщо контейнер видалити, його writable layer має змогу зникнути.; ports:
CI pipeline
docker pull postgres:18 істотно: ліцензування Docker Engine і умови Docker Desktop або Docker Hub можуть відрізнятися.; `.dockerignore` дуже важливий.; Саме ця простота зробила контейнери звичним інструментом навіть для невеликих команд.; docker buildx build --platform linux/amd64,linux/arm64 -t my-app:1.0 .; Основна ідея: Docker пакує застосунок і його залежності в контейнер, щоб він запускався передбачувано, а не “тільки на моєму комп’ютері”.; * локальної розробки;
|
; Критерій
POSTGRES_PASSWORD: secret docker pull redis:latest Див.; додатковоКритично: secrets не варто бездумно зберігати в environment variables, особливо в shared environments.; * orchestration;
Критично: якщо `.env`, private keys або tokens потрапили в image layer, їх має змогу бути складно в цілому прибрати з історії image.; Docker Desktop зазвичай охоплює: Коли Docker має змогу бути невдалим вибором</syntaxhighlight> Приклад: Приклад: RUN addgroup -S app && adduser -S app -G app
У цьому прикладі `app` має змогу звертатися до `redis` за hostname `redis`.;== Multi-stage builds == - redis </syntaxhighlight> == Джерела ==
== Resource limits ==
environment:
'''Перевага:''' Docker надає можливість описати середовище застосунку як код, а не як список ручних команд на сервері.; :contentReference [oaicite:7]{index=7}
* Docker Compose починався як зручний інструмент для локальних multi-container stacks, але став стандартною частиною багатьох dev workflows.; Але мікросервіси додають:
== Healthcheck ==
CMD ["./app"]
CMD ["node", "server.js"]
!;== Image scanning ==
== Docker і моноліт ==
Приклад:
</div>
== Docker Hub ==
== Коли варто використовувати Docker ==
* OS packages;
* language dependencies;
* CVE;
* outdated libraries;
* risky images;
* supply chain;
* policy compliance;
* SBOM.;
RUN npm ci --omit=dev Dev container — контейнеризоване середовище розробки.; RUN addgroup -S app && adduser -S app -G app <syntaxhighlight lang="text"> Dockerfile — це файл інструкцій для збірки Docker image.; * Контейнеризація
Swarm має змогу використовуватися для: |
|---|