Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Създайте стабилен и лесен за управление контейнерен стек за минути – без главоболие и без объркване!
Docker Compose е мощен инструмент, който ви позволява да дефинирате и управлявате мултиконтейнерни приложения. Ако искате да стартирате уеб сървър, база данни и кеш система едновременно — Compose ще ви спести време и усилия.
Полза: Научавате как да създавате цял проект с една команда
Съдържание: Стъпка по стъпка ръководство с примери и обяснения
Стойност: Спестявате часове ръчно конфигуриране и настройка на контейнери
Docker Compose ви позволява да:
docker-compose up
📂 Пример:
services:
web:
image: nginx
db:
image: postgres
С този кратък код стартирате NGINX + PostgreSQL без да пишете дълги команди за всеки контейнер
За да следвате това ръководство, трябва да имате:
📁 Как изглежда структурата на един Docker Compose проект?
myproject/
│
├── docker-compose.yml ← Тук описвате всичко
├── .env ← (По избор) Променливи на средата
└── app/ ← Вашият код
docker-compose.yml
е сърцето на проекта. В него описвате кои контейнери ще участват, как комуникират помежду си, какви мрежи и томове използват и как се стартират.
Docker-Compose файлът е като рецепта за готвене. Всяка "съставка" (услуга) има своите инструкции.
version: '3.8'
services:
web:
image: php:8.2-apache
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: userpass
docker-compose.yml
:Fedyaversion: '3.8'
🔹 Определя версията на Docker Compose спецификацията.3.8
е стабилна и често използвана версия, съвместима с повечето Docker версии. Въпреки, че вече версията не се пише.
Fedyaservices:
🔹 Тук започва списъкът с услуги (контейнери), които ще бъдат дефинирани. В този случай имаме две:
web
– PHP + Apachedb
– MySQLweb
Fedya web:
image: php:8.2-apache
🔹 web
е името на услугата. Можете да го промените по желание (например frontend
).
🔹 image: php:8.2-apache
казва на Docker да използва официалния PHP образ, който включва Apache. Това е удобен начин да имате едновременно уеб сървър и интерпретатор за PHP.
Fedya ports:
- "8080:80"
🔹 Пренасочва порт 8080 на хоста към порт 80 в контейнера (Apache слуша на порт 80).
Пример: ако отворите http://localhost:8080
в браузъра, ще видите вашия уебсайт.
Fedya volumes:
- ./app:/var/www/html
🔹 Свързва локалната директория ./app
с директорията /var/www/html
в контейнера.
📌 Това означава, че всичко, което сложите в папка app
до docker-compose.yml
, ще бъде достъпно в уеб сървъра. Това е удобно за разработка – промените се отразяват веднага.
Fedya depends_on:
- db
🔹 depends_on
указва, че web
трябва да изчака да се стартира услугата db
(MySQL), преди да тръгне.
⚠️ Важно: Това не гарантира, че MySQL е готов за връзки – за това се ползват скриптове за „health check“ при нужда.
db
(MySQL)Fedya db:
image: mysql:8.0
🔹 Използва официалния образ на MySQL 8.0.
Fedya restart: always
🔹 Ако контейнерът падне или Docker се рестартира, той ще стартира отново автоматично.
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: userpass
Това са променливи на средата, които конфигурират базата данни:
MYSQL_ROOT_PASSWORD
: парола за root потребителя на MySQLMYSQL_DATABASE
: автоматично създаване на база с това имеMYSQL_USER
и MYSQL_PASSWORD
: създава се потребител с тези данни и достъп до тази база📌 На практика: ще имате база myapp
и потребител user:userpass
, който може да се свързва към нея.
Стартирайте проекта с:
Fedyadocker-compose up -d
🟢 Това ще:
📌 Отворете браузъра си:
http://localhost:8080 → ще видите phpinfo()
страницата.
Команда | Действие |
---|---|
docker-compose up -d | Стартира в background |
docker-compose down | Спира и премахва всичко |
docker-compose logs -f | Виж логовете на всички контейнери |
docker-compose exec web bash | Влиза в "web" контейнера с bash |
docker-compose ps | Показва текущите услуги |
С Docker Compose лесно тествате промени по кода. Просто редактирайте файловете в app/
– те са монтирани в контейнера чрез volumes
.
📦 Ако промените docker-compose.yml
, рестартирайте със:
Fedyadocker-compose down
docker-compose up -d
.env
файлМожете да държите чувствителни данни и конфигурации в .env
файл:
MYSQL_ROOT_PASSWORD=rootpass
MYSQL_DATABASE=myapp
MYSQL_USER=user
MYSQL_PASSWORD=userpass
И в docker-compose.yml
:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
...
📌 Предимство: Лесна промяна без докосване на основния YAML файл
Ето как може да изглежда по-сложен проект:
version: '3.8'
services:
frontend:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- backend
backend:
build: ./backend
ports:
- "3000:3000"
depends_on:
- mongo
mongo:
image: mongo:6
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
📦 Всеки слой комуникира с другия, без да излизат извън стека.
Когато приключите с тестването:
docker-compose down --volumes --remove-orphans
📌 Това ще премахне:
Контейнерите
Мрежите
Томовете (ако ги посочите)
📈 Сравнение: Docker CLI срещу Docker Compose
Действие Docker CLI командa Docker Compose
Стартиране на MySQL docker run … (дълга команда) docker-compose up
Свързване между контейнери Създаване на мрежа, link, IP Автоматично
Управление на томове Ръчно конфигуриране YAML структура
Добавяне на услуга Нов docker run и настройки Добавяне в services:
🧠 Извод: Compose прави сложните неща прости.
💡 Практически съвети
✅ Използвайте depends_on, за да управлявате стартирането по ред
✅ Монтирайте код с volumes, за да не билдвате всеки път
✅ Използвайте именувани мрежи и томове, за да запазите състоянието при рестартиране
✅ Винаги добавяйте .env файл, когато имате чувствителни настройки
🔐 Как да добавите потребителска защита?
Може да използвате NGINX или Traefik като reverse proxy с HTTP Basic Auth или SSL. Това излиза извън обхвата на тази статия, но Docker Compose лесно се комбинира с такива инструменти.
🧰 Инструменти, които работят с Compose
Portainer – уеб интерфейс за управление на стекове
Watchtower – автоматични обновления на контейнери
Docker Secrets – сигурно управление на пароли
VSCode + Remote Containers – разработка директно в контейнера
✅ Обобщение
🔎 Какво научихте 💡 Какво получихте
Как се пише docker-compose.yml Стъпка по стъпка инструкции и примери
Как се стартира стек С една команда docker-compose up -d
Как се управлява проект Лесно чрез CLI команди
Какво съдържа един проект Обяснение + практическа структура
Какво прави Compose по-добър Автоматизация, простота и мащабируемост
🧭 Следващи стъпки
Приложете примерите от статията на свой локален проект
Разширете стека си с Redis, Traefik или Elasticsearch
Споделете тази статия с колега – ще ви е благодарен! 🙌
📎 Полезни връзки
Официална документация
Docker Hub – Хранилище на образи
Play with Docker (онлайн среда)
🚀 Не забравяйте: С docker-compose изграждате мащабируеми, модулни и устойчиви проекти – само с един YAML файл!
Docker-Compose е незаменим инструмент за всеки разработчик. Той превръща сложната оркестрация на контейнери в проста задача с един файл и няколко команди.
Започнете с прости примери и постепенно добавяйте функционалности. С времето ще откриете, че Docker-Compose не само опростява работата ви, но и я прави по-надеждна и предсказуема.
Запомнете: добрият код е като добрата рецепта – ясен, лесен за следване и с отлични резултати всеки път! 👨💻✨
Успех с вашите Docker-Compose проекти! 🚀
Ако статията ви е била полезна – споделете я! 📤
Вашият следващ проект ще ви благодари! ❤️
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut