Yandex
Обновяване на предпочитанията за бисквитки

Инсталиране и използване на Docker Compose в Ubuntu 24.04

Докато активно използват Docker в своите проекти, много разработчици се сблъскват с проблема за създаване и управление на множество контейнери. Това е особено остро, когато цялата инфраструктура на проекта трябва да бъде мигрирана, мащабирана и надграждана.

На помощ ни идва инструментът за лесно управление на приложения с множество контейнери - Docker Compose.

Какво прави Docker Compose?

  1. Дава възможност да се опише цялата инфраструктура на приложението в един файл - docker-compose.yml;
  2. Управлява всички контейнери в проекта едновременно, като описва правилата и начина, по който контейнерите се свързват помежду си;
  3. Опростява внедряването на контейнери;
  4. Позволява всички контейнери да се пресъздават автоматично след извършване на промени в проекта.

Инсталиране на Docker Compose

От юли 2023 г. Docker Compose V1, използващ командата docker-compose, вече не се поддържа от разработчика. Вече не се издават актуализации. На нейно място е създадена втора версия на софтуера.
В тази статия ще използваме актуалната, към момента на писане на статията, версия на Docker Compose V2, въпреки че предишните флагове и аргументи са запазени, като самата команда трябва да изглежда по следния начин: 
docker composeВсички команди в тези инструкции се изпълняват като потребител root.
В тази статия ще разгледаме инсталирането на Docker Compose от официалното хранилище на Docker, включително добавянето на това хранилище в Ubuntu 24.04.

  1. Актуализиране на списъка с наличните пакети:
    apt update
  2. Инсталиране на свързаните пакети, които са ни необходими:
    apt install ca-certificates curl apt-transport-https software-properties-common
  3. Добавяне на GPG ключа на официалното хранилище на Docker:
    install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    chmod a+r /etc/apt/keyrings/docker.asc
  4. Добавяне на самото хранилище в системата:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
      tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. Повторно актуализиране на списъка с пакети и инсталиране на пакета docker-compose-plugin от новото ни хранилище на Docker:
    apt update
    apt install docker-compose-plugin
  6. Нека се уверим, че новата версия на Docker Compose е инсталирана. В момента на писане на тази статия тя е версия 2.33.1:
    docker composer version20250303_nPQaKF1E

Пример за използване на Docker Compose

За този пример нека създадем просто приложение на Golang, което извежда текст в браузър и проксира трафика към него чрез уеб сървъра Nginx.

Създаване на приложение

  1. Създайте директория на проекта и директория на приложението, отидете в директорията на приложението:
    mkdir -p ~/compose-example/app && cd ~/compose-example/app
  2. Създайте файла main.go:
    nano main.go
  3. Изграждане на най-простия уеб сървър на езика Go:
    package main

    import (
    "fmt"
    "net/http"
    )

    func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Привет, мир!")
    })  fmt.Println("Сервер запущен на порту 8080...")
    http.ListenAndServe(":8080", nil)
    }
  4. Създайте файл на Docker за нашето приложение:
    nano Dockerfile
  5. Попълнете го:
    # Използване на официалния образ на Golang
    FROM golang:1.21

    #Създаване на работна директория
    WORKDIR /app

    # Копиране на файловете на проекта
    COPY . .

    # Изграждане на приложението
    RUN go mod init app && go mod tidy && go build -o app

    # Стартиране на приложението
    CMD ["./app"]
  6. Приложението е готово. Нека да създадем минимална конфигурация на nginx, за да проксираме трафика към нашето приложение. Отидете в директорията на проекта и създайте файла nginx.conf:
    cd ~/compose-example && nano nginx.confНаписване на самата конфигурация:
    events {
        use          epoll;
        worker_connections  128;
    }

    http {
        server {
            listen 80;
            location / {
                proxy_pass http://compose-example-app:8080;
            }
        }
    }

Създаване на файла docker-compose.yml

В директорията на проекта, в която отидохме по-рано, създайте файл:
nano docker-compose.ymlСъдържание:
services:
  app:
    build: ./app
    container_name: compose-example-app
    restart: always

  nginx:
    image: nginx:alpine
    container_name: nginx_proxy
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

В блока services описваме контейнерите (услугите) на проекта, като в нашия случай те са два: app и nginx.
За контейнера app сме посочили:
  • build: ./app - контейнерът ще бъде изграден от Dockerfile в директорията ./app, която създадохме по-рано;
  • container_name е името на контейнера. Това е адресът, който сме посочили във файла nginx.conf като адрес за проксиране. Когато използвате Docker Compose, по подразбиране всички контейнери (услуги) се намират в една и съща виртуална мрежа и могат да се свързват помежду си чрез името на контейнера;
  • restart - автоматично рестартиране на контейнера при срив.

В случая с контейнера (услугата) nginx използваме готово изображение, както е посочено от параметъра image: nginx:alpine.  Също така посочваме порт 80 на нашия сървър към порт 80 на контейнера. Обърнете внимание, че не сме пренасочили никакви портове за услугата app, въпреки че самото ни приложение локално използва порт 8080. volumes ни позволяват да монтираме директория, в нашия случай файла nginx.conf, вътре в контейнера в режим само за четене (:ro). depends_on ще забави стартирането на услугата nginx до стартирането на услугата app.

Стартиране на Docker Compose

Това е проста команда за изграждане и стартиране на нашето приложение:
docker compose up --build -d
  • --build - възстановява образите преди стартиране (дори ако те вече съществуват);
  • -d - фонов режим.

Когато стартирате Docker Compose за първи път, той ще изтегли и изгради необходимите образи, което може да отнеме известно време. В резултат на това ще получите:
20250303_f9v5W7FZ

Можете да проверите нашето приложение, като просто отидете на http://localhost или по IP адреса на вашия сървър:
20250303_iURPyk8O

Полезни команди на Docker Compose

Ето някои от основните команди, които са ви необходими, за да свършите работата си:

docker compose down20250303_ZybNTQxo
Изтрива контейнерите на проекта. Образите не се изтриват.

docker compose stopСпира контейнерите.

docker compose startСтартира ги след спиране.
20250303_CiZRQd5n

docker compose pauseСпира контейнерите, без да променя състоянието им.

docker compose unpauseВъзобновява работата.
20250303_U0Fp8I7e

docker compose logsИзходни логове на контейнерите на проекта.
20250303_rk4ttt1t

В тази статия разгледахме най-простия вариант за инсталиране на Docker Compose от официалното хранилище на Docker, както и работата с него на примера на едно просто приложение. За повече информация препоръчваме да се обърнете към официалната документация на програмата.
03 Mar 2025, 14:26:57