Linux Labs

Контейнеры: Docker и compose / Ступень 5 из 11

Тома: данные переживают контейнер

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 7 · теория · 5 мин

Слой контейнера

Здесь — где контейнер хранит то, что пишет его процесс, и почему docker rm это удаляет.

Слои образа только читаются: из одного образа запускают много контейнеров, и ни один не может их поменять. Поэтому docker, создавая контейнер, кладёт поверх слоёв образа ещё один, пустой, — слой контейнера. Всё, что процесс создаёт, меняет или удаляет, попадает в него. Что в нём набралось, показывает docker diff:

text
$ sudo docker diff notes
C /data
A /data/notes.txt

A — файл добавлен, C — изменён, D — удалён. Каталог /data пришёл из образа, а notes.txt появился уже в контейнере.

Слой контейнера живёт столько же, сколько контейнер. docker stop, docker start и docker restart его не трогают: заметки после них на месте. docker rm удаляет контейнер вместе со слоем, а docker run создаёт новый контейнер с новым пустым слоем поверх того же образа. Поэтому /data и оказался пуст.

Проверь себя 1 вопрос

Контейнер web отдаёт страницу из образа site:2. Ты поправил её прямо внутри — sudo docker exec web sh -c 'echo fixed > /www/index.html', — потом пересоздал web из site:2. Что отдаст сайт?

  • index.html лежит в слое образа site:2, его docker rm не трогает. Удалилась только правка поверх него.

  • Образ только читается: docker exec поменял слой контейнера, а site:2 остался прежним.

  • Он записан в слой контейнера, а docker rm удалил этот слой. Новый контейнер получил /www/index.html из образа.

Правка через docker exec легла в слой контейнера и удалилась вместе с ним. Новый контейнер из site:2 отдаёт страницу из образа — постоянная правка делается в Dockerfile и новом образе.

Главное в шаге

  • Слои образа только читаются; всё, что пишет процесс, ложится в слой контейнера.
  • docker stop, start и restart слой сохраняют, docker rm удаляет его вместе с контейнером.
  • docker diff показывает, что контейнер изменил поверх образа.
Ubuntu 24.04
Загрузка…