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

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

След това рестартирай сесията.

📖 Прочетете още: Как да използвате docker exec за достъп и управление на контейнери

За Windows и macOS

  1. Посети https://www.docker.com/products/docker-desktop
  2. Изтегли и инсталирай Docker Desktop
  3. Следвай указанията и включи 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

  1. Използвай малки образи – например alpine.
  2. Не слагай чувствителни данни в Dockerfile.
  3. Почистване на неактивни ресурси:
docker system prune
  1. Използвай .dockerignore файл, подобен на .gitignore, за да изключиш ненужни файлове.
  2. Следи логовете:
docker logs <container_id>
  1. Минимизирай слоевете в 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 ще останат актуални още дълго време. 🚀


Готов ли си да изграждаш приложения с Docker? Не се колебай – светът на контейнерите те очаква!

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: