В последните години контейнеризацията промени начина, по който разработчиците и системните администратори работят с приложения. Ако преди разчитахме на виртуални машини, днес Docker и Docker Compose са стандарт в DevOps и модерната инфраструктура. В тази статия ще ви представя подробно ръководство за Docker и Docker Compose – от историята и основите до инсталация, статистика и по-напреднали практики.
История на Docker и Docker Compose
Docker се появява през 2013 г., създаден от компанията dotCloud, която по-късно се преименува на Docker Inc. Идеята е проста: да се използват Linux контейнери, но с по-лесен и достъпен интерфейс за разработчици.
Технологията бързо набира популярност, защото решава проблемите с различията в средите. През 2014 г. Docker става с отворен код и започва бурно развитие.
Docker Compose е представен през 2015 г. от компанията Orchard, която е придобита от Docker Inc. Compose дава възможност за управление на множество контейнери чрез един YAML файл. Това се оказва ключово за по-сложните проекти.
Днес Docker е стандарт в индустрията, а Compose е предпочитан инструмент за локална разработка и малки до средни среди.
Статистика за използването на Docker
- Според проучване на Stack Overflow Developer Survey 2024, Docker е сред най-обичаните технологии, използван от над 50% от професионалните разработчици.
- GitHub отчита милиони публични Docker образи, достъпни за изтегляне.
- Големи компании като Netflix, Spotify и PayPal използват Docker в продукционни среди.
- Над 70% от организациите, които внедряват DevOps практики, използват контейнеризация, като Docker е лидер.
Тези данни показват, че Docker не е временна мода, а стабилна и трайна технология.
Какво е Docker?
Docker е платформа за контейнеризация. Тя позволява приложенията да се стартират в изолирана среда, наречена контейнер. Контейнерът съдържа всичко необходимо – код, зависимости, библиотеки, конфигурации.
Предимството е, че приложението работи по един и същи начин навсякъде – независимо от операционната система или сървъра. Това решава проблема „при мен работи, а при теб не“.
Основни понятия в Docker
- Image (образ) – шаблон за контейнер. В него са описани всички зависимости и конфигурации.
- Container (контейнер) – работеща инстанция на образа.
- Dockerfile – текстов файл с инструкции как да се изгради образ.
- Registry – хранилище за образи. Най-известното е Docker Hub.
Пример: ако образът е рецепта, то контейнерът е ястието, приготвено по тази рецепта.
Защо Docker е толкова популярен?
- Лесно разгръщане – създавате образ веднъж и го стартирате навсякъде.
- Скалируемост – можете да стартирате десетки или стотици контейнери без усилие.
- Бързина – контейнерите са по-леки от виртуалните машини.
- Изолираност – всеки контейнер работи самостоятелно.
Какво е Docker Compose?
Docker Compose е инструмент за управление на множество контейнери. Вместо да стартирате всеки контейнер поотделно, Compose използва YAML файл, който описва цялата инфраструктура.
Така можете да стартирате уеб сървър, база данни и кеш сървър с една команда.
Основни понятия в Docker Compose
- docker-compose.yml – файлът, в който описвате услугите.
- Service (услуга) – контейнер или група от контейнери.
- Network (мрежа) – начин контейнерите да комуникират помежду си.
- Volume (том) – място за съхранение на данни, което остава дори след спиране на контейнера.
Инсталиране и настройка на Docker
Инсталацията на Docker е лесна. На Linux можете да използвате официалния инсталационен скрипт:
curl -fsSL https://get.docker.com -o install-docker.sh
sh install-docker.sh
След това проверете дали Docker е инсталиран:
docker --version
docker compose version
📌 Важно: старото docker-compose
(с тире) е отделен бинарен файл и вече се смята за „legacy“. Новото docker compose
(без тире) е официалният и поддържан начин.
За да стартирате Docker без sudo
, добавете потребителя си в групата docker:
sudo usermod -aG docker $USER
Излезте и влезте отново в системата.
С това вече имате готова среда за работа.
Пример с WordPress и MySQL
Нека разгледаме реален пример:
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: example
volumes:
- ./wordpress:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
С една команда docker compose up -d
получаваме работещ WordPress сайт с MySQL база данни.
Полезни команди в Docker и Compose
Docker:
docker ps
– показва активните контейнери.docker images
– списък с наличните образи.docker exec -it <container> bash
– достъп до контейнера.
Docker Compose:
docker compose up -d
– стартира контейнерите във фонов режим.docker compose down
– спира и премахва контейнерите.docker compose logs
– показва логове.
Практически съвети
- Използвайте .env файл – така лесно сменяте пароли и настройки.
- Избягвайте
latest
таг – по-добре е да фиксирате конкретна версия. - Следете ресурсите – контейнерите могат да натоварят системата.
- Редовно чистете неизползваните образи –
docker system prune
.
Разлики между Docker и виртуални машини
- Виртуалните машини стартират цяла операционна система.
- Контейнерите използват ядрото на хост системата.
- ВМ са по-тежки и бавни за стартиране.
- Контейнерите са по-леки и по-бързи.
Пример: Ако ВМ е цяла къща, контейнерът е апартамент в жилищна сграда.
Безопасност при работа с Docker
- Не използвайте root потребител в контейнерите.
- Редовно обновявайте образите.
- Ограничете достъпа до Docker API.
- Използвайте официални образи, когато е възможно.
Кога да използвате Docker Compose?
Compose е чудесен за локална разработка, тестване и малки проекти. Ако имате сложна система с много услуги, Compose ви спестява десетки команди.
За по-големи среди и продукция често се използват Kubernetes или Docker Swarm.
Често срещани грешки и как да ги избегнем
- „Connection refused“ при база данни – проверете дали услугата е стартирала.
- „Image not found“ – уверете се, че образът съществува или го билднете.
- Конфликти на портове – сменете портовете в docker-compose.yml.
Бъдещето на Docker и контейнеризацията
Docker вече е стандарт в индустрията. Дори да използвате Kubernetes, Docker често е първата стъпка. Контейнеризацията ще остане основна технология за години напред.
Заключение
Docker и Docker Compose улесняват разработката, тестването и разгръщането на приложения. Те спестяват време, ресурси и нерви. С няколко команди можете да изградите среда, която преди е изисквала часове.
Ако искате да сте в крак с модерния DevOps свят, Docker е задължителен инструмент. Docker Compose пък е вашият верен помощник за управление на сложни среди.
Въпрос към вас
Използвате ли вече Docker във вашите проекти? Споделете опита си – ще ми е интересно да науча какви решения сте изградили с тази технология.