Sobes.tech
Middle

Какво се случва след извършване на промени в изображението?

sobes.tech AI

Отговор от AI

След като направите промени в образа, самият образ става нова, отделна версия. При последващо стартиране на контейнер, базиран на този образ, контейнерът ще използва променената версия, отразяваща приложените промени. Старите контейнери, стартирани на базата на предишни версии на образа, ще запазят състоянието си и ще работят със старата версия, докато не бъдат спрени и рестартирани на базата на новия образ. С други думи, промените в образа не влияят на вече стартираните контейнери.

Нека разгледаме жизнения цикъл с пример с Docker:

  1. Сглобяване на Dockerfile: Правите промени в Dockerfile.

    # Актуализиран Dockerfile
    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y nginx
    COPY index.html /var/www/html/
    EXPOSE 80
    
  2. Сглобяване на образ: Изпълнявате командата за изграждане.

    # Създаване на нова версия на образа
    docker build -t my-webserver:v2 .
    

    Docker създава нов слой с направените промени върху предишните слоеве. my-webserver:v2 сега сочи към новия образ.

  3. Стартиране на нов контейнер: Стартирате нов контейнер.

    # Стартиране на контейнер на базата на новата версия на образа
    docker run -d -p 8080:80 --name webserver_v2 my-webserver:v2
    

    Този контейнер ще използва новата версия на образа.

  4. Съществуващи контейнери: Контейнерите, стартирани на базата например на my-webserver:v1, ще продължат да работят със старите данни и конфигурации.

Действие Резултат Влияние върху старите контейнери
Промяна в Dockerfile Кодът за дефиниране на образа се променя. Не
Сглобяване на образ (docker build) Създава се нов образ с уникален ID. Не
Тагване на образ (docker tag) Придава се алиас на новия образ. Не
Стартиране на нов контейнер Новият контейнер използва новия образ. Не
Рестартиране на стар контейнер Старият контейнер се стартира на стария образ. Не (по подразбиране)
Изтриване на стар образ Образът се изтрива, но контейнерите на базата му остават. Не (контейнерите остават)

Ако е необходимо да актуализирате работещите контейнери към новата версия на образа, трябва да спрете и изтриете старите контейнери, а след това да стартирате нови на базата на актуализирания образ. В производствени условия за управление на такива актуализации се използват оркестратори като Kubernetes, Docker Swarm или инструменти като Docker Compose, които реализират стратегии за rolling updates.