Какво се случва след извършване на промени в изображението?
sobes.tech AI
Отговор от AI
След като направите промени в образа, самият образ става нова, отделна версия. При последващо стартиране на контейнер, базиран на този образ, контейнерът ще използва променената версия, отразяваща приложените промени. Старите контейнери, стартирани на базата на предишни версии на образа, ще запазят състоянието си и ще работят със старата версия, докато не бъдат спрени и рестартирани на базата на новия образ. С други думи, промените в образа не влияят на вече стартираните контейнери.
Нека разгледаме жизнения цикъл с пример с Docker:
-
Сглобяване на Dockerfile: Правите промени в
Dockerfile.# Актуализиран Dockerfile FROM ubuntu:latest RUN apt-get update && apt-get install -y nginx COPY index.html /var/www/html/ EXPOSE 80 -
Сглобяване на образ: Изпълнявате командата за изграждане.
# Създаване на нова версия на образа docker build -t my-webserver:v2 .Docker създава нов слой с направените промени върху предишните слоеве.
my-webserver:v2сега сочи към новия образ. -
Стартиране на нов контейнер: Стартирате нов контейнер.
# Стартиране на контейнер на базата на новата версия на образа docker run -d -p 8080:80 --name webserver_v2 my-webserver:v2Този контейнер ще използва новата версия на образа.
-
Съществуващи контейнери: Контейнерите, стартирани на базата например на
my-webserver:v1, ще продължат да работят със старите данни и конфигурации.
| Действие | Резултат | Влияние върху старите контейнери |
|---|---|---|
| Промяна в Dockerfile | Кодът за дефиниране на образа се променя. | Не |
| Сглобяване на образ (docker build) | Създава се нов образ с уникален ID. | Не |
| Тагване на образ (docker tag) | Придава се алиас на новия образ. | Не |
| Стартиране на нов контейнер | Новият контейнер използва новия образ. | Не |
| Рестартиране на стар контейнер | Старият контейнер се стартира на стария образ. | Не (по подразбиране) |
| Изтриване на стар образ | Образът се изтрива, но контейнерите на базата му остават. | Не (контейнерите остават) |
Ако е необходимо да актуализирате работещите контейнери към новата версия на образа, трябва да спрете и изтриете старите контейнери, а след това да стартирате нови на базата на актуализирания образ. В производствени условия за управление на такива актуализации се използват оркестратори като Kubernetes, Docker Swarm или инструменти като Docker Compose, които реализират стратегии за rolling updates.