Тло
Docker Volume дозволяє нам динамічно монтувати деякі файли (наприклад, конфігураційні файли), щоб перезаписати оригінальні файли в образі при запуску docker-контейнера, але що станеться, якщо ми змонтуємо папку або файл, який ще не існує на хості, до контейнера? LZ зіткнувся з такою проблемою у своїй роботі, тому практикував її самостійно і записав експериментальні результати так:
кріплення папки
Поведінка Docker при кріпленні папок є однорідною, наступним чином:
- Якщо папки немає, спочатку створюється папка (або рекурсивно, якщо це багаторівнева папка).
- Перезапишіть вміст папки в контейнері на вміст папки на хості
Деталі такі:
Папка на хості існує і не є порожньою
господар | контейнер | Результат маунту | | Існує непорожня папка A | Папка B, якої не існує | Спочатку створіть папку B у Contanier, а потім скопіюйте всі файли з папки A у B | | Існує непорожня папка A | Існує непорожня папка B | Спочатку спустіть оригінальний вміст китайської папки контейнера B, а потім скопіюйте китайську копію A у B |
Незалежно від існування папки B у контейнері, A повністю перезапише вміст B
Папка на хості існує, але порожня
господар | контейнер | Результат маунту | | Порожня папка А, яка існує | Існує непорожня папка B | Вміст китайської папки B у контейнері спорожнюється |
Вміст відповідної папки в контейнері спорожнюється
Папка host не існує
господар | контейнер | Результат маунту | | Папка А, якої не існує | Існує непорожня папка B | Створіть папку A на хості, і вміст китайської папки контейнера B буде спорожнений. | | Папки A/B/C, яких не існує | Існує непорожня папка B | Створіть папки A/B/C на хості, і вміст китайської папки контейнера B буде спорожненим |
Вміст відповідної папки в контейнері спорожнюється
зведення
Папка хоста обов'язково перезапише китайську папку контейнера:
господар | контейнер | Результат маунту | | Папка не існує/папка існує, але порожня | Папка не існує/існує, але є порожньою/існує і не є порожньою | контейнер Китайський шматок накривається (спорожнюється) | | Папка існує і не є порожньою | Папка не існує/існує, але є порожньою/існує і не є порожньою | Вміст китайської папки контейнера перезаписується (оригінальний вміст спорожнюється, а вміст папки на хості перезаписується) |
Кріплення файла
Найбільша різниця між монтажем файлів і монтуванням папок така:
- Docker забороняє монтувати файли, яких немає на хості, до файлів, які вже є в контейнері
- Монтування файлів не впливає на інші файли в тій же папці
Крім того, його поведінка перезапису відповідає монтуванню папок, тобто:
- Перезапишіть вміст файлу в контейнері на вміст файлу на хості
Деталі такі:
господар
господар | контейнер | Результат маунту | | Файли, які не існують configA.js | Документи, які вже існують congfigB.js | Помилка: Ви намагаєтеся змонтувати каталог у файл (чи навпаки)? Перевірте, чи існує вказаний шлях хоста і чи є очікуваним типом. Він генерує два порожніх каталоги configA.js і configB.js на хості одночасно, але контейнер не може запустити |
господар
господар | контейнер | Результат маунту | | Поточний файл configA.js | Поточний файл congfigB.js | контейнер китайський товар configB.js залишається незмінним, але вміст файлу перезаписується вмістом congfigA.js | | Поточний файл configA.js | Файли, які не існують congfigB.js | Новий файл configB.js в контейнері з вмістом файлу configA.js залишається незмінним configB.js всіх інших файлів у цьому файлі |
зведення
Файл на хості завжди перезаписує китайську папку контейнера
господар | контейнер | Результат маунту | | Файли, яких не існує | Документи, які вже існують | Заборонені дії | | Документи, які існують | Файли, яких не існує / файли, які вже існують | Додавати/перезаписувати (створювати каталог, якщо її немає) |
висновок
кріплення папки
- Якщо дозволити монтувати неіснуючі або порожні папки в контейнері, відповідні папки в контейнері будуть порожніми
- Приєднання непорожньої папки до контейнера перезапише оригінальну папку в контейнері
Кріплення файла
- Заборонено монтувати неіснуючі файли на файли, які вже існують у контейнері
- Існуючі файли будуть перезаписані, коли вони прикріплені до контейнера, і якщо файли не існують, вони будуть створені
Сценарії застосування
- З наведеного вище аналізу видно, що монтування папок використовується для перезапису файлів у всій папці, тому його можна застосовувати, коли потрібно змонтувати велику кількість файлів у контейнері, крім того, якщо монтується порожня або неіснуюча папка, зазвичай використовується у зворотному напрямку: тобто після запуску контейнера деякі файли (наприклад, журнали) можуть генеруватися під папкою точки монтажу в контейнері, і в цей момент їх можна безпосередньо побачити у папці на відповідному хості.
- Монтування файлів часто використовується для монтування конфігураційних файлів з метою динамічної зміни стандартної конфігурації під час виконання, оскільки воно перезаписує лише один файл, не впливаючи на інші файли в тій же папці в контейнері.
Переведено з:Вхід за гіперпосиланням видно.
(Кінець) |