Docker практическо ръководство

Docker практическо ръководство: Започни, разбери и използвай като професионалист
Docker е една от най-популярните технологии в света на софтуерната разработка и системната администрация. Той предоставя мощен начин за създаване, разгръщане и управление на приложения в изолирана среда, наречена контейнер. В тази статия ще ти покажем какво е Docker, как работи и как можеш да го използваш ефективно в реални проекти.
🔹 Какво е Docker?
Docker е платформа с отворен код, която автоматизира изграждането, пускането и управлението на приложения в контейнери. Контейнерите съдържат всичко необходимо за изпълнението на дадено приложение: код, зависимости, библиотеки и конфигурационни файлове.
С други думи, Docker гарантира, че „работи на моята машина“ означава ще работи навсякъде.
🔹 Каква е ползата от Docker?
Ето защо милиони разработчици и системни администратори обичат Docker:
- ✅ Лека алтернатива на виртуалните машини
- ✅ Бързо разгръщане на приложения
- ✅ Консистентна среда за разработка и продукция
- ✅ Лесно мащабиране и изолация на услуги
- ✅ Интеграция с CI/CD системи
🔹 Контейнери срещу виртуални машини
Характеристика | Контейнери (Docker) | Виртуални машини (VMs) |
---|---|---|
Стартиране | Милисекунди | Минути |
Използване на ресурси | Минимално | Значително |
Изолация | На ниво процес | На ниво ОС |
Преносимост | Висока | Ограничена |
Контейнерите споделят ядрото на операционната система, докато VMs се нуждаят от собствена ОС. Това ги прави по-бързи и по-ефективни.
🔹 Инсталиране на Docker
За Linux (Ubuntu/Mint/Debian)
sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo systemctl start docker
Добави текущия потребител към групата docker
:
sudo usermod -aG docker $USER
След това рестартирай сесията.
За Windows и macOS
- Посети https://www.docker.com/products/docker-desktop
- Изтегли и инсталирай Docker Desktop
- Следвай указанията и включи WSL2 (за Windows)
🔹 Първи стъпки с Docker
Нека разгледаме основните команди:
docker --version # Проверка на версията
docker info # Подробности за системата
docker ps # Списък с активни контейнери
docker images # Списък с локални изображения
🔹 Изтегляне и стартиране на контейнер
Пример с Nginx:
docker run -d -p 8080:80 nginx
Това стартира Nginx в контейнер на порт 8080.
-d
: фонов режим-p 8080:80
: пренасочване на порт 80 от контейнера към порт 8080 на хоста
Провери:
curl http://localhost:8080
🔹 Управление на контейнери
Някои полезни команди:
docker ps -a # Всички контейнери
docker stop <container_id> # Спира контейнер
docker start <container_id> # Стартира спрян контейнер
docker rm <container_id> # Изтрива контейнер
🔹 Управление на изображения (images)
docker pull alpine # Изтегля образ
docker rmi alpine # Изтрива образ
docker build -t myapp . # Създава образ от Dockerfile
🔹 Какво е Dockerfile?
Dockerfile
е текстов файл с инструкции как да се изгради Docker образ. Пример:
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
Създаване на образ:
docker build -t my-node-app .
Стартиране:
docker run -p 3000:3000 my-node-app
🔹 Запазване и прехвърляне на контейнери
Създаване на архив от контейнер:
docker export <container_id> > app.tar
Импортиране:
cat app.tar | docker import - my-app
За образи:
docker save my-image > image.tar
docker load < image.tar
🔹 Docker Compose – мултиконтейнерно приложение
С docker-compose.yml
можеш да управляваш множество услуги като едно цяло. Пример:
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: secret
Стартиране:
docker-compose up -d
Спиране:
docker-compose down
🔹 Работа с обеми (volumes)
Обемите съхраняват данни извън контейнера. Това е важно за бази данни и конфигурации.
docker volume create myvolume
docker run -v myvolume:/data alpine
Локална директория:
docker run -v $(pwd)/html:/usr/share/nginx/html nginx
🔹 Мрежи в Docker
Docker създава изолирана мрежа между контейнерите по подразбиране. Можеш също да създаваш собствени мрежи:
docker network create mynetwork
docker run --network=mynetwork --name db mariadb
docker run --network=mynetwork --name app my-app
🔹 Най-добри практики при използване на Docker
- Използвай малки образи – например
alpine
. - Не слагай чувствителни данни в Dockerfile.
- Почистване на неактивни ресурси:
docker system prune
- Използвай
.dockerignore
файл, подобен на.gitignore
, за да изключиш ненужни файлове. - Следи логовете:
docker logs <container_id>
- Минимизирай слоевете в Dockerfile – комбинирай
RUN
команди.
🔹 CI/CD и Docker
Docker е перфектен за автоматизация. Ето примерен GitHub Actions .yml
:
name: Build Docker Image
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t myapp:latest .
🔹 Docker и Kubernetes
Следващата стъпка е оркестрация. Kubernetes е инструмент за автоматизирано разгръщане, мащабиране и управление на контейнеризирани приложения.
Docker все още се използва за създаване на образи, но Kubernetes поема управлението.
🔹 Чести грешки и как да ги избегнем
Проблем | Причина | Решение |
---|---|---|
Permission denied | Липсващи права | Използвай sudo или добави потребителя в група docker |
Port already in use | Порт е зает | Използвай друг порт |
Image not found | Грешка в името | Провери и изтегли с docker pull |
Container keeps restarting | Грешка в приложението | Провери логовете с docker logs |
🔹 Полезни команди за напреднали
docker stats # Показва ресурсите в реално време
docker inspect <container_id> # Подробна информация
docker exec -it <id> sh # Отваря shell вътре в контейнер
docker tag myimage user/myimage # Преименува образ
docker push user/myimage # Качва образ в Docker Hub
🔹 Заключение
Docker е инструмент, който промени начина, по който разработваме и разгръщаме приложения. Той дава гъвкавост, скорост и повторяемост – ценности, които всяка модерна организация търси. Независимо дали си разработчик, DevOps инженер или просто ентусиаст, Docker ще ти помогне да работиш по-умно и по-ефективно.
Не е нужно да знаеш всичко веднага. Просто започни с основите, експериментирай и постепенно ще разбереш силата на контейнеризацията.
📌 Допълнителни ресурси
- 📘 Официална документация
- 📹 Docker – YouTube канал
- 📚 Книги: Docker Deep Dive от Nigel Poulton
Ако тази статия ти е била полезна, сподели я с колеги или я запази за по-късно. Технологиите се развиват, но основите на Docker ще останат актуални още дълго време. 🚀
Готов ли си да изграждаш приложения с Docker? Не се колебай – светът на контейнерите те очаква!
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut