Файла объем: Объем загружаемого файла
Что такое объем файла
Информация, как и любая другая физическая субстанция, имеет собственные единицы измерения, позволяющие оценить ее объем. Что такое объем файла? Объем файла — это величина, демонстрирующая, сколько места файл занимает на диске.
Сравнив полученное значение с объемом диска, вы сможете, например, узнать, поместится ли файл на дискету или сколько дискового пространства освободится, если вы уничтожите какой-либо файл.
Поскольку персональный компьютер — электронное устройство, он работает с электрическими сигналами. Упрощая, можно сказать, что логические элементы компьютера, выполняющие в его архитектуре роль «мозга», в каждую единицу времени могут пребывать только в одном из двух устойчивых состояний: есть ток, нет тока. Если условно обозначить состояние «нет тока» цифрой о, а состояние «есть ток» — цифрой 1, то мы придем к выводу, что наиболее оптимальным способом обработки информации для персонального компьютера является представление любых данных в двоичной системе счисления, то есть посредством определенного набора единиц и нулей. В двоичной форме можно «зашифровать» любую цифру или символ, например число 26 после перевода в двоичную систему счисления будет выглядеть как пою. Один разряд двоичного числа принято называть битом (от англ. bit, binary digit — двоичная цифра). Бит и является минимальной неделимой единицей информации в машинном представлении. Таким образом, бит — это количество информации, содержащееся в одном разряде двоичного числа. Теперь мы можем сказать, что некое условное двоичное значение 100110Ю состоит из восьми битов, поскольку включает восемь заполненных единицами и нулями разрядов.
Последовательность из восьми битов называют байтом. Именно байт является наиболее употребительной величиной в околокомпьютерной индустрии, поскольку эта единица обладает значительно большей «информационной емкостью», чем бит. Следующая по величине единица информации — это килобайт, содержащий 1024 байта, или 8192 бита. Почему именно 1024, ведь мы привыкли, что приставка кило обозначает обычно ровно тысячу каких-либо единиц? Разгадка этого примечательного явления кроется в том, что для подсчета объема информации используется двоичная система счисления. Действительно, число 1000 не является степенью двойки и выглядит «круглым» лишь в десятичной системе счисления, в двоичной системе оно отображается не просто «некрасиво», оно еще и неудобно для осуществления математических операций. Поэтому ученые-кибернетики решили использовать для подсчета больших объемов информации не значение юоо, а коэффициент 2ю, то есть 1024. Для того чтобы побыстрее усвоить нетрадиционное значение приставки кило- в компьютерных технологиях, запомните бородатый анекдот: «простые люди считают, что в килобайте содержится 1000 байт; программисты уверены, что в километре — 1024 метра».
Все остальные значения, определяющие объем файла и информации, получаются методом пропорционального увеличения уже знакомых нам величин с использованием коэффициента 2ю: мегабайт содержит 1024 килобайта, или 220 байта, гигабайт — 1024 мегабайта, или 23° байта, и т. д.
Для того чтобы измерить объем диска, файла или папки, щелкните на их значке правой кнопкой мыши и в появившемся контекстном меню выберите пункт Свойства. На экране появится окно, в котором будет указан точный информационный объем выбранного вами объекта в килобайтах. Однако для простоты работы на компьютере будет не лишним запомнить, что емкость обычной дискеты составляет 1440 Кбайт (или 1440/1024 ~ 1,4 Мбайт), компакт-диска — 640 или 720 Мбайт, объем жесткого диска зависит от его модели.
Что такое файл ? << >> Где хранятся файлы и программы ?
дизайн интерьера
Часть 02. Информация, вычисление объема файла и скорости передачи
Объем текстового файла
Кодирование информации в ПК заключается в том, что каждому символу ставится в соответствие уникальный двоичный код. Таким образом, человек различает символы по их начертаниям, а компьютер — по их кодам.
КОИ-8: 1 символ — 1 байт = 8 бит
UNICODE: 1 символ — 2 байта = 16 бит
ЗАДАЧА 1. Считая, что каждый символ кодируется одним байтом, оцените информационный объем сообщения: Без труда не вытащишь рыбку из пруда!
РЕШЕНИЕ: Считаем количество символов в сообщении с учетом пробелов и знаков препинания. Получаем N=35. Т.к. один символ кодируется 1 байтом, то всё сообщение будет занимать в памяти компьютера 35 байт.
ЗАДАЧА 2. Оценить информационный объем сообщения в Unicode: Без труда не вытащишь рыбку из пруда!
РЕШЕНИЕ: Количество символов в сообщении 35. Т.к. в Unicode один символ кодируется 2 байтами, то всё сообщение будет занимать в памяти компьютера 70 байт.
ЗАДАЧА 3. Определить информационный объем книги (в Мбайтах) подготовленной на компьютере, состоящей из 150 страниц (каждая страница содержит 40 строк, 60 символов в каждой строке).
РЕШЕНИЕ:
1) Подсчитаем количество символов в книге 40 * 60 * 150 = 360 000
2) Информационный объем книги составит 360 000 * 1 байт = 360 байт
3) Переведем в заданные единицы 360 000 байт / 1024 = 351,5625 Кбайт / 1024 = 0,34332275 Мбайт
Длина фразы составляет примерно 40 символов. Следовательно, ее объем можно приблизительно оценить в 40 х 2 = 80 байт. Такого варианта ответа нет, попробуем перевести результат в биты: 80 байт х 8 = 640 бит. Наиболее близкое значение из предложенных — 592 бита. Заметим, что разница между 640 и 592 составляет всего 48/16 = 3 символа в заданной кодировке и его можно считать несущественным по сравнению с длиной строки.
Замечание: Подсчетом символов в строке можно убедиться, что их ровно 37 (включая точку и пробелы), поэтому оценка 592 бита = 74 байта, что соответствует ровно 37 символам в двухбайтовой кодировке, является точной.
Алфавит – это набор букв, символов препинания, цифр, пробел и т.п.
Полное число символов в алфавите называют мощностью алфавита
ЗАДАЧА 4. Два текста содержат одинаковое количество символов. Первый текст составлен в алфавите мощностью 16 символов. Второй текст в алфавите мощностью 256 символов. Во сколько раз количество информации во втором тексте больше, чем в первом?
РЕШЕНИЕ: Если первый текст составлен в алфавите мощностью (К) 16 символов, то количество информации, которое несет 1 символ (1) в этом тексте, можно определить из соотношения: N = 2′, таким образом, из 16 = 2′ получим 1 = 4 бита. Мощность второго алфавита — 256 символов, из 256 = 2′ получим 1 = 8 бит. Т.к. оба текста содержат одинаковое количество символов, количество информации во втором тексте больше, чем в первом, в 2 раза.
Скорость передачи информации
Скорость передачи данных по каналам связи ограничена пропускной способностью канала. Пропускная способность канала связи изменяется как и скорость передачи данных в бит/сек (или кратностью этой величины Кбит/с, Мбит/с, байт/с, Кбайт/с, Мбайт/с).
Для вычислении объема информации V переданной по каналу связи с пропускной способностью а за время t используют формулу:
ЗАДАЧА 1. Через ADSL-соединение файл размером 1000 Кбайт передавался 32 с. Сколько секунд потребуется для передачи файла размером 625 Кбайт.
РЕШЕНИЕ: Найдем скорость ADSL соединения: 1000 Кбайт / 32 с. = 8000 Кбит / 32 с. = 250 Кбит/с.
Найдем время для передачи файла объемом 625 Кбайт: 625 Кбайт / 250 Кбит/с = 5000 Кбит / 250 Кбит/с. = 20 секунд.
При решении задач на определении скорости и времени передачи данных возникает трудность с большими числами (пример 3 Мб/с = 25 165 824 бит/с), поэтому проще работать со степенями двойки (пример 3 Мб/с = 3 * 210 * 210 * 23 = 3 * 223 бита/с).
n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
2n | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 |
ЗАДАЧА 2. Скорость передачи данных через ADSL─соединение равна 512 000 бит/c. Передача файла через это соединение заняла 1 минуту. Определить размер файла в килобайтах.
РЕШЕНИЕ: Время передачи файла: 1 мин = 60 с = 4 * 15 с = 22 * 15 с
Скорость передачи файла: 512000 бит/c = 512 * 1000 бит/с = 29 * 125 * 8 бит/с (1 байт = 8 бит)
29 * 125 байт/с = 29 * 125 бит/с / 210 = 125 / 2 Кб/с
Чтобы найти время объем файла, нужно умножить время передачи на скорость передачи:
(22 * 15 с) * 125 / 2 Кб/с = 2 * 15 * 125 Кб = 3750 Кб
Настройка файла подкачки в Windows 10: как увеличить, изменить, отключить?
Файл подкачки, или виртуальная память — это системный файл на жестком диске компьютера, который Windows использует, чтобы компенсировать нехватку оперативной памяти, если приложениям ее не хватает. Что это за файл, как он работает, что о нем нужно знать, как увеличить файл подкачки в Windows 10, или, наоборот — как отключить файл подкачки в Windows 10, читайте в нашей шпаргалке.
Файл подкачки в Windows: зачем он нужен и как работает?
Всем известно, что запущенные приложения на компьютере выполняются в оперативной памяти (ОЗУ, RAM). Выражаясь образно, при запуске приложения считываются с жесткого диска и временно «переписываются» в оперативную память. Вся информация в приложениях тоже хранится в оперативной памяти до тех пор, пока вы их не закроете.
Когда количество оперативной памяти заполняется, в дело вступает так называемый «файл подкачки». Это скрытый системный файл на жестком диске, который может выполнять функции ОЗУ. Вместо того, чтобы закрыть приложение, которому не хватает RAM, Windows скидывает его в файл подкачки и при необходимости возвращает обратно.
Какие приложения отправлять в файл подкачки, система решает сама. К примеру, приложение, которое долго находится в свернутом состоянии, может быть помечено системой как неактуальное. При нехватке RAM оно отправится в файл на жестком диске, чтобы немного почистить память.
В современных компьютерах устанавливается достаточно много ОЗУ, поэтому файл подкачки используется редко. Но если вы замечаете, что приложение при открытии немного «подлагивает», а индикатор жесткого диска на ПК мигает, значит, Windows возвратила его в RAM из файла подкачки. Если это происходит часто, стоит задуматься о том, чтобы докупить немного памяти.
Файл подкачки в Windows 10: что такое pagefile.sys и swapfile.sys?
В Windows 10, в отличии от более старых версий Windows, используются два файла подкачки: pagefile.sys и swapfile.sys. Они хранятся в корне диске C:\ и найти их можно, если включить на своем компьютере отображение скрытых и системных файлов.
В файл pagefile.sys при нехватке памяти отправляются обычные приложения, которые вы устанавливаете из разных источников — браузер, графический редактор, мессенджеры и так далее. А в файл swapfile. sys — встроенные приложения Windows 10 и приложения, установленные из Магазина Windows.
Swapfile и Pagefile всегда работают в паре. Объем swapfile.sys не превышает пары десятков мегабайт, а вот pagefile.sys в процессе работы может «раздуваться» до нескольких гигабайт. Из-за этого некоторые ищут способ, как отключить файл подкачки в Windows 10, чтобы освободить место на диске. Но если сделать это, отключится и swapfile.sys — а без него многие встроенные приложения Windows 10 просто перестанут запускаться.
Файл подкачки Windows 10: оптимальный размер
Вообще-то, ваша «виндовс» сама решает, какой объем файла подкачки ей нужен, и стандартного объема хватает в большинстве случаев. Кроме того, на компьютерах с большим количеством RAM он вообще довольно редко используется.
Но можно высчитать, сколько составляет оптимальный объем файла подкачки в Windows 10 и самостоятельно. Расскажем, как сделать это правильно.
- Откройте все нужные вам приложения. Затем запустите Диспетчер задач (Ctrl+Alt+Delete) и посмотрите на занятый объем RAM на вкладке Производительность.
- Умножьте объем занятой памяти на 2. К примеру, 3 Гбайт из 4 Гбайт занято, значит — 6 Гбайт.
- Вычитаем из полученного значения количество вашей RAM. 6 минус 4 — 2 Гбайт. Это и есть оптимальный размер файла подкачки для вашего ПК. Если у вас получился отрицательный размер, значит вам не надо увеличивать, уменьшать или вообще как-то изменять стандартный объем файла подкачки.
Не рекомендуется поднимать и повышать размер файла подкачки более чем в три раза от актуального объема ОЗУ.
Как увеличить файл подкачки в Windows 10?
Расскажем, как поставить файл подкачки на Windows 10 в оптимальное значение.
- Откройте меню Пуск, найдите и запустите приложение «Настройка представления и производительности системы«.
- Перейдите на вкладку Дополнительно и в разделе Виртуальная память щелкните Изменить.
- Снимите отметку возле пункта Автоматически выбирать объем файла подкачки.
- Выделите системный диск из списка, а затем нажмите Указать размер.
- В строке Исходный размер (МБ) укажите минимальный размер файла подкачки — он не должен быть меньше 400 Мбайт, а в строку Максимальный размер (МБ) введите нужный объем, который вы разрешите системе отнять. Значения должны быть указаны в мегабайтах (1 Гбайт = 1 024 Мбайт).
- После ввода новых параметров нажмите Задать, а затем Ок.
Как отключить файл подкачки в Windows 10?
Вообще-то, отключать файл подкачки не рекомендуется. Во-первых, приложения начнут «вылетать» (самопроизвольно перезагружаться), а некоторые вообще не смогут запуститься. Но если у вас много RAM, а место на жестком диске осталось мало, то отключение файла подкачки позволит освободить пару Гбайт. Главное — потом не пожалеть о своем решении. Может быть, вам поможет очистка диска, или нужно почаще очищать кэш браузера?
Нижеприведенные инструкции можно использовать на свой страх и риск!
Отключаем pagefile.sys
- Откройте Проводник, нажмите правой кнопкой мыши по Этот Компьютер и выберите Свойства.
- Нажмите в левом меню Дополнительные параметры системы.
- На вкладке Дополнительно найдите раздел Быстродействие и нажмите Параметры.
- Снова откроется новое окно. На нем откройте вкладку Дополнительно. В области Виртуальная память нажмите Изменить.
- Снимите отметку возле Автоматически выбирать объем файла подкачки. Установите отметку в положение Без файла подкачки и кликните Задать и ОК.
Отключаем swapfile.sys
- Обязательно сделайте точку восстановления системы.
- Нажмите Win + R и введите regedit, чтобы зайти в редактор реестра.
- Скопируйте в адресную строку редактора реестра следующий адрес: Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
- В правой части окна редактора реестра нажмите правую кнопку мыши, выберите Создать – Значение DWORD (32-бита).
- Назовите его SwapfileControl и перезагрузите компьютер.
- После этого swapfile будет отключен. Включить файл подкачки в Windows 10 обратно можно, удалив созданный параметр.
Как переместить файл подкачки?
Есть небольшая хитрость, как настроить файл подкачки на Windows 10. Если в вашем компьютере стоят несколько дисков, можно перенести файл подкачки с системного диска (не раздела!) на другой диск.
- Для этого в уже знакомом приложении Настройка представления и производительности системы > Дополнительно > Виртуальная память нажмите Изменить.
- Снимите отметку возле пункта Автоматически выбирать объем файла подкачки. Затем выделите ваш системный диск и нажмите Без файла подкачки. Нажмите Задать > ОК.
- Выберите в том же списке диск, на котором вы хотите хранить файл подкачки. Нажмите Размер по выбору системы > Задать. Кликните ОК и перезагрузите компьютер, чтобы система применила ваши настройки.
ВАЖНО: не рекомендуется перемещать файл подкачки на накопитель типа SSD, так как это может сократить срок его службы, увеличив число циклов перезаписи.
Вот еще несколько полезных материалов по оптимизации:
Урок 7. Что такое размер файла и папки и как его узнать
Что такое размер файла и папки и как его узнать? Вы наверняка слышали такие выражения, как «моя игрушка слишком много весит», «легкий файл», «тяжелая папка». Неужели папки и файлы можно взвесить? И в каких единицах их тогда взвешивают? Да, как это не странно звучит, но файлы и папки тоже имеют свой вес, или правильнее — объем. Если бы они ничего не весили, то нам не надо было бы чистить жесткие диски, и освобождать место для другой информации.
Что такое размер файла и папки
Даже информацию можно измерить. Для этого в компьютерной терминологии приняты свои единицы измерения: байты, килобайты, мегабайты, гигабайты, терабайты и так далее. Вся компьютерная информация записывается при помощи 0 (нуля) и 1 (единицы). Ноль и единица на компьютерном языке – это 1 бит. А группа из восьми битов, называется байтом. Подробнее читайте здесь.
Основные единицы хранения информации:
1 байт = 8 битов
1 Килобайт (Кб) = 1024 байта
1 Мегабайт (Мб) = 1024 килобайта
Так как компьютер работает в двоичной системе (1 и 0), то ему гораздо удобнее разбивать информацию именно так. Цифра 1024 это килобайт, а один килобайт в двоичной системе счисления это 210 = 1024. Мы с вами пользуемся десятичной системой счисления, поэтому не привычно оперировать такими числами.
Любой файл (графический, музыкальный, видео и т.д.) имеет свой размер. Вся информация в компьютере записывается на жесткий диск, который имеет определенный объем. Компьютерная память тоже измеряется в этих единицах.
Любой носитель информации, такие как: жесткий диск, дискета, флешка, карта памяти и CD/DVD-диски имеют свой объем, больше которого, вы не сможете на него записать.
Как узнать, сколько весит файл или папка
Для того, чтобы узнать сколько весит файл или папка, необходимо навести на файл (или папку) курсор и подождать пару секунд, пока не всплывет окошко с информацией.
Если у папки или файла слишком большой объем, то таким способом вы не узнаете информацию о его (её) размере. В таком случае необходимо щелкнуть по папке или файлу правой кнопкой мыши, выбрать в выпадающем меню Свойства (в самом низу), и посмотреть размер в новом окне на вкладке Общие.
Видеоролик на тему размера файлов и папок:
Теперь вы знаете, что такое размер файла или папки.
Задание. Посмотрите размеры своих папок и файлов.
Удачи Вам!
Понравилась статья — нажмите на кнопки:
Как определить размер файла или папки
Очень важно уметь правильно анализировать данные на своем компьютере. Возможно, некоторые спросят, а зачем это нам? Умения правильно анализировать это важный навык, с помощью которого, вы сможете предвидеть ошибки и правильно распределить ресурсы своего компьютера в основном это конечно касается памяти.
Большинство пользователей просто приносят домой диски, флешки и начинают их копировать целиком себе на компьютер даже не на мгновенье не задумываясь о том, что у вашего компьютера тоже есть предел. Есть определенное количество памяти под данные.
Вот просто задайте себе вопрос, так не кривя душой, когда вы копируете информацию с флешки которую только что получили от знакомых, часто вы проверяете вес информации на ней?
А ответ ваш мне известен, я часто занимаюсь ремонтом, а точнее восстановлением работоспособности программ. И проанализировав компьютер, который я пришел починить , вижу у каждого второго информационный бардак. Я сразу понимаю, что человек ничего не знает о правильной работе на ПК.
Приведу пример, на компьютере 200 единиц памяти(гигабайт), из них уже заполнено 198 гигабайт, а человек мне звонит и говорит: Иван у нас что-то опять с компьютером случилось, заедь посмотри пожалуйста. Я приезжаю и вижу , что свободного места осталось всего 2 единицы(гигабайта) , а иногда и того меньше, а пользователь хочет скинуть диск с фильмами который по весу составляет к примеру 4 единицы(гигабайта). А что это значит? ПРАВИЛЬНО. Человек не понимает, что у компьютера больше нет свободного места, ему физически не хватает объема памяти и как бы они его не пинали, он не будет копировать данные, которые превышают его возможности. Как бы их дети не плакали, новая игрушка не установится и виноваты не продавцы, которые вам «втюхали» этот бракованный диск, а ваше незнание элементарного.
Допустим, у вас есть 12-ти литровое ведро, вы пошли на колодец за водой и набрали полное ведро, где получилось 12-ть литров воды и вы не предаете этому значения, не пробуете в него сверху еще два литра воды налить – это физически невозможно. Тоже самое и с памятью компьютера, нельзя записать больше чем предусмотрено техническими возможностями.
Именно поэтому я настоятельно рекомендую хотя бы уметь быстро определять вес файла или папки и сравнивать его с возможностями своего ПК.
Экспериментируем дальше над песней, вы можете работать абсолютно на любом файле, схема всегда одинакова, находим интересующий нас файл на компьютере, если с флешки хотите сбросить информацию значит на флешке ищем файл и как всегда нажимаем правой кнопкой мыши:
В этот раз нас интересует строка свойства, нажимаем на нее левой кнопкой мышки.
В первом абзаце мы можем увидеть тип файла это поможет нам понять, что это вообще такое – звук, видео, текстовый документ или программа. Несколько примеров ниже.
Во втором абзаце мы видим расположение и объем нашего файла или папки, программы или игры. Для нас это самый главный раздел, именно на него нужно смотреть при копировании или переносе данных, чтобы вовремя решить хватит места на компьютере для записи этого объекта или нет. А не на русское авось….
Графа расположение – это адрес файла, то самое место где он лежит. По свойствам я вижу, что это звуковой файл под названием «о боже какой мужчина» , а расположен он на локальном диске «D» в папке музыка (что такое локальный диск мы поговорим в следующем занятии). То есть по свойствам я уже проанализировал, что это звуковой файл скорее всего песня и знаю где он лежит на моем компьютере. Идем дальше, размер файла, как я уже говорил – это самое важное.
В данном примере мы видим 8.13 мб, но что это значит, сколько это вообще?
Чтобы определить нужно знать единицы измерения в которых измеряется информация на компьютере.
К примеру, вы идете в магазин и покупаете 6 кг картошки, 300 грамм конфет или вы закупаетесь для целого магазина и тогда счет уже идет на тонны, но главное чтобы ориентироваться в этих единицах вы их просто запомнили.
1 грамм
1 килограмм – это 1000 грамм
1 тонна – это 1000 килограмм и т.д.
Тоже самое и в компьютере, есть свои единицы измерения и их нужно просто запомнить, поверьте основных единиц всего несколько можно сказать даже две, поэтому вы их легко можете запомнить или просто записать себе куда-нибудь в виде небольшой шпаргалки.
(кстати для своих читателей я уже приготовил такую шпаргалку в виде текстового документа, скачать вы ее сможете перейдя по ссылке ниже)
Скачать шпаргалку
Итак, перейдем к изучению единиц измерения компьютера. Их много, но не пугайтесь, как я уже говорил, в конце оставим всего несколько, а остальные вы просто прочитаете для общего ознакомления.
Бит – самая маленькая еденица измерения, за ней идет:
1 Байт – 8 бит
1 Килобайт (Кб) – 1024 байта.
1 Мегабайт (Мб) – 1024 килобайта.
1 Гигабайт (Гб) – 1024 мегабайта.
1 Терабайт (Тб) – 1024 гигабайта.
Есть еще огромные единицы измерения информации, но я думаю вы с ними не скоро столкнетесь.
А своим читателям я сразу рекомендую представлять информацию в общепринятом виде, так намного легче.
1 Килобайт (Кб) – 1000 байт.
1 Мегабайт (Мб) – 1000 килобайт.
1 Гигабайт (Гб) – 1000 мегабайт.
1 Терабайт (Тб) – 1000 гигабайт.
Из всего этого я советую запомнить всего две единицы измерения :
Мегабайт и гигабайт, именно их вы будите использовать в основах общения с компьютером.
Обычно вся память компьютера считается в гигабайтах, у кого 250, у кого 500, есть 750 и 1000 Гб.
Объем у каждого ПК может быть свой, главное нужно запомнить, что его измеряют именно в гигабайтах.
Чтобы подвести итог вспомним наш файл,песню, в свойствах написано 8.13 Мб
А у нас к примеру компьютер на 200 Гб, в одном гигабайте 1000 Мб, значит память нашего ПК примерно 200 Гб * 1000 Мб = 200. 000 Мб.
Если общая память 200000 Мб, а одна песня весит 8 мб на компьютер можно записать примерно 200000/8=25000 песен. Этого более чем достаточно.
Я думаю, вы научились определять объем файлов. В следующей статье мы научимся определять общую память компьютера, сколько памяти уже занято и сколько еще свободно.
Предыдущий урок
Задать вопрос
Содержание
Следующий урок
Как добавить вложение в письмо в UniSender
Когда вы рассылаете прайс-листы или другую информацию в массовой рассылке, кажется удобным сделать вложение в письмо. Но у вложения больше недостатков, чем преимуществ:
- вложение увеличивает вес письма, что плохо сказывается на доставляемости рассылки;
- некоторые почтовые клиенты проверяют файлы на вирусы и считают даже самые проверенные файлы подозрительными;
- невозможно отследить, посмотрели ли получатели вложение, скачали ли файл.
Потому мы рекомендуем вместо вложения в письмо разместить файл на своем сайте или во внешнем облачном хранилище типа Google Drive. А в письме вставить ссылку на файл.
Почему ссылка на файл лучше, чем вложение
Прикрепляя ссылку вместо вложения вы получите несколько преимуществ:
- можно отследить, какие адресаты скачали файл;
- нет ограничений на размер файла;
- можно отредактировать файл или настроить доступ к нему после отправки рассылки;
- увеличиваются шансы на успешную доставку писем во «Входящие». Почтовые сервисы не будут блокировать рассылку из-за подозрительных файлов;
- размер файла никак не влияет на скорость доставки. Файл хранится в облаке, а ссылка в письме весит всего несколько байт.
Как добавить в письмо ссылку на файл
Если вам всё-таки необходимо добавить вложение в письмо, вот инструкция как это сделать.
Как добавить вложение
Вложения можно добавить на последнем шаге перед отправкой рассылки.
Создаём рассылку в конструкторе или HTML-редакторе.
На последнем шаге «Отправить рассылку» внизу страницы находим раздел «Вложения», раскрываем его и нажимаем кнопку «Добавить».
Выбираем на компьютере файл и добавляем его. Если нужно добавить другие вложения, нажимаем кнопку «Добавить еще» и добавляем другой файл. Здесь же видим размеры добавленных файлов и доступный лимит.
Готово. Вложения добавлены.
Лимит на размер прикрепляемых файлов — 5 Мб. Если во вложении несколько файлов, считается их суммарный размер.
Как добавить ссылку на файл в письмо
Где хранить файл
Вы можете разместить файл на своём сайте или в облачном хранилище. Самые популярные сервисы:
Размещаем файл в облачном хранилище
Рассмотрим на примере «Google Диска».
Нам понадобится аккаунт в Google. Если аккаунта нет, создайте его и авторизуйтесь.
После входа в «Google Диск» нажимаем правой кнопкой мыши на пустом месте и выбираем «Загрузка файлов».
Выбираем файл на компьютере. Файл появляется в списке.
Кликаем на файле правой кнопкой мыши и выбираем «Открыть доступ».
Здесь переходим в раздел «Скопируйте ссылку», нажимаем на «Доступ ограничен.» и меняем на «Доступные пользователям, у которых есть ссылка». Так получатели письма смогут скачать файл по ссылке. Нажимаем «Готово».
Здесь можно выбрать уровень доступа:
- Читатель — доступ только для просмотра.
- Комментатор — доступ для комментирования.
- Редактор — доступ для редактирования.
Оставляем «Читатель». Этого уровня доступа достаточно, чтобы подписчики могли скачать файл.
Нажимаем «Копировать ссылку».
Ссылка скопирована в буфер обмена.
Важно!
Если перейти по ссылке в таком виде, сначала откроется предпросмотр файла в Google. Для скачивания файла нужно будет нажать на кнопку. Если вы хотите, чтобы файл скачивался сразу по прямой ссылке из письма, используйте такой способ:
1. Берём скопированную ссылку, например
https://drive.google.com/file/d/1dPCSQWeqgs00B7uniAq780zrY8idnXZ/view?usp=sharing
2. Выделяем и копируем значение id — набор символов между ..d/ и /view…
https://drive.google.com/file/d/1dPCSQWeqgs00B7uniAq780zrY8idnXZ/view?usp=sharing
3. В итоге получаем
1dPCSQWeqgs00B7uniAq780zrY8idnXZ
4. Вставляем этот id в конце ссылки
https://drive.google.com/uc?export=download&id=
5. Получится так:
https://drive.google.com/uc?export=download&id=1dPCSQWeqgs00B7uniAq780zrY8idnXZ
Теперь при переходе по этой ссылке скачивание файла начнётся автоматически, без предварительного просмотра.
В данном случае используем прямую ссылку с мгновенным скачиванием.
Добавляем ссылку на файл в письмо
Создаём письмо в новом конструкторе.
Выделяем текст, который нужно сделать ссылкой. На панели инструментов нажимаем «Вставить/редактировать ссылку» («Insert/edit link»).
В поле «Link Type» оставляем «URL».
В поле «Url» вставляем скопированную из «Google Диска» ссылку.
Ссылка добавлена.
Теперь сделаем кнопку с такой же ссылкой.
Добавляем блок «Кнопка». Кликаем на него. На панели слева, во вкладке «Содержимое», вставляем ссылку в поле «URL».
Готово.
Так выглядит скачивание файла в полученном письме.
Полезные ссылки
10 лучших облачных хранилищ для бизнеса
Устранение типичных ошибок при первых рассылках
15 ошибок вёрстки, из-за которых письмо может попасть в спам
Ошибка Windows Defender создаёт тысячи файлов на системном диске — Железо на DTF
{«id»:2265,»title»:»\u0421\u0442\u0430\u043d\u044c\u0442\u0435 \u043d\u0430\u0441\u0442\u0430\u0432\u043d\u0438\u043a\u043e\u043c \u043d\u0430 \u0418\u0422-\u043a\u0443\u0440\u0441\u0430\u0445 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u044e \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u0443″,»url»:»\/redirect?component=advertising&id=2265&url=https:\/\/dtf.ru\/promo\/736969-yandex-praktikum-2&hash=70e3bdfd09e127816f7cf1c0c645aca6e89e95c17a42610aab0750e7d1d22f96″,»isPaidAndBannersEnabled»:false}
10 679
просмотров
На Reddit и форумах Microsoft появляются жалобы от пользователей касаемо свежего обновления Microsoft Defender. Сообщается, что Защитник Windows захламляет системный диск тысячами бесполезных файлов.
Microsoft Defender — это инструмент безопасности, который предустановлен во всех версиях Windows 10 и регулярно обновляется через Центр обновления. После одного из таких патчей в конце апреля 2021 пользователи заметили, что в папке C: \ ProgramData \ Microsoft \ Windows Defender \ Scans \ History \ Store генерируются большое количество неопознанных файлов.
Сами файлы весят 1-2 КБ и являются безвредными, но в некоторых случаях могут занимать суммарно огромный объём дискового пространства. Проблема также затрагивает серверные операционные системы Windows.
У нас есть три сервера 2016 года, которые подверглись проблеме. Вчера вечером стали появляться предупреждения о нехватке свободного места на жёстких дисках. На одном сервере 18 миллионов файлов в папке Store. На другом — 13 миллионов. На то, чтобы обнаружить и удалить их, уходят часы. В сумме они занимают 50-60 ГБ. Это серьезная ошибка Microsoft.
Пользователь Reddit
Простой способ узнать, подвергся ли ваш компьютер подобной ошибке — это проверить вышеуказанную папку. Файлы можно безопасно удалить.
Microsoft заявила, что знает о проблеме и уже готовит решение под номером 1.1.18100.6. Обновление загрузится и установится автоматически в течение ближайших дней.
Ранее Microsoft также выпустила исправление для обновлений Windows 10, которые снижали производительность в играх.
{
«author_name»: «Виталий Рассказов»,
«author_type»: «editor»,
«tags»: [«\u043d\u043e\u0432\u043e\u0441\u0442\u0438″,»windows10″,»microsoft»],
«comments»: 184,
«likes»: 80,
«favorites»: 105,
«is_advertisement»: false,
«subsite_label»: «hard»,
«id»: 724439,
«is_wide»: false,
«is_ugc»: false,
«date»: «Thu, 06 May 2021 13:45:47 +0300»,
«is_special»: false }
{«id»:349633,»url»:»https:\/\/dtf.ru\/u\/349633-vitaliy-rasskazov»,»name»:»\u0412\u0438\u0442\u0430\u043b\u0438\u0439 \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u043e\u0432″,»avatar»:»7285ea95-6f9d-52a5-a57b-d6f89515361f»,»karma»:12888,»description»:»»,»isMe»:false,»isPlus»:true,»isVerified»:false,»isSubscribed»:false,»isNotificationsEnabled»:false,»isShowMessengerButton»:false}
{«url»:»https:\/\/booster.osnova.io\/a\/relevant?site=dtf»,»place»:»entry»,»site»:»dtf»,»settings»:{«modes»:{«externalLink»:{«buttonLabels»:[«\u0423\u0437\u043d\u0430\u0442\u044c»,»\u0427\u0438\u0442\u0430\u0442\u044c»,»\u041d\u0430\u0447\u0430\u0442\u044c»,»\u0417\u0430\u043a\u0430\u0437\u0430\u0442\u044c»,»\u041a\u0443\u043f\u0438\u0442\u044c»,»\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c»,»\u0421\u043a\u0430\u0447\u0430\u0442\u044c»,»\u041f\u0435\u0440\u0435\u0439\u0442\u0438″]}},»deviceList»:{«desktop»:»\u0414\u0435\u0441\u043a\u0442\u043e\u043f»,»smartphone»:»\u0421\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b»,»tablet»:»\u041f\u043b\u0430\u043d\u0448\u0435\u0442\u044b»}},»isModerator»:false}
Еженедельная рассылка
Одно письмо с лучшим за неделю
Проверьте почту
Отправили письмо для подтверждения
Справочник по Dockerfile
| Документация Docker
Расчетное время чтения: 81 минута
Docker может автоматически создавать образы, читая инструкции из
Dockerfile
. Dockerfile
— это текстовый документ, содержащий все команды
пользователь может вызвать командную строку для сборки изображения. Использование docker build
пользователи могут создать автоматизированную сборку, которая запускает несколько командных строк
инструкции по порядку.
На этой странице описаны команды, которые можно использовать в Dockerfile
.Когда вы
прочитав эту страницу, обратитесь к Dockerfile
Best
Практики для ориентированного на чаевые гида.
Использование
Команда docker build создает образ из
файл Dockerfile
и контекст . Контекст сборки — это набор файлов в
указанное местоположение ПУТЬ
или URL
. PATH
— это каталог на вашем локальном
файловая система. URL-адрес
— это расположение репозитория Git.
Контекст сборки обрабатывается рекурсивно.Итак, PATH
включает любые подкаталоги
а URL-адрес
включает репозиторий и его подмодули. Этот пример показывает
команда сборки, которая использует текущий каталог (,
) в качестве контекста сборки:
$ сборка докеров.
Отправка контекста сборки демону Docker 6.51 МБ
...
Сборка выполняется демоном Docker, а не интерфейсом командной строки. Первым делом сборка
процесс отправляет демону весь контекст (рекурсивно). В большинстве
случаях лучше всего начать с пустого каталога в качестве контекста и сохранить
Dockerfile в этом каталоге.Добавьте только файлы, необходимые для создания
Dockerfile.
Предупреждение
Не используйте корневой каталог
/
в качествеPATH
для контекста сборки, поскольку
это заставляет сборку передать все содержимое вашего жесткого диска на
Демон докера.
Чтобы использовать файл в контексте сборки, Dockerfile
ссылается на указанный файл
в инструкции, например, COPY
. Для увеличения сборки
производительности, исключите файлы и каталоги, добавив .dockerignore
в
каталог контекста. Для получения информации о том, как создать .dockerignore
файл см. документацию на этой странице.
Традиционно Dockerfile
называется Dockerfile
и находится в корневом каталоге.
контекста. Вы используете флаг -f
с docker build
, чтобы указать на Dockerfile
в любом месте вашей файловой системы.
$ docker build -f / путь / к / a / Dockerfile.
Вы можете указать репозиторий и тег для сохранения нового изображения, если
сборка выполнена успешно:
$ docker build -t shykes / myapp.
Чтобы пометить изображение в нескольких репозиториях после сборки,
добавить несколько параметров -t
при запуске команды build
:
$ docker build -t shykes / myapp: 1.0.2 -t shykes / myapp: latest.
Перед тем, как демон Docker выполнит инструкции из файла Dockerfile
, он выполняет
предварительная проверка Dockerfile
и возвращает ошибку, если синтаксис неверен:
$ docker build -t test / myapp.[+] Building 0.3s (2/2) ЗАВЕРШЕНО
=> [внутреннее] определение сборки загрузки из Dockerfile 0.1s
=> => передача файла докеров: 60B 0,0 с
=> [внутренняя] загрузка .dockerignore 0,1 с
=> => контекст передачи: 2B 0,0 с
ошибка: не удалось решить: ошибка rpc: код = неизвестно desc = не удалось решить с помощью внешнего интерфейса dockerfile.v0: не удалось создать определение LLB:
строка ошибки синтаксического анализа файла dockerfile 2: неизвестная инструкция: RUNCMD
Демон Docker последовательно выполняет инструкции из файла Dockerfile
,
фиксация результата каждой инструкции
к новому изображению, если необходимо, прежде чем, наконец, вывести идентификатор вашего
новое изображение.Демон Docker автоматически очистит контекст, который вы
послал.
Обратите внимание, что каждая инструкция выполняется независимо и вызывает новый образ.
будет создан — поэтому RUN cd / tmp
не повлияет на следующий
инструкции.
По возможности Docker использует кеш сборки для ускорения сборки docker
.
процесс значительно. На это указывает сообщение CACHED
в консоли.
выход. (Дополнительные сведения см. В руководстве по передовым методам Dockerfile
:
$ docker build -t svendowideit / ambassador.[+] Building 0.7s (6/6) ЗАВЕРШЕНО
=> [внутреннее] определение сборки загрузки из Dockerfile 0.1s
=> => передача файла докеров: 286B 0,0 с
=> [внутренняя] загрузка .dockerignore 0,1 с
=> => контекст передачи: 2B 0,0 с
=> [внутренние] метаданные загрузки для docker.io/library/alpine:3.2 0,4 с
=> ЗАПИСАНО [1/2] ОТ docker.io/library/alpine:3.2 @ sha256: e9a2035f9d0d7ce 0,0 с
=> ЗАПИСАНО [2/2] RUN apk add --no-cache socat 0.0s
=> экспорт в изображение 0,0 с
=> => экспорт слоев 0,0 с
=> => запись изображения sha256: 1affb80ca37018ac12067fa2af38cc5bcc2a8f09963de 0.0s
=> => присвоение имени docker.io/svendowideit/ambassador 0.0s
По умолчанию кэш сборки основан на результатах предыдущих сборок на компьютере.
на котором вы строите.Параметр --cache-from
также позволяет использовать
build-cache, распространяемый через реестр образов, относится к
указание внешних источников кеша
в справочнике по командам docker build
.
Когда вы закончите сборку, вы готовы приступить к сканированию образа с помощью docker scan
,
и отправьте свой образ в Docker Hub.
BuildKit
Начиная с версии 18.09, Docker поддерживает новый бэкэнд для выполнения ваших
сборки, предоставляемые moby / buildkit
проект.Бэкэнд BuildKit предоставляет множество преимуществ по сравнению со старым
выполнение. Например, BuildKit может:
- Обнаружение и пропуск неиспользуемых этапов сборки
- Распараллелить независимые этапы сборки
- Постепенно переносите только измененные файлы в контексте сборки между сборками
- Обнаружение и пропуск передачи неиспользуемых файлов в контексте сборки
- Используйте внешние реализации Dockerfile со многими новыми функциями
- Избегайте побочных эффектов с остальной частью API (промежуточные изображения и контейнеры)
- Назначьте приоритет кешу сборки для автоматического удаления
Чтобы использовать бэкэнд BuildKit, вам необходимо установить переменную среды
DOCKER_BUILDKIT = 1
в интерфейсе командной строки перед вызовом сборки докера
.
Чтобы узнать об экспериментальном синтаксисе Dockerfile, доступном для BuildKit-based
сборки ссылаются на документацию в репозитории BuildKit.
Формат
Вот формат файла Dockerfile
:
# Комментарий
ИНСТРУКЦИЯ аргументы
В инструкции не учитывается регистр. Однако по соглашению они
быть ЗАГЛАВНЫМ, чтобы легче отличать их от аргументов.
Docker запускает инструкции в файле Dockerfile
по порядку. Dockerfile
должен
Начните с инструкции ИЗ
. Это может быть после парсера
директивы, комментарии и глобальная область видимости
ARG. Инструкция FROM
указывает Parent
Изображение , с которого вы находитесь
строительство. ИЗ
может предшествовать только одна или несколько инструкций ARG
, которые
объявить аргументы, которые используются в из строк
в файле Dockerfile
.
Docker обрабатывает строки, в которых начинаются с с #
, как комментарий, если только строка не
допустимая директива парсера.Маркер #
где угодно
else в строке рассматривается как аргумент. Это позволяет использовать такие операторы, как:
# Комментарий
RUN echo "мы запускаем несколько интересных вещей"
Строки комментариев удаляются перед выполнением инструкций Dockerfile, которые
означает, что комментарий в следующем примере не обрабатывается оболочкой
выполнение команды echo
, и оба приведенных ниже примера эквивалентны:
RUN echo hello \
# комментарий
Мир
Символы продолжения строки в комментариях не поддерживаются.
Примечание о пробеле
Для обратной совместимости, начальные пробелы перед комментариями (
#
) и
инструкции (такие какRUN
) игнорируются, но не рекомендуется. Ведущие пробелы
не сохраняется в этих случаях, поэтому следующие примеры
эквивалент:# это строка комментария RUN echo привет RUN echo world
# это строка комментария RUN echo привет RUN echo world
Обратите внимание, однако, что пробел в команде аргументов , таких как команды
следующиеRUN
, сохраняются, поэтому следующий пример печатает `hello world`
с ведущими пробелами, как указано:RUN echo "\ Привет\ Мир"
Директивы парсера
Директивы парсера являются необязательными и влияют на способ, которым последующие строки
в файле Dockerfile обрабатываются
.Директивы парсера не добавляют слои в сборку,
и не будет отображаться как этап сборки. Директивы парсера записываются как
специальный тип комментария в виде # директива = значение
. Единая директива
можно использовать только один раз.
После обработки комментария, пустой строки или инструкции конструктора Docker
больше не ищет директивы парсера. Вместо этого он обрабатывает все отформатированное
в качестве директивы парсера в качестве комментария и не пытается проверить, может ли он
быть директивой парсера.Следовательно, все директивы парсера должны быть в самом начале
верхняя часть Dockerfile
.
Директивы синтаксического анализатора не чувствительны к регистру. Однако по соглашению они
быть строчными. Соглашение также должно включать пустую строку после любого
директивы парсера. Символы продолжения строки не поддерживаются в парсере
директивы.
Из-за этих правил все следующие примеры недействительны:
Недействителен из-за продолжения строки:
Недействителен из-за двукратного появления:
# директива = значение1
# директива = значение2
ОТ ImageName
Считается комментарием из-за появления после инструкции строителя:
ИЗ ImageName
# директива = значение
Считается комментарием из-за того, что он появляется после комментария, который не является синтаксическим анализатором.
директива:
# О моем dockerfile
# директива = значение
ОТ ImageName
Директива unknown рассматривается как комментарий из-за того, что она не распознана.В
кроме того, известная директива рассматривается как комментарий, так как она появляется после
комментарий, который не является директивой парсера.
# unknowndirective = значение
# knowndirective = значение
В директиве синтаксического анализатора разрешены пробелы, не прерывающие строку. Следовательно
следующие строки обрабатываются одинаково:
# директива = значение
# директива = значение
# директива = значение
# директива = значение
# dIrEcTiVe = значение
Поддерживаются следующие директивы парсера:
синтаксис
# syntax = [ссылка на удаленное изображение]
Например:
# синтаксис = docker / dockerfile: 1
# синтаксис = докер.io / докер / файл докеров: 1
# синтаксис = example.com / user / repo: tag @ sha256: abcdef ...
Эта функция доступна только при использовании серверной части BuildKit и
игнорируется при использовании бэкэнда классического построителя.
Синтаксическая директива определяет расположение используемого синтаксиса Dockerfile.
для сборки Dockerfile. Бэкэнд BuildKit позволяет беспрепятственно использовать внешние
реализации, которые распространяются как образы Docker и выполняются внутри
среда песочницы контейнера.
Пользовательские реализации Dockerfile позволяют:
- Автоматически получать исправления ошибок без обновления демона Docker
- Убедитесь, что все пользователи используют одну и ту же реализацию для создания вашего файла Docker.
- Используйте новейшие функции без обновления демона Docker
- Попробуйте новые функции или сторонние функции, прежде чем они будут интегрированы в демон Docker
- Используйте альтернативные определения сборки или создайте свои собственные
Официальные релизы
Docker распространяет официальные версии образов, которые можно использовать для сборки
Dockerfiles в репозитории docker / dockerfile
на Docker Hub.Есть два
каналы, по которым выпускаются новые образы: стабильных
и лабораторий
.
Стабильный канал следует за семантическим управлением версиями. Например:
-
docker / dockerfile: 1
— постоянно обновляется с последним выпуском патча1.x.x
minor и -
docker / dockerfile: 1.2
— постоянно обновляется с последним выпуском патча1.2.x
,
и перестает получать обновления после выпуска версии1.3.0
. -
docker / dockerfile: 1.2.1
— неизменяемый: никогда не обновлялся
Мы рекомендуем использовать docker / dockerfile: 1
, который всегда указывает на последнюю стабильную версию.
выпуск синтаксиса версии 1 и получает как «второстепенные», так и «исправления»
для цикла выпуска версии 1. BuildKit автоматически проверяет наличие обновлений
синтаксис при выполнении сборки, убедитесь, что вы используете самую последнюю версию.
Если используется конкретная версия, например 1.2
или 1.2.1
, Dockerfile должен
обновляться вручную, чтобы продолжать получать исправления ошибок и новые функции. Старые версии
Dockerfile остаются совместимыми с новыми версиями построителя.
лабораторный канал
Канал «labs» обеспечивает ранний доступ к функциям Dockerfile, которые еще не
доступно в стабильном канале. Изображения каналов Лаборатории выпускаются вместе
со стабильными выпусками и следуйте тому же управлению версиями с суффиксом -labs
,
например:
-
docker / dockerfile: labs
— последняя версия на канале labs -
docker / dockerfile: 1-labs
— то же, что иdockerfile: 1
в стабильном канале, с включенными функциями labs -
docker / dockerfile: 1.2-labs
— то же, что и dockerfile: 1.2
в стабильном канале, с включенными функциями labs -
docker / dockerfile: 1.2.1-labs
— неизменяемый: никогда не обновлялся. То же, что и dockerfile: 1.2.1
в стабильном канале, с включенными функциями лаборатории
Выберите канал, который лучше всего соответствует вашим потребностям; если вы хотите извлечь выгоду из
новые функции, используйте канал labs. Изображения в канале лабораторий представляют собой расширенный набор
функций в стабильном канале; обратите внимание, что стабильных
функций в лабораториях
изображения каналов следуют семантическому управлению версиями, но «лабораторные»
функций нет, а более новые выпуски могут быть несовместимы с предыдущими версиями, поэтому
рекомендуется использовать неизменяемый вариант полной версии.
Для документации по «лабораторным» функциям, основным сборкам и ночным выпускам функций,
обратитесь к описанию в репозитории исходного кода BuildKit на GitHub.
Чтобы увидеть полный список доступных образов, посетите репозиторий образов на Docker Hub,
и репозиторий изображений docker / dockerfile-upstream
для разработки.
побег
или
Директива escape
устанавливает символ, используемый для escape-символов в
Dockerfile
. Если не указано, escape-символ по умолчанию — \
.
Управляющий символ используется как для экранирования символов в строке, так и для
избежать новой строки. Это позволяет инструкции Dockerfile
охватывают несколько строк. Обратите внимание, что независимо от того, экранирует ли парсер
директива включена в Dockerfile
, экранирование не выполняется в
команда RUN
, кроме конца строки.
Установка escape-символа на `
особенно полезна на
Windows
, где \
— разделитель путей к каталогам. `
согласован
с Windows PowerShell.
Рассмотрим следующий пример, который неочевидным образом дает сбой на
Windows
. Второй \
в конце второй строки будет интерпретироваться как
escape для новой строки вместо цели escape из первых \
.
Точно так же \
в конце третьей строки будет, если предположить, что это действительно
обрабатывается как инструкция, потому что она рассматривается как продолжение строки.Результат
этого файла докеров заключается в том, что вторая и третья строки считаются одним
инструкция:
С microsoft / nanoserver
КОПИРОВАТЬ testfile.txt c: \\
RUN dir c: \
Результатов в:
PS E: \ myproject> docker build -t cmd.
Отправка контекста сборки демону Docker 3,072 КБ
Шаг 1/2: С microsoft / nanoserver
---> 22738ff49c6d
Шаг 2/2: КОПИРОВАТЬ testfile.txt c: \ RUN dir c:
GetFileAttributesEx c: RUN: система не может найти указанный файл.PS E: \ myproject>
Одним из решений вышеперечисленного было бы использование /
в качестве цели для COPY
инструкция и директория
. Однако этот синтаксис в лучшем случае сбивает с толку, поскольку он не
естественно для путей на Windows
и в худшем случае подвержен ошибкам, так как не все команды на
Windows
поддерживает /
в качестве разделителя пути.
При добавлении директивы парсера escape
следующий Dockerfile
преуспеет как
ожидается с использованием естественной семантики платформы для путей к файлам в Windows
:
# escape = `
С microsoft / nanoserver
КОПИРОВАТЬ тестовый файл.txt c: \
RUN dir c: \
Результатов в:
PS E: \ myproject> docker build -t завершается успешно --no-cache = true.
Отправка контекста сборки демону Docker 3,072 КБ
Шаг 1/3: С microsoft / nanoserver
---> 22738ff49c6d
Шаг 2/3: КОПИРОВАТЬ testfile.txt c: \
---> 96655de338de
Снятие промежуточного контейнера 4db9acbb1682
Шаг 3/3: ЗАПУСК dir c: \
---> Запуск в a2c157f842f5
Том на диске C не имеет метки.
Серийный номер тома 7E6D-E0F7.
Каталог c: \
05.10.2016 17:04 1,894 Лицензия.текст
05.10.2016 14:22 Программные файлы
05.10.2016 14:14 Программные файлы (x86)
28.10.2016 11:18 62 testfile.txt
28.10.2016 11:20 Пользователи
28.10.2016 11:20 Windows
2 Файл (ы) 1,956 байт
4 Dir (s) 21,259,096,064 байта свободно
---> 01c7f3bef04f
Снятие промежуточного контейнера a2c157f842f5
Успешно построен 01c7f3bef04f
PS E: \ myproject>
Замена окружающей среды
Переменные среды (объявленные с помощью оператора ENV
) также могут быть
используются в определенных инструкциях как переменные, которые должны интерпретироваться
Dockerfile
.Экраны также обрабатываются для включения синтаксиса, похожего на переменную.
в заявление буквально.
Переменные среды обозначены в Dockerfile
либо с
$ имя_переменной
или $ {имя_переменной}
. К ним относятся одинаково, и
синтаксис скобок обычно используется для решения проблем с именами переменных без
пробел, например $ {foo} _bar
.
Синтаксис $ {variable_name}
также поддерживает некоторые из стандартных bash
модификаторы, указанные ниже:
-
$ {variable: -word}
указывает, что еслипеременная
установлена, то результат
будет это значение.Еслипеременная
не установлена, результатом будетслово
. -
$ {переменная: + слово}
указывает, что еслипеременная
установлена, тослово
будет
результат, иначе результат будет пустой строкой.
Во всех случаях слово
может быть любой строкой, включая дополнительную среду
переменные.
Экранирование возможно путем добавления \
перед переменной: \ $ foo
или \ $ {foo}
,
например, будет преобразовано в литералы $ foo
и $ {foo}
соответственно.
Пример (проанализированное представление отображается после #
):
ОТ busybox
ENV FOO = / бар
WORKDIR $ {FOO} # WORKDIR / бар
ДОБАВЛЯТЬ . $ FOO # ДОБАВИТЬ. /бар
КОПИРОВАТЬ \ $ FOO / quux # КОПИРОВАТЬ $ FOO / quux
Переменные среды поддерживаются следующим списком инструкций в
файл Dockerfile
:
-
ДОБАВИТЬ
-
КОПИЯ
-
ENV
-
EXPOSE
-
ИЗ
-
ТАБЛИЧКА
-
СИГНАЛ ОСТАНОВА
-
ПОЛЬЗОВАТЕЛЬ
-
ОБЪЕМ
-
WORKDIR
-
ONBUILD
(в сочетании с одной из поддерживаемых инструкций выше)
При замене переменной среды будет использоваться одно и то же значение для каждой переменной.
на протяжении всей инструкции.Другими словами, в этом примере:
ENV abc = привет
ENV abc = пока def = $ abc
ENV ghi = $ abc
приведет к def
, имеющему значение hello
, а не bye
. Тем не мение,
ghi
будет иметь значение bye
, потому что он не является частью той же инструкции
которые устанавливают abc
на bye
.
.dockerignore файл
Прежде чем интерфейс командной строки докера отправит контекст демону докера, он выглядит
для файла с именем .dockerignore
в корневом каталоге контекста.
Если этот файл существует, интерфейс командной строки изменяет контекст, чтобы исключить файлы и
каталоги, соответствующие шаблонам в нем. Это помогает избежать
без необходимости отправлять большие или конфиденциальные файлы и каталоги на
daemon и потенциально добавляя их к изображениям, используя ADD
или COPY
.
Интерфейс командной строки интерпретирует файл .dockerignore
как файл, разделенный новой строкой.
список шаблонов, похожих на файловые глобусы оболочек Unix.Для
целей сопоставления, корень контекста считается как
рабочий и корневой каталог. Например, выкройки
/ foo / bar
и foo / bar
оба исключают файл или каталог с именем bar
в подкаталоге foo
PATH
или в корне git
репозиторий, расположенный по адресу URL
. Ни то, ни другое не исключает ничего.
Если строка в файле .dockerignore
начинается с #
в столбце 1, то эта строка
считается комментарием и игнорируется перед интерпретацией CLI.
Вот пример файла .dockerignore
:
# comment
* / темп *
* / * / темп *
темп?
Этот файл вызывает следующее поведение сборки:
Правило | Поведение |
---|---|
# комментарий | Игнорируется. |
* / темп * | Исключить файлы и каталоги, имена которых начинаются с temp , из любого непосредственного подкаталога корня.Например, простой файл /somedir/ Contemporary.txt исключается, как и каталог / somedir / temp . |
* / * / темп * | Исключить файлы и каталоги, начинающиеся с temp , из любого подкаталога, находящегося на два уровня ниже корня. Например, /somedir/subdir/ Contemporary.txt исключен. |
темп? | Исключить из корневого каталога файлы и каталоги, имена которых являются односимвольным расширением temp .Например, / tempa и / tempb исключаются. |
Сопоставление выполняется с помощью Go
путь к файлу. правила соответствия. А
шаг предварительной обработки удаляет начальные и конечные пробелы и
исключает .
и ..
элементов с использованием Go
filepath.Clean. Линии
пустые после предварительной обработки игнорируются.
Путь к файлу
Beyond Go. Соответствие правилам, Docker также поддерживает специальный
строка с подстановочными знаками **
, которая соответствует любому количеству каталогов (включая
нуль).Например, ** / *. Go
исключит все файлы, заканчивающиеся на .go
.
которые находятся во всех каталогах, включая корень контекста сборки.
Строки начинающиеся с !
(восклицательный знак) можно использовать для исключения
к исключениям. Ниже приведен пример файла .dockerignore
, который
использует этот механизм:
* .md
! README.md
Все файлы уценки , кроме README.md
, исключаются из контекста.
Размещение !
правил исключения влияет на поведение: последний
строка .dockerignore
, которая соответствует конкретному файлу, определяет
независимо от того, включен он или исключен. Рассмотрим следующий пример:
* .md
! README * .md
README-secret.md
В контекст не включены файлы уценки, кроме файлов README, кроме
README-secret.md
.
Теперь рассмотрим этот пример:
*.мкр
README-secret.md
! README * .md
Включены все файлы README. Средняя линия не действует, потому что
! README * .md
соответствует README-secret.md
и идет последним.
Вы даже можете использовать файл .dockerignore
, чтобы исключить файл Dockerfile
и файлов .dockerignore
. Эти файлы по-прежнему отправляются демону
потому что они нужны ему для работы. Но инструкции ADD
и COPY
не копируйте их на изображение.
Наконец, вы можете указать, какие файлы включать в
контекст, а не исключаемый. Для этого укажите *
как
первый образец, за которым следует один или несколько !
шаблонов исключений.
Примечание
По историческим причинам паттерн
.
игнорируется.
ИЗ
ОТ [--platform = ] [AS ]
или
ОТ [--platform = ] [: ] [AS ]
или
ОТ [--platform = ] [@ ] [AS ]
Инструкция FROM
инициализирует новый этап сборки и устанавливает
Базовый образ для последующих инструкций.Таким образом,
действительный Dockerfile
должен начинаться с инструкции FROM
. Изображение может быть
любое действительное изображение — особенно легко начать с , вытащив изображение из
Публичные репозитории .
-
ARG
— единственная инструкция, которая может предшествоватьFROM
вDockerfile
.
См. Понять, как взаимодействуют ARG и FROM. -
ИЗ
может появляться несколько раз в одном файлеDockerfile от
до
создавать несколько образов или использовать один этап сборки как зависимость для другого.Просто запишите последний идентификатор изображения, выводимый коммитом перед каждым новым
ИЗ инструкции
. Каждая инструкцияИЗ
очищает любое состояние, созданное предыдущим
инструкции. - При желании можно дать имя новому этапу сборки, добавив
Имя AS
к
ИЗ инструкции
. Имя может использоваться в последующихОТ
и
COPY --from =
инструкций для обращения к образу, созданному на этом этапе. - Тег
Значения
необязательны.Если вы опустите любой из них,
Builder по умолчанию принимаетпоследних тегов
. Строитель возвращает ошибку, если он
не может найти значение тега.
Дополнительный флаг --platform
можно использовать для указания платформы образа.
в случае, если ОТ
ссылается на многоплатформенный образ. Например, linux / amd64
,
linux / arm64
или windows / amd64
. По умолчанию целевая платформа сборки
запрос используется. В значении этого флага можно использовать глобальные аргументы сборки,
например автоматические платформенные ARG
позволяют принудительно перейти на платформу собственной сборки ( --platform = $ BUILDPLATFORM
),
и использовать его для кросс-компиляции на целевой платформе внутри сцены.
Понять, как взаимодействуют ARG и FROM
Инструкции
FROM
поддерживают переменные, объявленные любыми ARG
инструкции, которые появляются до первых ИЗ
.
ARG CODE_VERSION = последний
ИЗ базы: $ {CODE_VERSION}
CMD / код / запуск приложения
ИЗ дополнительных услуг: $ {CODE_VERSION}
CMD / код / дополнительные функции
ARG
, объявленный перед FROM
, находится вне стадии сборки, поэтому он
не может использоваться ни в одной инструкции после ОТ
.Чтобы использовать значение по умолчанию
ARG
, объявленный перед первым FROM
, использует инструкцию ARG
без
значение внутри стадии сборки:
ARG VERSION = последняя
ОТ busybox: $ VERSION
ВЕРСИЯ ARG
ВЫПОЛНИТЬ echo $ VERSION> image_version
ЗАПУСК
RUN имеет 2 формы:
-
RUN <команда>
(форма оболочки , команда запускается в оболочке, которая
по умолчанию/ bin / sh -c
в Linux илиcmd / S / C
в Windows) -
RUN ["исполняемый файл", "param1", "param2"]
(форма exec )
Команда RUN
будет выполнять любые команды на новом уровне поверх
текущее изображение и зафиксируйте результаты.Полученное зафиксированное изображение будет
используется для следующего шага в Dockerfile
.
Наслоение RUN
инструкций и генерация коммитов соответствует ядру
концепции Docker, где коммиты дешевы, а контейнеры могут быть созданы из
любой момент в истории изображения, как в системе управления версиями.
Форма exec позволяет избежать перестановки строк оболочки и RUN
команды, использующие базовый образ, не содержащий указанного исполняемого файла оболочки.
Оболочка по умолчанию для формы оболочки может быть изменена с помощью ОБОЛОЧКА
команда.
В форме оболочки вы можете использовать \
(обратная косая черта) для продолжения одиночного
Инструкцию RUN на следующую строку. Например, рассмотрим эти две строки:
RUN / bin / bash -c 'источник $ HOME / .bashrc; \
эхо $ HOME '
Вместе они эквивалентны одной строке:
RUN / bin / bash -c 'source $ HOME /.bashrc; эхо $ HOME '
Чтобы использовать другую оболочку, отличную от ‘/ bin / sh’, используйте форму exec , передаваемую в
желаемый снаряд. Например:
RUN ["/ bin / bash", "-c", "echo hello"]
Примечание
Форма exec анализируется как массив JSON, что означает, что
вы должны заключать слова в двойные кавычки («), а не в одинарные кавычки (»).
В отличие от формы оболочки , форма exec не вызывает командную оболочку.Это означает, что нормальной обработки оболочки не происходит. Например,
RUN ["echo", "$ HOME"]
не будет выполнять подстановку переменных в $ HOME
.
Если вам нужна обработка оболочки, либо используйте форму оболочки , либо выполните
непосредственно оболочку, например: RUN ["sh", "-c", "echo $ HOME"]
.
При использовании формы exec и непосредственном выполнении оболочки, как в случае с
форма оболочки, это оболочка, которая выполняет переменную среды
расширение, а не докер.
Примечание
В форме JSON необходимо избегать обратной косой черты.Это
особенно актуально в Windows, где обратная косая черта является разделителем пути.
В противном случае следующая строка будет рассматриваться как форма оболочки из-за того, что
является действительным JSON и неожиданным образом терпит неудачу:RUN ["c: \ windows \ system32 \ tasklist.exe"]
Правильный синтаксис для этого примера:
RUN ["c: \\ windows \\ system32 \\ tasklist.exe"]
Кэш для команд RUN
не становится недействительным автоматически во время
следующая сборка.Кеш для такой инструкции, как
RUN apt-get dist-upgrade -y
будет повторно использован во время следующей сборки. В
кеш для RUN
инструкций можно сделать недействительным с помощью --no-cache
флаг, например docker build --no-cache
.
См. Dockerfile
Best Practices
руководство для получения дополнительной информации.
Кэш для инструкций RUN
может быть аннулирован инструкциями ADD
и COPY
.
Известные проблемы (RUN)
Проблема 783 связана с файлом.
проблемы с разрешениями, которые могут возникнуть при использовании файловой системы AUFS. Ты
может заметить это при попытке, например,rm
файла.Для систем с последней версией aufs (т. Е.
dirperm1 опция крепления
может
быть установленным), докер попытается исправить проблему автоматически, установив
слои с опциейdirperm1
. Более подробно по вариантуdirperm1
можно
находится по адресуaufs
, справочная страницаЕсли ваша система не поддерживает
dirperm1
, проблема описывает обходной путь.
CMD
Инструкция CMD
имеет три формы:
-
CMD ["исполняемый файл", "параметр1", "параметр2"]
(форма exec , это предпочтительная форма) -
CMD ["param1", "param2"]
(как параметров по умолчанию для ENTRYPOINT ) -
Команда CMD param1 param2
(форма оболочки )
В файле Dockerfile
может быть только одна инструкция CMD
.Если вы укажете более одного CMD
тогда только последний CMD
вступит в силу.
Основная цель CMD
- предоставить значения по умолчанию для выполняющейся
контейнер. Эти значения по умолчанию могут включать исполняемый файл или опускать
исполняемый файл, и в этом случае вы должны указать ENTRYPOINT
инструкция тоже.
Если CMD
используется для предоставления аргументов по умолчанию для инструкции ENTRYPOINT
,
обе инструкции CMD
и ENTRYPOINT
должны быть указаны с JSON
формат массива.
Примечание
Форма exec анализируется как массив JSON, что означает, что вы должны использовать
заключать слова в двойные кавычки («), а не в одинарные кавычки («).
В отличие от формы оболочки , форма exec не вызывает командную оболочку.
Это означает, что нормальной обработки оболочки не происходит. Например,
CMD ["echo", "$ HOME"]
не будет выполнять подстановку переменных в $ HOME
.
Если вам нужна обработка оболочки, либо используйте форму оболочки , либо выполните
оболочку напрямую, например: CMD ["sh", "-c", "echo $ HOME"]
.При использовании формы exec и непосредственном выполнении оболочки, как в случае с
форма оболочки, это оболочка, которая выполняет переменную среды
расширение, а не докер.
При использовании в форматах оболочки или exec инструкция CMD
устанавливает команду
для выполнения при запуске образа.
Если вы используете форму оболочки из CMD
, то <команда>
будет выполняться в
/ bin / sh -c
:
ОТ ubuntu
CMD echo "Это тест."| туалет -
Если вы хотите, чтобы запускал ваш
без оболочки , вы должны
выразите команду как массив JSON и укажите полный путь к исполняемому файлу.
Эта форма массива является предпочтительным форматом CMD
. Любые дополнительные параметры
должны быть индивидуально выражены в виде строк в массиве:
ОТ ubuntu
CMD ["/ usr / bin / wc", "- справка"]
Если вы хотите, чтобы ваш контейнер запускал каждый раз один и тот же исполняемый файл, тогда
вам следует рассмотреть возможность использования ENTRYPOINT
в сочетании с CMD
.Видеть
ВХОД .
Если пользователь указывает аргументы для docker run
, то они переопределят
по умолчанию указано в CMD
.
Примечание
Не путайте
RUN
сCMD
.RUN
фактически запускает команду и фиксирует
результат;CMD
ничего не выполняет во время сборки, но указывает
предполагаемая команда для изображения.
ТАБЛИЧКА
LABEL <ключ> = <значение> <ключ> = <значение> <ключ> = <значение>...
Инструкция LABEL
добавляет метаданные к изображению. LABEL
- это
пара ключ-значение. Чтобы включить пробелы в значение LABEL
, используйте кавычки и
обратная косая черта, как при синтаксическом анализе командной строки. Несколько примеров использования:
LABEL "com.example.vendor" = "ACME Incorporated"
LABEL com.example.label-with-value = "foo"
LABEL version = "1.0"
LABEL description = "Этот текст иллюстрирует \
эти значения-метки могут занимать несколько строк ".
Изображение может иметь более одной метки.Вы можете указать несколько меток на
одна линия. До Docker 1.10 это уменьшало размер окончательного образа,
но это уже не так. Вы по-прежнему можете указать несколько ярлыков
в одной инструкции одним из следующих двух способов:
LABEL multi.label1 = "value1" multi.label2 = "value2" other = "value3"
LABEL multi.label1 = "значение1" \
multi.label2 = "значение2" \
другое = "значение3"
Метки, включенные в базовые или родительские изображения (изображения в строке ИЗ
), являются
унаследовано вашим изображением.Если метка уже существует, но с другим значением,
последнее примененное значение имеет приоритет над любым ранее установленным значением.
Для просмотра меток изображения используйте команду docker image inspect
. Ты можешь использовать
опция --format
для отображения только меток;
$ docker image inspect --format = '' myimage
{
"com.example.vendor": "ACME Incorporated",
"com.example.label-with-value": "foo",
"версия": "1.0",
"description": "Этот текст показывает, что значения меток могут занимать несколько строк.",
"multi.label1": "значение1",
"multi.label2": "значение2",
"другое": "значение3"
}
ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ (устарело)
Инструкция MAINTAINER
устанавливает поле Author сгенерированных изображений.
Инструкция LABEL
является гораздо более гибкой версией этого, и вы должны использовать
вместо этого, поскольку он позволяет устанавливать любые требуемые метаданные, и их можно просмотреть
легко, например с докером осмотрите
. Чтобы установить метку, соответствующую
MAINTAINER
поле, которое вы можете использовать:
LABEL org.opencontainers.image.authors = "[email protected]"
Это будет видно из docker inspect
с другими метками.
ЭКСПОЗИЦИЯ
EXPOSE <порт> [<порт> / <протокол> ...]
Инструкция EXPOSE
сообщает Docker, что контейнер прослушивает
указанные сетевые порты во время выполнения. Вы можете указать, прослушивает ли порт
TCP или UDP, по умолчанию - TCP, если протокол не указан.
Инструкция EXPOSE
фактически не публикует порт. Он функционирует как
тип документации между человеком, который создает изображение, и человеком, который
запускает контейнер, о том, какие порты предполагается опубликовать. На самом деле
опубликуйте порт при запуске контейнера, используйте флаг -p
на docker run
для публикации и сопоставления одного или нескольких портов или флага -P
для публикации всех открытых
порты и сопоставьте их с портами высокого порядка.
По умолчанию EXPOSE
предполагает TCP.Вы также можете указать UDP:
Чтобы открыть как TCP, так и UDP, включите две строки:
EXPOSE 80 / tcp
EXPOSE 80 / udp
В этом случае, если вы используете -P
с docker run
, порт будет открыт один раз
для TCP и один раз для UDP. Помните, что -P
использует эфемерный хост высокого порядка
порт на хосте, поэтому порт не будет одинаковым для TCP и UDP.
Независимо от настроек EXPOSE
, вы можете переопределить их во время выполнения, используя
флаг -p
.Например
$ docker run -p 80: 80 / tcp -p 80: 80 / udp ...
Чтобы настроить перенаправление портов в хост-системе, см. Использование флага -P.
Команда docker network
поддерживает создание сетей для связи между
контейнеров без необходимости раскрывать или публиковать определенные порты, потому что
подключенные к сети контейнеры могут связываться друг с другом через любые
порт. Для получения подробной информации см.
обзор этой функции.
ENV
Инструкция ENV
устанавливает для переменной среды <ключ>
значение
<значение>
.Это значение будет в окружении для всех последующих инструкций.
на этапе сборки и может быть заменен встроенным в
многие тоже. Значение будет интерпретировано для других переменных среды, поэтому
символы кавычек будут удалены, если они не экранированы. Подобно синтаксическому анализу командной строки,
кавычки и обратные косые черты могут использоваться для включения пробелов в значения.
Пример:
ENV MY_NAME = "Джон Доу"
ENV MY_DOG = Рекс \ Собака \
ENV MY_CAT = пушистый
Инструкция ENV
позволяет использовать несколько <ключ> = <значение>...
устанавливаемых переменных
за один раз, и приведенный ниже пример даст такие же чистые результаты в финальном
изображение:
ENV MY_NAME = "Джон Доу" MY_DOG = Рекс \ Собака \
MY_CAT = пушистый
Переменные среды, установленные с помощью ENV
, сохранятся при запуске контейнера.
из полученного изображения. Вы можете просмотреть значения с помощью docker inspect
и
измените их, используя docker run --env
.
Сохранение переменной среды может вызвать непредвиденные побочные эффекты.Например,
установка ENV DEBIAN_FRONTEND = noninteractive
изменяет поведение apt-get
,
и может запутать пользователей вашего изображения.
Если переменная среды нужна только во время сборки, а не в финале
изображение, рассмотрите возможность установки значения для одной команды:
RUN DEBIAN_FRONTEND = неинтерактивное обновление apt-get && apt-get install -y ...
Или используя ARG
, который не сохраняется в окончательном образе:
ARG DEBIAN_FRONTEND = не интерактивный
ЗАПУСТИТЬ apt-get update && apt-get install -y...
Альтернативный синтаксис
Инструкция
ENV
также допускает альтернативный синтаксисENV <ключ> <значение>
,
исключая=
. Например:Этот синтаксис не позволяет устанавливать несколько переменных среды в
singleENV
инструкция, и может сбивать с толку. Например, следующие
устанавливает единственную переменную среды (ONE
) со значением"TWO = THREE = world"
:Альтернативный синтаксис поддерживается для обратной совместимости, но не рекомендуется
по причинам, указанным выше, и может быть удален в будущем выпуске.
ДОБАВИТЬ
ADD имеет две формы:
ДОБАВИТЬ [--chown = : ] ...
ДОБАВИТЬ [--chown = <пользователь>: <группа>] ["", ... "<самый лучший>"]
Последняя форма требуется для путей, содержащих пробелы.
Примечание
Функция
--chown
поддерживается только в файлах Dockerfiles, используемых для сборки контейнеров Linux,
и не будет работать с контейнерами Windows.Поскольку концепции владения пользователями и группами
не переводить между Linux и Windows, использование/ etc / passwd
и/ etc / group
для
преобразование имен пользователей и групп в идентификаторы ограничивает эту функцию только жизнеспособной
для контейнеров на базе ОС Linux.
Инструкция ADD
копирует новые файлы, каталоги или URL-адреса удаленных файлов из
и добавляет их в файловую систему образа по пути
.
Можно указать несколько ресурсов
, но если они являются файлами или
каталоги, их пути интерпретируются относительно источника
контекст сборки.
Каждое
может содержать подстановочные знаки, и сопоставление будет выполняться с использованием Go
путь к файлу. правила соответствия. Например:
Чтобы добавить все файлы, начинающиеся с «hom»:
В примере ниже ?
заменяется любым одиночным символом, например, «home.txt».
- это абсолютный путь или путь относительно WORKDIR
, в который
источник будет скопирован в целевой контейнер.
В приведенном ниже примере используется относительный путь и добавляется «test.txt ”в
:
ДОБАВИТЬ test.txt relativeDir /
Принимая во внимание, что в этом примере используется абсолютный путь и добавляется «test.txt» к / absoluteDir /
ДОБАВИТЬ test.txt / absoluteDir /
При добавлении файлов или каталогов, содержащих специальные символы (например, [
и ]
), вам нужно избегать этих путей, следуя правилам Голанга, чтобы предотвратить
их не рассматривать как совпадающий образец.Например, чтобы добавить файл
с именем arr [0] .txt
, используйте следующее;
Все новые файлы и каталоги создаются с UID и GID, равными 0, если только
необязательный флаг --chown
указывает заданное имя пользователя, имя группы или UID / GID
комбинация, чтобы запросить конкретное право собственности на добавленный контент. В
формат флага --chown
позволяет использовать строки имени пользователя и группы.
или прямые целочисленные UID и GID в любой комбинации. Предоставление имени пользователя без
groupname или UID без GID будут использовать тот же числовой UID, что и GID.Если
указывается имя пользователя или группы, корневая файловая система контейнера
Для перевода будут использоваться файлы / etc / passwd
и / etc / group
.
от имени до целого UID или GID соответственно. Следующие примеры показывают
допустимые определения для флага --chown
:
ДОБАВИТЬ --chown = 55: файлы mygroup * / somedir /
ДОБАВИТЬ --chown = bin файлы * / somedir /
ДОБАВИТЬ --chown = 1 файл * / somedir /
ДОБАВИТЬ --chown = 10: 11 файлов * / somedir /
Если корневая файловая система контейнера не содержит / etc / passwd
или
/ etc / group
файлов и имена пользователей или групп используются в --chown
флаг, сборка завершится ошибкой при операции ADD
.Использование числовых идентификаторов требует
без поиска и не будет зависеть от содержимого корневой файловой системы контейнера.
В случае, если
- это URL-адрес удаленного файла, адресат будет
имеют разрешения 600. Если удаленный файл, который извлекается, имеет HTTP
Last-Modified
header, будет использоваться временная метка из этого заголовка.
для установки mtime
в конечном файле. Однако, как и любой другой файл
обработано во время ADD
, mtime
не будет включено в определение
от того, был ли изменен файл и должен ли обновляться кеш.
Примечание
Если вы собираете, передавая
Dockerfile
через STDIN (docker
build -), контекста сборки нет, поэтому Dockerfile
может содержать только инструкциюADD
на основе URL. Вы также можете пройти
сжатый архив через STDIN: (сборка докера-
),
Dockerfile
в корне архива и остальная часть
Архив будет использоваться в качестве контекста сборки.
Если ваши файлы URL защищены с помощью аутентификации, вам необходимо использовать RUN wget
,
RUN curl
или используйте другой инструмент из контейнера в качестве инструкции ADD
не поддерживает аутентификацию.
Примечание
Первая обнаруженная инструкция
ADD
сделает кеш недействительным для всех
следуя инструкциям из файла Dockerfile, если содержимоеимеет
измененный.Это включает в себя недействительность кеша дляRUN
инструкций.
См.Dockerfile
Best Practices.
руководство - Использование кеша сборки
для дополнительной информации.
ADD
подчиняется следующим правилам:
Путь
вы не можетеADD ../something / something
, потому что первый шаг
docker build
- отправить контекстный каталог (и подкаталоги) в
демон докера.Если
файл загружается с URL-адреса и копируется вЕсли
имя файла выводится из URL-адреса, и файл загружается в
<самый старый> / <имя файла>
. Например,ADD http: // example.com / foobar /
будет
создайте файл/ foobar
. URL-адрес должен иметь нетривиальный путь, чтобы
в этом случае можно найти соответствующее имя файла (http://example.com
не будет работать).Если
включая метаданные файловой системы.
Примечание
Сам каталог не копируется, только его содержимое.
Если
(identity, gzip, bzip2 или xz), затем он распаковывается как каталог. Ресурсы
из удаленных URL не распакованы . Когда каталог копируется или
распакованный, он имеет то же поведение, что иtar -x
, результатом является объединение:- Независимо от того, что существовало на пути назначения и
- Содержимое исходного дерева, конфликты разрешены в пользу
из «2.”По каждому файлу.
Примечание
Определяется ли файл как распознанный формат сжатия или нет
выполняется исключительно на основе содержимого файла, а не имени файла.
Например, если пустой файл заканчивается на.tar.gz
, это не будет
будет распознан как сжатый файл, и не будет генерировать какие-либо
сообщение об ошибке декомпрессии, скорее файл будет просто скопирован в
назначения.Если
его метаданные. В этом случае, если/
, это
будет считаться каталогом и будет записано содержимое
по адресу/ base ( ) Если указано несколько ресурсов
использование подстановочного знака, тогда
косая черта/
.Если
обычный файл, а содержимоеЕсли
на своем пути.
КОПИЯ
КОПИЯ имеет две формы:
КОПИРОВАТЬ [--chown = <пользователь>: <группа>] ... <самый>
КОПИРОВАТЬ [--chown = : ] ["", ... ""]
Эта последняя форма требуется для путей, содержащих пробелы
Примечание
Функция
--chown
поддерживается только в файлах Dockerfiles, используемых для сборки контейнеров Linux,
и не будет работать с контейнерами Windows. Поскольку концепции владения пользователями и группами
не переводить между Linux и Windows, использование/ etc / passwd
и/ etc / group
для
преобразование имен пользователей и групп в идентификаторы ограничивает возможность использования этой функции только для
Контейнеры на базе ОС Linux.
Команда COPY
копирует новые файлы или каталоги из
и добавляет их в файловую систему контейнера по пути
.
Можно указать несколько ресурсов
, но пути к файлам и
каталоги будут интерпретироваться относительно источника контекста
сборки.
Каждое
может содержать подстановочные знаки, и сопоставление будет выполняться с использованием Go
Путь файла.Правила матча. Например:
Чтобы добавить все файлы, начинающиеся с «hom»:
В примере ниже ?
заменяется любым одиночным символом, например, «home.txt».
- это абсолютный путь или путь относительно WORKDIR
, в который
источник будет скопирован в целевой контейнер.
В приведенном ниже примере используется относительный путь и добавляется «test.txt» к
:
.
COPY test.txt relativeDir /
Принимая во внимание, что в этом примере используется абсолютный путь и добавляется «test.txt» к / absoluteDir /
КОПИРОВАТЬ test.txt / absoluteDir /
При копировании файлов или каталогов, содержащих специальные символы (например, [
и ]
), вам нужно избегать этих путей, следуя правилам Голанга, чтобы предотвратить
их не рассматривать как совпадающий образец. Например, чтобы скопировать файл
с именем arr [0] .txt
, используйте следующее;
КОПИЯ обр. [[] 0].txt / mydir /
Все новые файлы и каталоги создаются с UID и GID, равными 0, если только
необязательный флаг --chown
указывает заданное имя пользователя, имя группы или UID / GID
комбинация, чтобы запросить конкретное право собственности на скопированный контент. В
формат флага --chown
позволяет использовать строки имени пользователя и группы.
или прямые целочисленные UID и GID в любой комбинации. Предоставление имени пользователя без
groupname или UID без GID будут использовать тот же числовой UID, что и GID.Если
указывается имя пользователя или группы, корневая файловая система контейнера
Для перевода будут использоваться файлы / etc / passwd
и / etc / group
.
от имени до целого UID или GID соответственно. Следующие примеры показывают
допустимые определения для флага --chown
:
КОПИЯ --chown = 55: файлы mygroup * / somedir /
КОПИРОВАТЬ --chown = bin файлы * / somedir /
КОПИРОВАТЬ --chown = 1 файл * / somedir /
КОПИРОВАТЬ --chown = 10: 11 файлов * / somedir /
Если корневая файловая система контейнера не содержит / etc / passwd
или
/ etc / group
файлов и имена пользователей или групп используются в --chown
флаг, сборка завершится ошибкой при операции КОПИРОВАТЬ
.Использование числовых идентификаторов требует
нет поиска и не зависит от содержимого корневой файловой системы контейнера.
Примечание
При сборке с использованием STDIN (сборка докеров
-
) нет
контекста сборки, поэтомуCOPY
использовать нельзя.
Необязательно COPY
принимает флаг --from =
, который можно использовать для установки
исходное местоположение на предыдущем этапе сборки (созданное с помощью FROM .. AS
)
который будет использоваться вместо контекста сборки, отправленного пользователем.В случае сборки
этап с указанным именем не может быть найден изображение с таким же именем
попытался использовать вместо этого.
COPY
подчиняется следующим правилам:
Путь
вы не можетеCOPY ../something / something
, потому что первый шаг
docker build
- отправить контекстный каталог (и подкаталоги) в
демон докера.Если
включая метаданные файловой системы.
Примечание
Сам каталог не копируется, только его содержимое.
Если
его метаданные. В этом случае, если/
, это
будет считаться каталогом и будет записано содержимое
по адресу/ base ( ) Если указано несколько ресурсов
использование подстановочного знака, тогда
косая черта/
.Если
обычный файл, а содержимоеЕсли
на своем пути.
Примечание
Первая обнаруженная инструкция
COPY
сделает кеш недействительным для всех
следуя инструкциям из файла Dockerfile, если содержимоеимеет
измененный. Это включает в себя недействительность кеша дляRUN
инструкций.
См.Dockerfile
Best Practices.
руководство - Использование кеша сборки
для дополнительной информации.
ВХОД
ENTRYPOINT имеет две формы:
Форма exec , которая является предпочтительной формой:
ENTRYPOINT ["исполняемый файл", "параметр1", "параметр2"]
Оболочка форма:
ENTRYPOINT команда param1 param2
ENTRYPOINT
позволяет настроить контейнер, который будет работать как исполняемый файл.
Например, следующий запускает nginx с содержимым по умолчанию, прослушивая
на порту 80:
$ docker run -i -t --rm -p 80:80 nginx
Аргументы командной строки для docker run
будут добавлены в конце концов
элементы в exec формируют ENTRYPOINT
, и переопределят все указанные элементы
используя CMD
.
Это позволяет передавать аргументы в точку входа, то есть docker run
передаст аргумент -d
точке входа.Вы можете переопределить инструкцию ENTRYPOINT
, используя команду docker run --entrypoint
флаг.
Форма оболочки предотвращает использование аргументов командной строки CMD
или run
.
используется, но имеет тот недостаток, что ваш ENTRYPOINT
будет запускаться как
подкоманда / bin / sh -c
, которая не передает сигналы.
Это означает, что исполняемый файл не будет PID 1
контейнера - и
будет не получать сигналы Unix - поэтому ваш исполняемый файл не получит
SIGTERM
из docker stop
.
Только последняя инструкция ENTRYPOINT
в файле Dockerfile
будет иметь эффект.
Exec form Пример ENTRYPOINT
Вы можете использовать форму exec из ENTRYPOINT
для установки довольно стабильных команд по умолчанию.
и аргументы, а затем используйте любую форму CMD
для установки дополнительных значений по умолчанию, которые
с большей вероятностью будут изменены.
ОТ ubuntu
ENTRYPOINT ["верх", "-b"]
CMD ["-c"]
Когда вы запустите контейнер, вы увидите, что top
- единственный процесс:
$ docker run -it --rm --name test top -H
наверх - 08:25:00 до 7:27, пользователей 0, средняя загрузка: 0.00, 0,01, 0,05
Темы: всего 1, 1 запущен, 0 спит, 0 остановлен, 0 зомби
% ЦП: 0,1 мкс, 0,1 сингл, 0,0 нi, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: всего 2056668, использовано 1616832, свободно 439836, буферов 99352
KiB Swap: всего 1441840, 0 используется, 1441840 бесплатно. 1324440 кэшированных Mem
PID ПОЛЬЗОВАТЕЛЬ PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND
1 корень 20 0 19744 2336 2080 R 0,0 0,1 0: 00,04 верх
Для дальнейшего изучения результата вы можете использовать docker exec
:
$ docker exec -it test ps aux
USER PID% CPU% MEM VSZ RSS TTY STAT ВРЕМЯ НАЧАЛА КОМАНДА
корень 1 2.6 0,1 19752 2352? Сс + 08:24 0:00 наверх -b -H
корень 7 0,0 0,1 15572 2164? R + 08:25 0:00 пс доп.
И вы можете изящно запросить завершение работы top
с помощью docker stop test
.
В следующем файле Dockerfile
показано использование ENTRYPOINT
для запуска Apache в
передний план (т.е. как PID 1
):
ОТ debian: стабильный
ЗАПУСТИТЬ apt-get update && apt-get install -y --force-yes apache2
ВЫБРАТЬ 80 443
ТОМ ["/ var / www", "/ var / log / apache2", "/ etc / apache2"]
ENTRYPOINT ["/ usr / sbin / apache2ctl", "-D", "FOREGROUND"]
Если вам нужно написать стартовый сценарий для одного исполняемого файла, вы можете убедиться, что
последний исполняемый файл получает сигналы Unix, используя exec
и gosu
команды:
#! / Usr / bin / env bash
set -e
если ["$ 1" = 'postgres']; тогда
chown -R postgres "$ PGDATA"
если [-z "$ (ls -A" $ PGDATA ")"]; тогда
gosu postgres initdb
фи
exec gosu postgres "$ @"
фи
exec "$ @"
Наконец, если вам нужно выполнить дополнительную очистку (или связаться с другими контейнерами)
при завершении работы или координируете более одного исполняемого файла, вам может потребоваться
что сценарий ENTRYPOINT
получает сигналы Unix, передает их, а затем
работает еще:
#! / Bin / sh
# Примечание: я написал это с помощью sh, поэтому он работает и в контейнере busybox
# ИСПОЛЬЗУЙТЕ ловушку, если вам нужно также выполнить ручную очистку после остановки службы,
# или вам нужно запустить несколько сервисов в одном контейнере
trap "эхо TRAPed signal" HUP INT QUIT TERM
# запустить службу в фоновом режиме здесь
/ usr / sbin / начало apachectl
echo "[нажмите клавишу ввода для выхода] или запустите 'docker stop '"
читать
# остановить обслуживание и очистить здесь
эхо "остановка Apache"
/ usr / sbin / apachectl стоп
echo "вышел из $ 0"
Если вы запустите этот образ с docker run -it --rm -p 80:80 --name test apache
,
затем вы можете исследовать процессы контейнера с помощью docker exec
или docker top
,
а затем попросите скрипт остановить Apache:
$ docker exec -it test ps aux
USER PID% CPU% MEM VSZ RSS TTY STAT ВРЕМЯ НАЧАЛА КОМАНДА
корень 1 0.1 0,0 4448 692? СС + 00:42 0:00 / bin / sh /run.sh 123 cmd cmd2
корень 19 0,0 0,2 71304 4440? Сс 00:42 0:00 / usr / sbin / apache2 -k start
www-data 20 0,2 0,2 360468 6004? Сл 00:42 0:00 / usr / sbin / apache2 -k start
www-data 21 0,2 0,2 360468 6000? Сл 00:42 0:00 / usr / sbin / apache2 -k start
корень 81 0,0 0,1 15572 2140? R + 00:44 0:00 пс доп.
$ docker top test
КОМАНДА ПОЛЬЗОВАТЕЛЯ PID
10035 root {run.ш} / bin / sh /run.sh 123 cmd cmd2
10054 корень / usr / sbin / apache2 -k start
10055 33 / usr / sbin / apache2 -k начало
10056 33 / usr / sbin / apache2 -k начало
$ / usr / bin / time тест остановки докера
контрольная работа
реальный 0 м 0,27 с
пользователь 0 м 0,03 с
sys 0m 0,03 с
Примечание
Вы можете изменить настройку
ENTRYPOINT
, используя--entrypoint
,
но это может установить только двоичный файл exec (sh -c
использоваться не будет).
Примечание
Форма exec анализируется как массив JSON, что означает, что
вы должны заключать слова в двойные кавычки («), а не в одинарные кавычки (»).
В отличие от формы оболочки , форма exec не вызывает командную оболочку.
Это означает, что нормальной обработки оболочки не происходит. Например,
ENTRYPOINT ["echo", "$ HOME"]
не будет выполнять подстановку переменных в $ HOME
.Если вам нужна обработка оболочки, либо используйте форму оболочки , либо выполните
оболочку напрямую, например: ENTRYPOINT ["sh", "-c", "echo $ HOME"]
.
При использовании формы exec и непосредственном выполнении оболочки, как в случае с
форма оболочки, это оболочка, которая выполняет переменную среды
расширение, а не докер.
Форма оболочки Пример ENTRYPOINT
Вы можете указать простую строку для ENTRYPOINT
, и она будет выполняться в / bin / sh -c
.Эта форма будет использовать обработку оболочки для замены переменных среды оболочки,
и будет игнорировать любые аргументы командной строки CMD
или , запускаемые докером
.
Чтобы гарантировать, что docker stop
будет сигнализировать о любом длительно работающем исполняемом файле ENTRYPOINT
правильно, вам нужно не забыть запустить его с exec
:
ОТ ubuntu
ENTRYPOINT exec top -b
Когда вы запустите этот образ, вы увидите единственный процесс PID 1
:
$ docker run -it --rm --name test top
Mem: 1704520K используется, 352148K бесплатно, 0K shrd, 0K buff, 140368121167873K кэшировано
ЦП: 5% usr 0% sys 0% nic 94% idle 0% io 0% irq 0% sirq
Средняя нагрузка: 0.08 0,03 0,05 2/98 6
PID PPID СТАТИСТИКА ПОЛЬЗОВАТЕЛЯ VSZ% VSZ% КОМАНДА ЦП
1 0 корень R 3164 0% 0% top -b
Который аккуратно выходит на докер-остановку
:
$ / usr / bin / time docker stop test
контрольная работа
реальный 0 м 0,20 с
пользователь 0 м 0,02 с
sys 0m 0,04 с
Если вы забыли добавить exec
в начало вашего ENTRYPOINT
:
ОТ ubuntu
ENTRYPOINT top -b
CMD --ignored-param1
Затем вы можете запустить его (присвоив ему имя для следующего шага):
$ docker run -it --name test top --ignored-param2
Mem: 1704184K используется, 352484K бесплатно, 0K shrd, 0K buff, 140621524238337K кэшировано
ЦП: 9% usr 2% sys 0% nic 88% idle 0% io 0% irq 0% sirq
Средняя нагрузка: 0.01 0,02 0,05 2/101 7
PID PPID СТАТИСТИКА ПОЛЬЗОВАТЕЛЯ VSZ% VSZ% КОМАНДА ЦП
1 0 корень S 3168 0% 0% / bin / sh -c top -b cmd cmd2
7 1 корень R 3164 0% 0% top -b
Из вывода top
видно, что указанный ENTRYPOINT
не является PID 1
.
Если вы затем запустите docker stop test
, контейнер не выйдет правильно -
stop
команда будет принудительно отправить SIGKILL
после тайм-аута:
$ docker exec -it test ps aux
КОМАНДА ПОЛЬЗОВАТЕЛЯ PID
1 корень / bin / sh -c top -b cmd cmd2
7 корень верхний -b
8 корневых ps aux
$ / usr / bin / time тест остановки докера
контрольная работа
реальный 0м 10.19 с
пользователь 0 м 0,04 с
sys 0m 0,03 с
Понять, как взаимодействуют CMD и ENTRYPOINT
Инструкции CMD
и ENTRYPOINT
определяют, какая команда выполняется при запуске контейнера.
Есть несколько правил, описывающих их сотрудничество.
Dockerfile должен указывать хотя бы одну из команд
CMD
илиENTRYPOINT
.ENTRYPOINT
должен быть определен при использовании контейнера в качестве исполняемого файла.CMD
следует использовать как способ определения аргументов по умолчанию для командыENTRYPOINT
или для выполнения специальной команды в контейнере.CMD
будет переопределено при запуске контейнера с альтернативными аргументами.
В таблице ниже показано, какая команда выполняется для различных комбинаций ENTRYPOINT
/ CMD
:
№ ВХОДА | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT [«exec_entry», «p1_entry»] | |
---|---|---|---|
Нет CMD | ошибка , не допускается | / bin / sh -c exec_entry p1_entry | exec_entry p1_entry |
CMD [«exec_cmd», «p1_cmd»] | exec_cmd p1_cmd | / bin / sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
CMD [«p1_cmd», «p2_cmd»] | p1_cmd p2_cmd | / bin / sh -c exec_entry p1_entry | exec_entry p1_entry p1_cmd p2_cmd |
CMD exec_cmd p1_cmd | / bin / sh -c exec_cmd p1_cmd | / bin / sh -c exec_entry p1_entry | exec_entry p1_entry / bin / sh -c exec_cmd p1_cmd |
Примечание
Если
CMD
определяется из базового образа, установкаENTRYPOINT
будет
сброситьCMD
на пустое значение.В этом сценарииCMD
должен быть определен в
текущее изображение имеет значение.
ОБЪЕМ
Инструкция VOLUME
создает точку монтирования с указанным именем
и помечает его как хранящие внешние тома с собственного хоста или другого
контейнеры. Значение может быть массивом JSON, VOLUME ["/ var / log /"]
или обычным
строка с несколькими аргументами, например VOLUME / var / log
или VOLUME / var / log
. Для получения дополнительной информации / примеров и инструкций по монтажу через
/ var / db
Клиент Docker, см.
общих каталогов в томах
документация.
Команда docker run
инициализирует вновь созданный том любыми данными.
который существует в указанном месте в базовом образе. Например,
рассмотрите следующий фрагмент Dockerfile:
ОТ ubuntu
ЗАПУСК mkdir / myvol
RUN echo "hello world"> / myvol / приветствие
ОБЪЕМ / мивол
Этот файл Dockerfile приводит к созданию образа, который заставляет запускать докер
, чтобы
создайте новую точку монтирования по адресу / myvol
и скопируйте файл приветствия
во вновь созданный том.
Примечания об указании томов
Помните о томах в Dockerfile
.
Тома в контейнерах на базе Windows : при использовании контейнеров на базе Windows
место назначения тома внутри контейнера должно быть одним из:- несуществующий или пустой каталог
- привод, отличный от
C:
Изменение громкости из Dockerfile : Если какие-либо шаги сборки изменят
данные в томе после того, как они были объявлены, эти изменения будут отменены.Форматирование JSON : список анализируется как массив JSON.
Вы должны заключать слова в двойные кавычки ("
), а не в одинарные кавычки ('
).Каталог хоста объявлен во время выполнения контейнера : Каталог хоста
(точка монтирования) по своей природе зависит от хоста. Это для сохранения имиджа
переносимость, поскольку не может быть гарантирована доступность заданного каталога хоста
на всех хостах.По этой причине вы не можете смонтировать каталог хоста из
в Dockerfile. ИнструкцияVOLUME
не поддерживает указаниеhost-dir
параметр. Вы должны указать точку монтирования при создании или запуске контейнера.
ПОЛЬЗОВАТЕЛЬ
или
Инструкция USER
устанавливает имя пользователя (или UID) и, возможно, пользователя
группа (или GID) для использования при запуске образа и для любых RUN
, CMD
и
ENTRYPOINT
, которые следуют за ним в файле Dockerfile
.
Обратите внимание, что при указании группы для пользователя у пользователя будет только
указанное членство в группе. Любое другое настроенное членство в группах будет проигнорировано.
Предупреждение
Если у пользователя нет основной группы, тогда изображение (или следующее
инструкции) будет запущен с корневой группой.
В Windows сначала необходимо создать пользователя, если это не встроенная учетная запись.
Это можно сделать с помощью командыnet user
, вызываемой как часть файла Dockerfile.
ОТ microsoft / windowsservercore
# Создать пользователя Windows в контейнере
RUN net user / добавить патрика
# Установите его для последующих команд
ПОЛЬЗОВАТЕЛЬ патрик
WORKDIR
Инструкция WORKDIR
устанавливает рабочий каталог для любых RUN
, CMD
,
ENTRYPOINT
, COPY
и ADD
инструкции, которые следуют за ним в Dockerfile
.
Если WORKDIR
не существует, он будет создан, даже если он не используется ни в одном
последующая инструкция Dockerfile
.
Инструкцию WORKDIR
можно использовать несколько раз в файле Dockerfile
. Если
указан относительный путь, он будет относительно пути предыдущего
WORKDIR
инструкция. Например:
WORKDIR / a
РАБОЧИЙ ДИРЕК b
WORKDIR c
RUN pwd
Результат последней команды pwd
в этом файле Dockerfile
будет / a / b / c
.
Команда WORKDIR
может разрешить переменные среды, ранее установленные с помощью
ENV
.Вы можете использовать только переменные среды, явно заданные в Dockerfile
.
Например:
ENV DIRPATH = / путь
WORKDIR $ DIRPATH / $ DIRNAME
RUN pwd
Результат последней команды pwd
в этом файле Dockerfile
будет
/ путь / $ DIRNAME
ARG
ARG <имя> [= <значение по умолчанию>]
Инструкция ARG
определяет переменную, которую пользователи могут передавать во время сборки в
построитель с помощью команды docker build
с использованием --build-arg
флаг.Если пользователь указывает аргумент сборки, который не был
определенный в Dockerfile, сборка выводит предупреждение.
[Предупреждение] Один или несколько аргументов сборки [foo] не использовались.
Dockerfile может содержать одну или несколько инструкций ARG
. Например,
это действительный файл Dockerfile:
ОТ busybox
ARG user1
ARG buildno
# ...
Предупреждение:
Не рекомендуется использовать переменные времени сборки для передачи секретов, например
ключи github, учетные данные пользователя и т. д.Значения переменных времени сборки видны
любой пользователь образа с помощью командыdocker history
.См. «Сборку образов с помощью BuildKit».
раздел, чтобы узнать о безопасных способах использования секретов при создании изображений.
Значения по умолчанию
Команда ARG
может дополнительно включать значение по умолчанию:
ОТ busybox
ARG user1 = someuser
ARG buildno = 1
# ...
Если команда ARG
имеет значение по умолчанию и если значение не передано
во время сборки построитель использует значение по умолчанию.
Область применения
Определение переменной ARG
вступает в силу со строки, на которой оно
определено в Dockerfile
не из использования аргумента в командной строке или
в другом месте. Например, рассмотрим этот Dockerfile:
ОТ busybox
ПОЛЬЗОВАТЕЛЬ $ {пользователь: -some_user}
Пользователь ARG
USER $ пользователь
# ...
Пользователь создает этот файл, позвонив:
$ docker build --build-arg user = what_user.
USER
в строке 2 оценивается как some_user
, поскольку переменная user
определена в
следующая строка 3. ПОЛЬЗОВАТЕЛЬ
в строке 4 оценивается как what_user
как пользователь
определено, и значение what_user
было передано в командной строке. До его определения
ARG
инструкция, любое использование переменной приводит к пустой строке.
Инструкция ARG
выходит за рамки в конце сборки
этап, на котором это было определено. Чтобы использовать аргумент на нескольких этапах, каждый этап должен
включить инструкцию ARG
.
ОТ busybox
НАСТРОЙКИ ARG
ЗАПУСТИТЬ ./ run / setup $ НАСТРОЙКИ
ОТ busybox
НАСТРОЙКИ ARG
RUN ./run/другие $ НАСТРОЙКИ
Использование переменных ARG
Вы можете использовать команду ARG
или ENV
, чтобы указать переменные, которые
доступный для инструкции RUN
. Переменные среды, определенные с помощью
ENV
инструкция всегда имеет приоритет над одноименной инструкцией ARG
. Рассмотреть возможность
этот Dockerfile с инструкциями ENV
и ARG
.
ОТ ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER = v1.0.0
RUN echo $ CONT_IMG_VER
Тогда предположим, что этот образ создан с помощью этой команды:
$ docker build --build-arg CONT_IMG_VER = v2.0.1.
В этом случае инструкция RUN
использует v1.0.0
вместо настройки ARG
передано пользователем: v2.0.1
Это поведение похоже на оболочку
сценарий, в котором переменная с локальной областью видимости переопределяет переменные, переданные как
аргументы или унаследованные от окружения с точки его определения.
Используя приведенный выше пример, но другую спецификацию ENV
, вы можете создать больше
полезные взаимодействия между ARG
и ENV
инструкции:
ОТ ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER = $ {CONT_IMG_VER: -v1.0.0}
RUN echo $ CONT_IMG_VER
В отличие от инструкции ARG
, значения ENV
всегда сохраняются во встроенном
изображение. Рассмотрим сборку докеров без флага --build-arg
:
Используя этот пример Dockerfile, CONT_IMG_VER
все еще сохраняется в образе, но
его значение будет v1.0.0
, поскольку это значение по умолчанию установлено в строке 3 инструкцией ENV
.
Метод расширения переменных в этом примере позволяет передавать аргументы
из командной строки и сохраните их в окончательном образе, используя
ENV
инструкция. Расширение переменных поддерживается только для ограниченного набора
Инструкции Dockerfile.
Предопределенные группы ARG
Docker имеет набор предопределенных переменных ARG
, которые можно использовать без
соответствующая инструкция ARG
в Dockerfile.
-
HTTP_PROXY
-
http_proxy
-
HTTPS_PROXY
-
https_proxy
-
FTP_PROXY
-
ftp_proxy
-
NO_PROXY
-
no_proxy
Чтобы использовать их, передайте их в командной строке с помощью флага --build-arg
для
пример:
$ docker build --build-arg HTTPS_PROXY = https: // мой-прокси.example.com.
По умолчанию эти предопределенные переменные исключаются из вывода
история докеров
. Их исключение снижает риск случайной утечки.
конфиденциальная информация аутентификации в переменной HTTP_PROXY
.
Например, рассмотрите возможность создания следующего Dockerfile, используя
--build-arg HTTP_PROXY = http: // user: [email protected]
ОТ ubuntu
RUN echo "Hello World"
В этом случае значение переменной HTTP_PROXY
недоступно в
история докеров
и не кешируется.Если бы вы изменили местоположение, и ваш
прокси-сервер изменен на http: // user: [email protected]
, последующий
build не приводит к пропуску кеша.
Если вам нужно изменить это поведение, вы можете сделать это, добавив ARG
заявление в Dockerfile следующим образом:
ОТ ubuntu
ARG HTTP_PROXY
RUN echo "Hello World"
При создании этого файла Dockerfile HTTP_PROXY
сохраняется в
история докеров
, и изменение его значения делает недействительным кеш сборки.
Автоматические платформенные ARG в глобальном масштабе
Эта функция доступна только при использовании серверной части BuildKit.
Docker предопределяет набор из переменных ARG
с информацией о платформе
узел, выполняющий сборку (платформа сборки) и на платформе
результирующее изображение (целевая платформа). Целевая платформа может быть указана с помощью
флаг --platform
в сборке docker build
.
Следующие переменные ARG
устанавливаются автоматически:
-
TARGETPLATFORM
- платформа результата сборки.Например,linux / amd64
,linux / arm / v7
,windows / amd64
. -
TARGETOS
- компонент ОС TARGETPLATFORM -
TARGETARCH
- компонент архитектуры TARGETPLATFORM -
TARGETVARIANT
- вариантный компонент TARGETPLATFORM -
BUILDPLATFORM
- платформа узла, выполняющего сборку. -
BUILDOS
- компонент ОС BUILDPLATFORM -
BUILDARCH
- компонент архитектуры BUILDPLATFORM -
BUILDVARIANT
- вариантный компонент BUILDPLATFORM
Эти аргументы определены в глобальной области, поэтому автоматически не
доступно внутри этапов сборки или для команд RUN
.Разоблачить одну из
эти аргументы внутри стадии сборки переопределяют его без значения.
Например:
ОТ альпийский
ЦЕЛЕВАЯ ПЛАТФОРМА ARG
RUN echo "Я создаю для $ TARGETPLATFORM"
Влияние на кеширование сборки
ARG Переменные
не сохраняются в построенном образе, как переменные ENV
.
Однако переменные ARG
действительно влияют на кеш сборки аналогичным образом. Если
Dockerfile определяет переменную ARG
, значение которой отличается от предыдущего
build, то при первом использовании происходит «промах в кэше», а не при его определении.В
в частности, все инструкции RUN
, следующие за инструкцией ARG
, используют ARG
переменная неявно (как переменная среды), что может вызвать промах в кеше.
Все предопределенные переменные ARG
освобождаются от кеширования, если нет
соответствует оператору ARG
в файле Dockerfile
.
Например, рассмотрим эти два файла Dockerfile:
ОТ ubuntu
ARG CONT_IMG_VER
RUN echo $ CONT_IMG_VER
ОТ ubuntu
ARG CONT_IMG_VER
RUN echo привет
Если вы укажете --build-arg CONT_IMG_VER =
в командной строке, в обоих
случаях спецификация в строке 2 не вызывает промахов в кэше; строка 3 делает
вызвать промах кеша. ARG CONT_IMG_VER
вызывает идентификацию строки RUN
аналогично запуску CONT_IMG_VER =
, поэтому, если
изменения, мы получаем промах кеша.
Рассмотрим другой пример в той же командной строке:
ОТ ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER = $ CONT_IMG_VER
RUN echo $ CONT_IMG_VER
В этом примере промах кэша происходит в строке 3. Промах случается из-за того, что
значение переменной в ENV
ссылается на переменную ARG
и это
переменная изменяется через командную строку.В этом примере ENV
команда заставляет изображение включать значение.
Если инструкция ENV
переопределяет инструкцию ARG
с тем же именем, например
этот Dockerfile:
ОТ ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER = привет
RUN echo $ CONT_IMG_VER
Строка 3 не вызывает промаха кеша, потому что значение CONT_IMG_VER
является
константа ( привет
). В результате переменные среды и значения, используемые в
RUN
(строка 4) не меняется между сборками.
СТРОИТЕЛЬСТВО
Команда ONBUILD
добавляет к изображению команду trigger , чтобы
выполняться позже, когда изображение используется в качестве основы для
другая сборка. Триггер будет выполнен в контексте
последующая сборка, как если бы она была вставлена сразу после
FROM
в последующем файле Dockerfile
.
Любая инструкция сборки может быть зарегистрирована как триггер.
Это полезно, если вы создаете изображение, которое будет использоваться в качестве основы.
для создания других образов, например среды сборки приложения или
демон, который можно настроить в соответствии с настройками пользователя.
Например, если ваше изображение является многоразовым конструктором приложений Python, оно
потребует, чтобы исходный код приложения был добавлен в конкретный
каталог, и может потребоваться, чтобы сценарий сборки вызывал после
что. Вы не можете просто позвонить по ADD
и RUN
сейчас, потому что вы еще не
иметь доступ к исходному коду приложения, и он будет другим для
каждая сборка приложения. Вы можете просто предоставить разработчикам приложений
с шаблоном Dockerfile
для копирования и вставки в свое приложение, но
это неэффективно, подвержено ошибкам и сложно обновлять, потому что
смешивается с кодом конкретного приложения.
Решение состоит в том, чтобы использовать ONBUILD
для регистрации предварительных инструкций в
запустить позже, на следующем этапе сборки.
Вот как это работает:
- Когда он встречает инструкцию
ONBUILD
, построитель добавляет
запускать метаданные создаваемого изображения. Инструкция
иначе не влияет на текущую сборку. - В конце сборки список всех триггеров сохраняется в
манифест образа, под ключомOnBuild
.Их можно проверить с помощью
Докерпроверяет команду
. - Позже образ может быть использован в качестве основы для новой сборки, используя
ИЗ инструкции
. В рамках обработки инструкцииFROM
,
нисходящий компоновщик ищет триггерыONBUILD
и выполняет
их в том же порядке, в котором они были зарегистрированы. Если какой-либо из триггеров
сбой, командаFROM
прерывается, что, в свою очередь, вызывает
построить, чтобы потерпеть неудачу. Если все триггеры выполнены успешно, инструкцияFROM
завершается, и сборка продолжается как обычно. - Триггеры удаляются из окончательного изображения после выполнения. В
Другими словами, они не наследуются «внуками».
Например, вы можете добавить что-то вроде этого:
ДОБАВИТЬ ДОБАВИТЬ. / приложение / src
ONBUILD RUN / usr / local / bin / python-build --dir / app / src
Предупреждение
Цепочка инструкций
ONBUILD
с использованиемONBUILD ONBUILD
не допускается.
Предупреждение
Команда
ONBUILD
не может запускать командыFROM
илиMAINTAINER
.
СИГНАЛ ОСТАНОВА
Команда STOPSIGNAL
устанавливает сигнал системного вызова, который будет отправлен в контейнер для выхода.
Этот сигнал может быть действительным числом без знака, которое соответствует позиции в таблице системных вызовов ядра, например 9,
или имя сигнала в формате SIGNAME, например SIGKILL.
ЗДОРОВЬЕ
Инструкция HEALTHCHECK
имеет две формы:
-
HEALTHCHECK [OPTIONS] Команда CMD
(проверьте состояние контейнера, запустив команду внутри контейнера) -
HEALTHCHECK NONE
(отключить любую проверку работоспособности, унаследованную от базового образа)
Инструкция HEALTHCHECK
сообщает Docker, как тестировать контейнер, чтобы проверить, что
он все еще работает.Это может обнаружить такие случаи, как застревание веб-сервера в
бесконечный цикл и неспособность обрабатывать новые соединения, даже если сервер
процесс все еще продолжается.
Когда для контейнера задана проверка работоспособности, он имеет состояние здоровья в
в дополнение к его нормальному статусу. Этот статус изначально равен , начиная с
. Всякий раз, когда
проверка работоспособности проходит, он становится исправным
(в каком бы состоянии он ни находился ранее).
После определенного количества последовательных отказов становится неработоспособным
.
Опции, которые могут появиться перед CMD
:
-
--interval = DURATION
(по умолчанию:30s
) -
--timeout = DURATION
(по умолчанию:30s
) -
--start-period = DURATION
(по умолчанию:0s
) -
--retries = N
(по умолчанию:3
)
Проверка работоспособности сначала запустится с интервалом секунды после того, как контейнер
начался, а затем снова интервал секунды после завершения каждой предыдущей проверки.
Если один запуск проверки занимает больше времени, чем тайм-аут секунды, то проверка
считается потерпевшим неудачу.
Требуется повторных попыток последовательных сбоя проверки работоспособности контейнера
считаться нездоровой
.
начальный период обеспечивает время инициализации для контейнеров, которым требуется время для начальной загрузки.
Отказ датчика в течение этого периода не будет засчитан в максимальное количество повторных попыток.
Однако, если проверка работоспособности прошла успешно в течение начального периода, контейнер считается
началось, и все последовательные сбои будут засчитываться в максимальное количество повторных попыток.
В Dockerfile может быть только одна инструкция HEALTHCHECK
. Если вы перечислите
более одного, тогда будут действовать только последние HEALTHCHECK
.
Команда после ключевого слова CMD
может быть командой оболочки (например, HEALTHCHECK
) или массив exec (как и другие команды Dockerfile;
CMD / bin / check-running
см. например ENTRYPOINT
для подробностей).
Состояние выхода команды указывает на состояние работоспособности контейнера.Возможные значения:
- 0: успех - емкость исправна и готова к использованию
- 1: неисправно - контейнер работает некорректно
- 2: зарезервировано - не использовать этот код выхода
Например, каждые пять минут проверять, может ли веб-сервер
показать главную страницу сайта за три секунды:
HEALTHCHECK --interval = 5m --timeout = 3s \
CMD curl -f http: // localhost / || выход 1
Для облегчения отладки неисправных зондов любой выходной текст (в кодировке UTF-8), записываемый командой
на stdout или stderr будет храниться в состоянии работоспособности и может быть запрошен с помощью
, докер, осмотр
.Такой вывод должен быть коротким (только первые 4096 байт).
хранятся в настоящее время).
При изменении состояния работоспособности контейнера возникает событие health_status
.
с новым статусом.
ОБОЛОЧКА
SHELL [«исполняемый файл», «параметры»]
Команда SHELL
позволяет использовать оболочку по умолчанию для оболочки .
команды, которые нужно переопределить. Оболочка по умолчанию в Linux - ["/ bin / sh", "-c"]
и далее
Windows - ["cmd", "/ S", "/ C"]
.Команда SHELL
должна быть записана в формате JSON.
форма в Dockerfile.
Инструкция SHELL
особенно полезна в Windows, где есть
две часто используемые и совершенно разные собственные оболочки: cmd
и powershell
, как
Также доступны альтернативные снаряды, включая sh
.
Команда SHELL
может появляться несколько раз. Каждая инструкция SHELL
отменяет
все предыдущие инструкции SHELL
и влияют на все последующие инструкции.Например:
ОТ microsoft / windowsservercore
# Выполняется как cmd / S / C echo по умолчанию
RUN echo по умолчанию
# Выполняется как cmd / S / C powershell -команда Write-Host по умолчанию
RUN powershell - команда Write-Host по умолчанию
# Выполняется как powershell -command Write-Host hello
ОБОЛОЧКА ["powershell", "-команда"]
RUN Write-Host привет
# Выполняется как cmd / S / C echo hello
SHELL ["cmd", "/ S", "/ C"]
RUN echo привет
На следующие инструкции может воздействовать команда SHELL
, когда
shell из них используется в Dockerfile: RUN
, CMD
и ENTRYPOINT
.
Следующий пример представляет собой распространенный шаблон, который можно найти в Windows.
оптимизировано с помощью инструкции SHELL
:
RUN powershell -команда Execute-MyCmdlet -param1 "c: \ foo.txt"
Докер запускает команду:
cmd / S / C powershell -команда Execute-MyCmdlet -param1 "c: \ foo.txt"
Это неэффективно по двум причинам. Во-первых, есть ненужная команда cmd.exe
вызываемый процессор (он же оболочка).Во-вторых, каждая инструкция RUN
в оболочке
форма требует дополнительной powershell -команды
перед командой.
Чтобы сделать это более эффективным, можно использовать один из двух механизмов. Один должен
используйте JSON-форму команды RUN, например:
RUN ["powershell", "-command", "Execute-MyCmdlet", "-param1 \" c: \\ foo.txt \ ""]
Хотя форма JSON однозначна и не использует ненужный cmd.exe,
это требует большей многословности за счет двойных кавычек и экранирования.Альтернативный
механизм должен использовать инструкцию SHELL
и форму оболочки ,
сделать синтаксис более естественным для пользователей Windows, особенно в сочетании с
директива парсера escape
:
# escape = `
С microsoft / nanoserver
SHELL ["powershell", "- команда"]
RUN New-Item -ItemType Directory C: \ Example
ДОБАВИТЬ Execute-MyCmdlet.ps1 c: \ example \
ЗАПУСТИТЬ c: \ example \ Execute-MyCmdlet -sample 'hello world'
Результат:
PS E: \ myproject> docker build -t shell.Отправка контекста сборки демону Docker 4.096 КБ
Шаг 1/5: С microsoft / nanoserver
---> 22738ff49c6d
Шаг 2/5: SHELL powershell -команда
---> Запуск в 6fcdb6855ae2
---> 6331462d4300
Снятие промежуточного контейнера 6fcdb6855ae2
Шаг 3/5: ЗАПУСК New-Item -ItemType Directory C: \ Example
---> Запуск в d0eef8386e97
Каталог: C: \
Режим LastWriteTime Длина Имя
---- ------------- ------ ----
г ----- 28.10.2016 11:26 Пример
---> 3f2fbf1395d9
Снятие промежуточного контейнера d0eef8386e97
Шаг 4/5: ДОБАВИТЬ Execute-MyCmdlet.ps1 c: \ example \
---> a955b2621c31
Снятие промежуточного контейнера b825593d39fc
Шаг 5/5: ЗАПУСТИТЬ c: \ example \ Execute-MyCmdlet 'hello world'
---> Запуск в be6d8e63fe75
Привет мир
---> 8e559e9bf424
Снятие промежуточного контейнера be6d8e63fe75
Успешно построено 8e559e9bf424
PS E: \ myproject>
Команда SHELL
также может использоваться для изменения способа, которым
оболочка действует. Например, при использовании SHELL cmd / S / C / V: ON | OFF
в Windows с задержкой
семантика раскрытия переменных среды может быть изменена.
Команду SHELL
также можно использовать в Linux, если требуется альтернативная оболочка.
требуются такие как zsh
, csh
, tcsh
и другие.
Примеры Dockerfile
Примеры файлов Dockerfile:
построитель, докер, Dockerfile, автоматизация, создание образов
Создать файл | Документация Docker
Справочные материалы и руководства
В этих разделах описывается реализация Docker Compose формата Compose.Docker Compose 1.27.0+ реализует формат, определенный спецификацией Compose. Предыдущие версии Docker Compose поддерживали несколько форматов файлов Compose - 2, 2.x и 3.x. Спецификация Compose - это унифицированный формат файлов 2.x и 3.x, объединяющий свойства этих форматов.
Матрица совместимости Compose и Docker
Существует несколько версий формата файла Compose - 2, 2.x и 3.x. В
В таблице ниже представлены снимки различных версий.Для получения полной информации о том, что включает каждая версия и
как обновить, см. О версиях и обновлении .
В этой таблице показано, какие версии файлов Compose поддерживают определенные выпуски Docker.
Составить формат файла | Версия Docker Engine |
---|---|
Составить спецификацию | 19.03.0+ |
3,8 | 19.03.0+ |
3.7 | 18.06.0+ |
3,6 | 18.02.0+ |
3,5 | 17.12.0+ |
3,4 | 17.09.0+ |
3,3 | 17.06.0+ |
3,2 | 17.04.0+ |
3,1 | 1.13.1+ |
3,0 | 1.13.0+ |
2.4 | 17.12.0+ |
2,3 | 17.06.0+ |
2,2 | 1.13.0+ |
2,1 | 1.12.0+ |
2,0 | 1.10.0+ |
В дополнение к версиям формата файла Compose, указанным в таблице, функция Compose
сам находится в графике выпуска, как показано в Compose
выпуски, но версии в формате файлов
не обязательно увеличивать с каждым выпуском.Например, формат файла Compose
3.0 был впервые представлен в выпуске Compose
1.10.0 и версиями
постепенно в последующих выпусках.
Последний формат файла Compose определяется спецификацией Compose и реализуется Docker Compose 1.27.0+ .
Составить документацию
инжир, композиция, сочинение, докер
Томов | Kubernetes
Файлы на диске в контейнере недолговечны, что создает некоторые проблемы для
нетривиальные приложения при работе в контейнерах.Одна проблема
это потеря файлов при сбое контейнера. Кубелет перезапускает контейнер
но с чистым состоянием. Вторая проблема возникает при совместном использовании файлов
между контейнерами, работающими вместе в Pod
.
Абстракция тома Kubernetes
решает обе эти проблемы.
Предлагается знакомство со стручками.
Предпосылки
Докер имеет концепцию
объемы, хотя это
несколько более свободный и менее управляемый. Том Docker - это каталог на
диск или в другом контейнере.Докер обеспечивает объем
драйверов, но функциональность несколько ограничена.
Kubernetes поддерживает множество типов томов. Стручок
может использовать любое количество типов томов одновременно.
Типы эфемерных томов имеют время жизни контейнера, но постоянные тома существуют за пределами
срок службы капсулы. Когда под перестает существовать, Kubernetes уничтожает эфемерные тома;
однако Kubernetes не уничтожает постоянные тома.
Для любого типа тома в данном модуле данные сохраняются при перезапуске контейнера.
По своей сути том - это каталог, возможно, с некоторыми данными в нем, который
доступен для контейнеров в контейнере. Как появился этот каталог,
носитель, который поддерживает его, и его содержимое определяется конкретным
используемый тип тома.
Чтобы использовать том, укажите тома для Pod в .spec.volumes
и объявите, где монтировать эти тома в контейнеры в .spec.containers [*]. volumeMounts
.
Процесс в контейнере видит представление файловой системы, составленное из их Docker
имидж и объемы.Образ Docker
находится в корне иерархии файловой системы. Тома монтируются по указанным путям в пределах
Изображение. Тома не могут монтироваться на другие тома или иметь жесткие ссылки на
другие тома. Каждый контейнер в конфигурации Pod должен независимо указывать, где
смонтировать каждый том.
Типы томов
Kubernetes поддерживает несколько типов томов.
awsElasticBlockStore
Том awsElasticBlockStore
подключает Amazon Web Services (AWS)
Объем EBS в вашу капсулу.в отличие
emptyDir
, который стирается при удалении модуля, содержимое EBS
том сохраняются, и том отключается. Это означает, что
Том EBS может быть предварительно заполнен данными, и эти данные могут совместно использоваться модулями.
Примечание. Прежде чем использовать том EBS, необходимо создать том EBS с помощью
aws ec2 create-volume
или API AWS.
Существуют некоторые ограничения при использовании тома awsElasticBlockStore
:
- узлы, на которых работают поды, должны быть инстансами AWS EC2
- эти инстансы должны находиться в том же регионе и зоне доступности, что и том EBS
- EBS поддерживает только один инстанс EC2, монтирующий том
Создание тома AWS EBS
Прежде чем вы сможете использовать том EBS с модулем, его необходимо создать.
aws ec2 create-volume --availability-zone = eu-west-1a --size = 10 --volume-type = gp2
Убедитесь, что зона соответствует зоне, в которой вы установили кластер. Убедитесь, что размер и том EBS
типа подходят для вашего использования.
Пример конфигурации AWS EBS
apiVersion: v1
вид: Стручок
метаданные:
имя: test-ebs
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-контейнер
объем
- mountPath: / test-ebs
имя: тест-том
объемы:
- название: тест-том
# Этот том AWS EBS уже должен существовать.awsElasticBlockStore:
volumeID: "<идентификатор тома>"
fsType: ext4
Если том EBS разбит на разделы, вы можете указать необязательное поле partition: «<номер раздела>»
, чтобы указать, какой раздел монтировать.
AWS EBS CSI migration
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.17 [бета]
Функция CSIMigration
для awsElasticBlockStore
, если она включена, перенаправляет
все операции с плагином от существующего в дереве плагина до ebs.csi.aws.com
Контейнер
Драйвер интерфейса хранилища (CSI). Чтобы использовать эту функцию, AWS EBS CSI
Водитель
должны быть установлены в кластере и CSIMigration
и CSIMigrationAWS
бета-функции должны быть включены.
Завершена миграция AWS EBS CSI
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.17 [альфа]
Отключение загрузки подключаемого модуля хранилища awsElasticBlockStore
диспетчером контроллера
и kubelet установите флаг CSIMigrationAWSComplete
на true
.Для этой функции требуется драйвер ebs.csi.aws.com
Container Storage Interface (CSI), установленный на всех рабочих узлах.
azureDisk
Тип тома azureDisk
подключает диск данных Microsoft Azure в модуль.
Дополнительные сведения см. В подключаемом модуле тома azureDisk
.
azureDisk CSI migration
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.19 [бета]
Функция CSIMigration
для azureDisk
, если она включена, перенаправляет все операции над плагинами
из существующего плагина в дереве на диск .csi.azure.com
Контейнер
Драйвер интерфейса хранилища (CSI). Чтобы использовать эту функцию, Azure Disk CSI
Водитель
должны быть установлены в кластере и CSIMigration
и CSIMigrationAzureDisk
функции должны быть включены.
azureFile
Тип тома azureFile
подключает том Microsoft Azure File (SMB 2.1 и 3.0)
в капсулу.
Дополнительные сведения см. В подключаемом модуле тома azureFile
.
azureFile CSI migration
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.21 [бета]
Функция CSIMigration
для azureFile
, если она включена, перенаправляет все операции плагина
из существующего внутреннего плагина в контейнер file.csi.azure.com
Драйвер интерфейса хранилища (CSI). Чтобы использовать эту функцию, CSI файла Azure
Водитель
должны быть установлены в кластере и CSIMigration
и CSIMigrationAzureFile
ворота функций должны быть включены.
Драйвер CSI для файлов Azure не поддерживает использование одного тома с разными fsgroups. Если включена миграция Azurefile CSI, использование одного тома с разными fsgroups не будет поддерживаться вообще.
cephfs
Том cephfs
позволяет существующему тому CephFS быть
установлен в вашу капсулу. В отличие от emptyDir
, который стирается, когда под
удалено, содержимое тома cephfs
сохраняется, и том просто
размонтированный. Это означает, что том cephfs
может быть предварительно заполнен данными, и
эти данные могут совместно использоваться модулями. Том cephfs
может быть смонтирован несколькими
писатели одновременно.
Примечание: У вас должен быть собственный сервер Ceph, работающий с экспортированным общим ресурсом, прежде чем вы сможете его использовать.
Подробнее см. В примере CephFS.
cinder
Примечание. Kubernetes должен быть настроен с помощью облачного провайдера OpenStack.
Тип тома cinder
используется для подключения тома OpenStack Cinder к модулю.
Пример конфигурации тома Cinder
apiVersion: v1
вид: Стручок
метаданные:
имя: test-cinder
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-шлак-контейнер
объем
- mountPath: / test-cinder
имя: тест-том
объемы:
- название: тест-том
# Этот том OpenStack уже должен существовать.шлак:
volumeID: "<идентификатор тома>"
fsType: ext4
Миграция OpenStack CSI
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.21 [бета]
Функция CSIMigration
для Cinder включена по умолчанию в Kubernetes 1.21.
Он перенаправляет все операции с плагином из существующего в дереве плагина в
cinder.csi.openstack.org
Драйвер интерфейса хранилища контейнеров (CSI).
Драйвер OpenStack Cinder CSI
должен быть установлен в кластере.Вы можете отключить миграцию Cinder CSI для своего кластера, установив CSIMigrationOpenStack
функция ворот к ложь
.
Если вы отключите функцию CSIMigrationOpenStack
, то ответственность возьмет на себя подключаемый модуль тома Cinder в дереве.
для всех аспектов управления объемным хранилищем Cinder.
configMap
A ConfigMap
предоставляет способ вставки данных конфигурации в поды.
На данные, хранящиеся в ConfigMap, можно ссылаться в томе типа
configMap
, а затем используется контейнерными приложениями, работающими в модуле.
При ссылке на ConfigMap вы указываете имя ConfigMap в
объем. Вы можете настроить путь, который будет использоваться для определенного
запись в ConfigMap. Следующая конфигурация показывает, как смонтировать
log-config
ConfigMap на Pod под названием configmap-pod
:
apiVersion: v1
вид: Стручок
метаданные:
имя: configmap-pod
спецификация:
контейнеры:
- название: тест
изображение: busybox
объем
- имя: config-vol
mountPath: / etc / config
объемы:
- имя: config-vol
configMap:
имя: log-config
Предметы:
- ключ: log_level
путь: log_level
log-config
ConfigMap монтируется как том, и все содержимое хранится в
его запись log_level
монтируется в Pod по пути / etc / config / log_level
.Обратите внимание, что этот путь является производным от mountPath
тома и пути
с ключом log_level
.
Примечание:
Необходимо создать ConfigMap
прежде чем вы сможете его использовать.Контейнер, использующий ConfigMap в качестве подключаемого тома
subPath
, не будет
получать обновления ConfigMap.Текстовые данные отображаются в виде файлов с кодировкой символов UTF-8. Для других кодировок символов используйте
binaryData
.
downwardAPI
Том downAPI
предоставляет приложениям доступ к данным API вниз.
Он монтирует каталог и записывает запрошенные данные в текстовые файлы.
Примечание: Контейнер, использующий нисходящий API в качестве монтирования тома подпути
, не будет
получать нисходящие обновления API.
См. Более подробную информацию в приведенном ниже примере API.
emptyDir
Том emptyDir
сначала создается, когда Pod назначается узлу, и
существует, пока этот модуль работает на этом узле.Как следует из названия,
emptyDir Том
изначально пуст. Все контейнеры в модуле могут читать и писать одинаково
файлы в томе emptyDir
, хотя этот том можно смонтировать одновременно
или разные пути в каждом контейнере. Когда Pod удаляется из узла для
по любой причине данные в emptyDir
удаляются безвозвратно.
Примечание. При сбое контейнера , а не удаляет Pod из узла. Данные в томе
emptyDir
безопасен при сбоях контейнеров.
Некоторые варианты использования emptyDir
:
- временное пространство, например, для сортировки слиянием на диске
- контрольная точка, определяющая длительное вычисление для восстановления после сбоев
- , содержащие файлы, которые извлекает контейнер диспетчера содержимого, в то время как веб сервер
контейнер обслуживает данные
В зависимости от вашей среды томов emptyDir
хранятся на любом носителе, который поддерживает
узел, такой как диск или SSD, или сетевое хранилище. Однако, если вы установите emptyDir.среднее
поле
в «Память»
, Kubernetes вместо этого монтирует tmpfs (файловую систему с оперативной памятью).
Хотя tmpfs работает очень быстро, имейте в виду, что, в отличие от дисков, tmpfs очищается на
перезагрузка узла и любые файлы, которые вы пишете, учитываются в
ограничение памяти.
Примечание: Если включен шлюз функции
SizeMemoryBackedVolumes
,
вы можете указать размер томов с резервной памятью. Если размер не указан, память
размер резервных томов составляет 50% памяти хоста Linux.
Пример конфигурации emptyDir
apiVersion: v1
вид: Стручок
метаданные:
имя: test-pd
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-контейнер
объем
- mountPath: / cache
name: cache-volume
объемы:
- имя: cache-volume
emptyDir: {}
fc (Fibre Channel)
Тип тома fc
позволяет использовать существующий том для хранения блоков Fibre Channel
для установки в стручок. Вы можете указать одно или несколько целевых имен во всем мире (WWN)
используя параметр targetWWNs
в конфигурации вашего тома.Если указано несколько WWN,
targetWWN ожидают, что эти WWN получены от многопутевых соединений.
Примечание: Вы должны настроить FC SAN Zoning, чтобы выделить и замаскировать эти LUN (тома) для целевых WWN.
заранее, чтобы хосты Kubernetes могли получить к ним доступ.
Подробнее см. В примере оптоволоконного канала.
flocker (устарело)
Flocker - это кластер с открытым исходным кодом.
диспетчер объемов данных контейнера. Флокер обеспечивает управление
и оркестровка томов данных, поддерживаемых различными внутренними механизмами хранения.
Том flocker
позволяет монтировать набор данных Flocker в под. Если
набора данных еще не существует во Flocker, его необходимо сначала создать с помощью Flocker
CLI или с помощью Flocker API. Если набор данных уже существует, он будет
Флокер повторно прикрепляет его к узлу, на который запланирован модуль. Это означает данные
могут быть разделены между модулями по мере необходимости.
Примечание: У вас должна быть запущена собственная установка Flocker, прежде чем вы сможете ее использовать.
Подробнее см. В примере Flocker.
gcePersistentDisk
Том gcePersistentDisk
подключает Google Compute Engine (GCE)
постоянный диск (PD) в ваш Pod.
В отличие от emptyDir
, который стирается при удалении модуля, содержимое PD
сохранен, и том просто демонтирован. Это означает, что ПД может быть
предварительно заполнены данными, и эти данные могут совместно использоваться модулями.
Примечание: Вы должны создать PD, используя
gcloud
или GCE API или UI, прежде чем вы сможете его использовать.
Существуют некоторые ограничения при использовании gcePersistentDisk
:
- узлы, на которых работают поды, должны быть виртуальными машинами GCE
- эти виртуальные машины должны находиться в том же проекте и зоне GCE, что и постоянный диск
Один Особенностью постоянного диска GCE является одновременный доступ к постоянному диску только для чтения.
Том gcePersistentDisk
позволяет нескольким потребителям одновременно
смонтировать постоянный диск как доступный только для чтения. Это означает, что вы можете предварительно заполнить PD своим набором данных.
а затем обслуживать его параллельно из необходимого количества модулей.К несчастью,
PD может быть установлен только одним потребителем в режиме чтения-записи. Одновременный
писатели не допускаются.
Использование постоянного диска GCE с модулем, управляемым ReplicaSet, приведет к сбою, если только
PD доступен только для чтения или количество реплик равно 0 или 1.
Создание постоянного диска GCE
Прежде чем вы сможете использовать постоянный диск GCE с модулем, вам необходимо его создать.
gcloud compute disks create --size = 500GB --zone = us-central1-a my-data-disk
Пример конфигурации постоянного диска GCE
apiVersion: v1
вид: Стручок
метаданные:
имя: test-pd
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-контейнер
объем
- путь монтирования: / test-pd
имя: тест-том
объемы:
- название: тест-том
# Этот GCE PD должен уже существовать.
gcePersistentDisk:
pdName: my-data-disk
fsType: ext4
Региональные постоянные диски
Региональные постоянные диски
функция позволяет создавать постоянные диски, доступные в двух зонах
в том же регионе. Чтобы использовать эту функцию, необходимо подготовить том.
как постоянный том; ссылка на том напрямую из модуля не поддерживается.
Ручная инициализация регионального PD PersistentVolume
Динамическая инициализация возможна с использованием
StorageClass для GCE PD.
Перед созданием PersistentVolume необходимо создать постоянный диск:
gcloud compute disks create --size = 500GB my-data-disk
--регион us-central1
--replica-зоны us-central1-a, us-central1-b
Пример конфигурации регионального постоянного диска
apiVersion: v1
вид: PersistentVolume
метаданные:
имя: тест-том
спецификация:
вместимость:
хранилище: 400Gi
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: my-data-disk
fsType: ext4
nodeAffinity:
обязательный:
nodeSelectorTerms:
- matchExpressions:
- ключ: отказ-домен.beta.kubernetes.io/zone
оператор: In
значения:
- us-central1-a
- us-central1-b
GCE CSI migration
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.17 [бета]
Функция CSIMigration
для GCE PD, если она включена, перенаправляет все операции плагина
из существующего плагина в дереве в контейнер pd.csi.storage.gke.io
Драйвер интерфейса хранилища (CSI). Чтобы использовать эту функцию, GCE PD CSI
Водитель
должны быть установлены в кластере и CSIMigration
и CSIMigrationGCE
бета-функции должны быть включены.
gitRepo (устаревший)
Предупреждение: Тип тома
gitRepo
устарел. Чтобы подготовить контейнер с репозиторием git, смонтируйте EmptyDir в InitContainer, который клонирует репо с помощью git, а затем смонтируйте EmptyDir в контейнер Pod.
Том gitRepo
- это пример подключаемого модуля тома. Этот плагин
монтирует пустой каталог и клонирует репозиторий git в этот каталог
для вашего пода.
Вот пример тома gitRepo
:
apiVersion: v1
вид: Стручок
метаданные:
имя: сервер
спецификация:
контейнеры:
- изображение: nginx
имя: nginx
объем
- mountPath: / mypath
имя: git-volume
объемы:
- имя: git-volume
gitRepo:
репозиторий: "git @ где-нибудь: me / my-git-repository.мерзавец "
редакция: "22f1d8406d464b0c0874075539c1f2e96c253775"
glusterfs
Том glusterfs
позволяет использовать Glusterfs (открытый
исходная сетевая файловая система) том, который будет смонтирован в ваш Pod. в отличие
emptyDir
, который стирается при удалении Pod, содержимое
Том glusterfs
сохранен, и том просто размонтирован. Этот
означает, что том glusterfs может быть предварительно заполнен данными, и что данные могут
быть разделенным между капсулами.GlusterFS может быть смонтирован несколькими авторами
одновременно.
Примечание: У вас должна быть запущена собственная установка GlusterFS, прежде чем вы сможете ее использовать.
Подробнее см. В примере GlusterFS.
hostPath
Том hostPath
монтирует файл или каталог из файловой системы хост-узла
в ваш Pod. Это не то, что понадобится большинству модулей, но оно предлагает
мощный аварийный люк для некоторых применений.
Например, hostPath
может использоваться в следующих случаях:
- запуск контейнера, которому требуется доступ к внутренним компонентам Docker; использовать
hostPath
из/ var / lib / docker
- с запущенным cAdvisor в контейнере; используйте
hostPath
из/ sys
- , позволяя Pod указывать, должен ли данный
hostPath
существовать до
Под работает, должен ли он быть создан и как он должен существовать как
В дополнение к обязательному свойству path
вы можете дополнительно указать тип
для тома hostPath
.
Поддерживаемые значения для поля типа
:
Значение | Поведение |
---|---|
Пустая строка (по умолчанию) предназначена для обратной совместимости, что означает, что перед монтированием hostPath проверки выполняться не будут. объем. | |
DirectoryOrCreate | Если по указанному пути ничего не существует, там будет создан пустой каталог с разрешением 0755, имеющим ту же группу и владение, что и Kubelet. |
Каталог | Каталог должен существовать по заданному пути |
FileOrCreate | Если по указанному пути ничего не существует, пустой файл будет создан там по мере необходимости с разрешением, установленным на 0644, имея та же группа и владение с Кубелет. |
Файл | Файл должен существовать по указанному пути |
Socket | Сокет UNIX должен существовать по указанному пути |
CharDevice | |
BlockDevice | Блочное устройство должно существовать на данном пути |
Будьте осторожны при использовании этого типа тома, потому что:
- Модули с идентичной конфигурацией (например, созданные из PodTemplate) май
ведут себя по-разному на разных узлах из-за разных файлов на узлах - Файлы или каталоги, созданные на базовых узлах, доступны для записи только пользователю root.Ты
либо вам нужно запустить ваш процесс как root в
привилегированный контейнер или изменить файл
разрешения на хосте для возможности записи на том hostPath
Пример конфигурации hostPath
apiVersion: v1
вид: Стручок
метаданные:
имя: test-pd
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-контейнер
объем
- путь монтирования: / test-pd
имя: тест-том
объемы:
- название: тест-том
hostPath:
# расположение каталога на хосте
путь: / данные
# это поле необязательно
тип: Каталог
Внимание: Режим
FileOrCreate
не создает родительский каталог файла.Если родительский каталог
смонтированного файла не существует, модуль не запускается. Чтобы этот режим работал,
вы можете попробовать смонтировать каталоги и файлы отдельно, как показано на
FileOr Создайте конфигурацию
.
hostPath FileOrCreate пример конфигурации
apiVersion: v1
вид: Стручок
метаданные:
имя: test-webserver
спецификация:
контейнеры:
- имя: test-webserver
изображение: k8s.gcr.io/test-webserver:latest
объем
- mountPath: / var / local / aaa
имя: mydir
- mountPath: / var / local / aaa / 1.текст
имя: myfile
объемы:
- имя: mydir
hostPath:
# Убедитесь, что каталог файлов создан.
путь: / var / local / aaa
тип: DirectoryOrCreate
- имя: myfile
hostPath:
путь: /var/local/aaa/1.txt
тип: FileOrCreate
iscsi
Том iscsi
позволяет монтировать существующий том iSCSI (SCSI over IP)
в ваш Pod. В отличие от emptyDir
, который стирается при удалении пода,
содержимое тома iscsi
сохраняется, и этот том просто
размонтированный.Это означает, что том iscsi может быть предварительно заполнен данными, и
эти данные могут совместно использоваться модулями.
Примечание: У вас должен быть собственный сервер iSCSI, работающий с созданным томом, прежде чем вы сможете его использовать.
Особенностью iSCSI является то, что он может быть установлен как доступный только для чтения несколькими потребителями.
одновременно. Это означает, что вы можете предварительно заполнить том своим набором данных.
а затем обслуживать его параллельно из необходимого количества модулей. К несчастью,
Тома iSCSI могут быть подключены только одним потребителем в режиме чтения-записи.Авторы-синхронисты не допускаются.
Подробнее см. В примере iSCSI.
локальный
Локальный том
представляет смонтированное локальное запоминающее устройство, такое как диск,
раздел или каталог.
Локальные тома можно использовать только как статически созданный PersistentVolume. Динамический
подготовка не поддерживается.
По сравнению с томами hostPath
, локальных томов
используются в долговечных и
портативный способ без ручного планирования модулей для узлов.Система осведомлена
ограничений узла тома, глядя на сходство узла на PersistentVolume.
Однако локальных томов
зависят от доступности базового
node и подходят не для всех приложений. Если узел становится нездоровым,
тогда локальный том
становится недоступным для модуля. Стручок, использующий этот объем
не может бежать. Приложения, использующие локальных томов
, должны выдерживать это.
снижение доступности, а также потенциальная потеря данных, в зависимости от
прочностные характеристики нижележащего диска.
В следующем примере показан PersistentVolume с локальным томом
и
nodeAffinity
:
apiVersion: v1
вид: PersistentVolume
метаданные:
имя: example-pv
спецификация:
вместимость:
хранилище: 100Gi
volumeMode: файловая система
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Удалить
storageClassName: локальное хранилище
местный:
путь: / mnt / disks / ssd1
nodeAffinity:
обязательный:
nodeSelectorTerms:
- matchExpressions:
- ключ: кубернетес.io / имя хоста
оператор: In
значения:
- пример-узел
Вы должны установить PersistentVolume nodeAffinity
при использовании локальных томов
.
Планировщик Kubernetes использует PersistentVolume nodeAffinity
для планирования
эти стручки на правильный узел.
PersistentVolume volumeMode
может быть установлен на «Блокировать» (вместо значения по умолчанию
значение "Filesystem"), чтобы представить локальный том как необработанное блочное устройство.
При использовании локальных томов рекомендуется создать StorageClass с
volumeBindingMode
установлен на WaitForFirstConsumer
.Подробнее см.
пример локального StorageClass.
Задержка привязки тома гарантирует, что решение о привязке PersistentVolumeClaim
также будет оцениваться с любыми другими ограничениями узла, которые может иметь Pod,
такие как требования к ресурсам узла, селекторы узлов, сродство Pod и анти-сродство Pod.
Внешний статический провайдер можно запустить отдельно для улучшенного управления
жизненный цикл локального тома. Обратите внимание, что этот провайдер не поддерживает динамические
подготовка еще нет. Для примера того, как запустить внешний локальный провайдер,
увидеть пользователя локального тома
гид.
Примечание: Локальный PersistentVolume требует ручной очистки и удаления с помощью
пользователь, если внешний статический провайдер не используется для управления томом
жизненный цикл.
nfs
Том nfs
позволяет использовать существующий общий ресурс NFS (сетевая файловая система).
установлен в капсулу. В отличие от emptyDir
, который стирается, когда под
удалено, содержимое тома nfs
сохраняется, и том просто
размонтированный.Это означает, что том NFS может быть предварительно заполнен данными, и
эти данные могут совместно использоваться модулями. NFS может быть смонтирован несколькими
писатели одновременно.
Примечание: У вас должен быть собственный сервер NFS, работающий с экспортированным общим ресурсом, прежде чем вы сможете его использовать.
Подробнее см. В примере NFS.
persistentVolumeClaim
Том persistentVolumeClaim
используется для монтирования
PersistentVolume в Pod. PersistentVolumeClaims
являются способом для пользователей "требовать" надежного хранилища (например, GCE PersistentDisk или
том iSCSI), не зная подробностей конкретной облачной среды.
См. Дополнительную информацию о PersistentVolumes.
подробности.
portworxVolume
A portworxVolume
- это уровень эластичного блочного хранилища, который работает гиперконвергентно с
Kubernetes. Хранение отпечатков пальцев Portworx
на сервере - уровни, основанные на возможностях, и агрегированная мощность на нескольких серверах.
Portworx работает в гостевом режиме на виртуальных машинах или на голых железных узлах Linux.
Порт xVolume
может быть динамически создан через Kubernetes или также
быть предварительно подготовленным и ссылаться на него внутри модуля.Вот пример Pod, ссылающегося на предварительно подготовленный том Portworx:
apiVersion: v1
вид: Стручок
метаданные:
имя: test-portworx-volume-pod
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-контейнер
объем
- mountPath: / mnt
имя: pxvol
объемы:
- имя: pxvol
# Этот том Portworx уже должен существовать.
portworxVolume:
volumeID: "pxvol"
fsType: ""
Примечание: Убедитесь, что у вас есть существующий PortworxVolume с именем
pxvol
перед использованием его в Pod.
Дополнительные сведения см. В примерах томов Portworx.
прогноз
Том прогноз
отображает несколько существующих источников томов в один и тот же каталог.
В настоящее время можно проецировать следующие типы объемных источников:
Все источники должны находиться в том же пространстве имен, что и Pod. Больше подробностей,
см. проектную документацию тома «все в одном».
Пример конфигурации с секретом, нисходящим API и configMap
apiVersion: v1
вид: Стручок
метаданные:
название: объем-тест
спецификация:
контейнеры:
- название: контейнер-тест
изображение: busybox
объем
- название: все-в-одном
mountPath: "/ прогнозируемый объем"
readOnly: правда
объемы:
- название: все-в-одном
прогнозируется:
источники:
- секрет:
имя: mysecret
Предметы:
- ключ: имя пользователя
путь: моя-группа / мое-имя пользователя
- downAPI:
Предметы:
- путь: "ярлыки"
fieldRef:
fieldPath: метаданные.этикетки
- путь: "cpu_limit"
resourceFieldRef:
containerName: контейнер-тест
ресурс: limits.cpu
- configMap:
имя: myconfigmap
Предметы:
- ключ: config
путь: моя-группа / моя-конфигурация
Пример конфигурации: секреты с установленным режимом разрешений не по умолчанию
apiVersion: v1
вид: Стручок
метаданные:
название: объем-тест
спецификация:
контейнеры:
- название: контейнер-тест
изображение: busybox
объем
- название: все-в-одном
mountPath: "/ прогнозируемый объем"
readOnly: правда
объемы:
- название: все-в-одном
прогнозируется:
источники:
- секрет:
имя: mysecret
Предметы:
- ключ: имя пользователя
путь: моя-группа / мое-имя пользователя
- секрет:
имя: mysecret2
Предметы:
- ключ: пароль
путь: моя-группа / мой-пароль
режим: 511
Каждый прогнозируемый источник объема указан в спецификации под источников
.В
параметры почти такие же, за двумя исключениями:
- Для секретов поле
secretName
было изменено наname
для согласованности
с именованием ConfigMap. -
defaultMode
может быть указан только на прогнозируемом уровне, а не для каждого
источник тома. Однако, как показано выше, вы можете явно установить режим
для каждой индивидуальной проекции.
Когда функция TokenRequestProjection
включена, вы можете ввести токен
для текущего сервисного аккаунта
в Pod по указанному пути.Например:
apiVersion: v1
вид: Стручок
метаданные:
имя: sa-token-test
спецификация:
контейнеры:
- название: контейнер-тест
изображение: busybox
объем
- имя: token-vol
mountPath: "/ сервис-аккаунт"
readOnly: правда
объемы:
- имя: token-vol
прогнозируется:
источники:
- serviceAccountToken:
аудитория: api
expirationSeconds: 3600
путь: токен
В примере Pod есть прогнозируемый том, содержащий введенную учетную запись службы.
токен.Этот токен может использоваться контейнерами Pod для доступа к Kubernetes API.
сервер. Аудитория Поле
содержит целевую аудиторию
токен. Получатель токена должен идентифицировать себя с указанным идентификатором.
в аудитории токена, а в противном случае следует отклонить токен. Это поле
не является обязательным и по умолчанию используется идентификатор сервера API.
expirationSeconds
- это ожидаемая продолжительность действия учетной записи службы.
токен. По умолчанию это 1 час и должно быть не менее 10 минут (600 секунд).Администратор
также может ограничить его максимальное значение, указав --service-account-max-token-expiration
вариант для сервера API. Поле path
указывает относительный путь к точке монтирования.
планируемого объема.
Примечание: Контейнер, использующий спроектированный источник тома в качестве подключаемого тома
subPath
, не будет
получать обновления для этих объемных источников.
quobyte
Объем quobyte
позволяет существующему тому Quobyte
быть установленным в ваш Pod.
Примечание: У вас должна быть собственная настройка Quobyte и работа с томами
создан до того, как вы сможете его использовать.
Quobyte поддерживает интерфейс хранилища контейнеров.
CSI - это рекомендуемый плагин для использования томов Quobyte внутри Kubernetes. Quobyte's
В проекте GitHub есть инструкции по развертыванию Quobyte с использованием CSI, а также примеры.
руб.
Том руб.
позволяет
Том Rados Block Device (RBD) для подключения к вашему
Под. В отличие от emptyDir
, который стирается при удалении модуля, содержимое
том rbd
сохраняется, и том отключен.Этот
означает, что том RBD может быть предварительно заполнен данными, и что данные могут
быть разделенным между капсулами.
Примечание: У вас должна быть запущена установка Ceph, прежде чем вы сможете использовать RBD.
Особенностью RBD является то, что он может быть установлен как доступный только для чтения несколькими потребителями.
одновременно. Это означает, что вы можете предварительно заполнить том своим набором данных.
а затем подавайте его параллельно из нужного вам количества стручков. К несчастью,
Тома RBD могут быть смонтированы только одним потребителем в режиме чтения-записи.Авторы-синхронисты не допускаются.
См. Пример RBD
Больше подробностей.
scaleIO (устарело)
ScaleIO - это программная платформа хранения, которая использует существующее оборудование для
создавать кластеры масштабируемого общего блочного сетевого хранилища. Объем scaleIO
плагин позволяет развернутым модулям получать доступ к существующим ScaleIO
тома. Для получения информации о динамическом выделении новых томов для
постоянные требования об объеме, см.
Постоянные тома ScaleIO.
Примечание: У вас должен быть уже установлен существующий кластер ScaleIO и
работать с томами, созданными до того, как вы сможете их использовать.
В следующем примере показана конфигурация Pod с ScaleIO:
apiVersion: v1
вид: Стручок
метаданные:
имя: pod-0
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: pod-0
объем
- путь монтирования: / test-pd
название: vol-0
объемы:
- название: vol-0
scaleIO:
шлюз: https: // localhost: 443 / api
система: scaleio
ProtectionDomain: sd0
StoragePool: sp1
volumeName: vol-0
secretRef:
имя: sio-secret
fsType: xfs
Дополнительные сведения см. В примерах ScaleIO.
секрет
Секретный том
используется для передачи конфиденциальной информации, такой как пароли, на
Стручки. Вы можете хранить секреты в Kubernetes API и монтировать их как файлы для
использование модулями без прямого подключения к Kubernetes. секретных
томов
поддерживаются tmpfs (файловая система с поддержкой RAM), поэтому они никогда не записываются в
энергонезависимая память.
Примечание: Вы должны создать секрет в Kubernetes API, прежде чем сможете его использовать.
Примечание: Контейнер, использующий секрет в качестве подкаталога
subPath
, не будет
получать секретные обновления.
Для получения дополнительных сведений см. Настройка секретов.
StorageOS
storageos Том
позволяет использовать существующую StorageOS
том для установки в ваш Pod.
StorageOS работает как контейнер в вашей среде Kubernetes, что делает локальную
или подключенное хранилище, доступное с любого узла в кластере Kubernetes.
Данные могут быть реплицированы для защиты от сбоя узла. Тонкая подготовка и
сжатие может улучшить использование и снизить стоимость.
По своей сути StorageOS обеспечивает блочное хранилище для контейнеров, доступное из файловой системы.
Контейнер StorageOS требует 64-разрядной версии Linux и не имеет дополнительных зависимостей.
Доступна бесплатная лицензия разработчика.
Внимание! Вы должны запустить контейнер StorageOS на каждом узле, который хочет
получить доступ к томам StorageOS или увеличить емкость хранилища в пуле.
Для получения инструкций по установке обратитесь к
Документация по StorageOS.
Следующий пример представляет собой конфигурацию Pod с StorageOS:
apiVersion: v1
вид: Стручок
метаданные:
ярлыки:
имя: redis
роль: мастер
имя: test-storageos-redis
спецификация:
контейнеры:
- имя: мастер
изображение: kubernetes / redis: v1
env:
- имя: МАСТЕР
значение: "истина"
порты:
- порт контейнера: 6379
объем
- mountPath: / redis-master-data
имя: redis-data
объемы:
- имя: redis-data
хранилища:
# Том `redis-vol01` должен уже существовать в StorageOS в пространстве имен` default`.volumeName: redis-vol01
fsType: ext4
Для получения дополнительной информации о StorageOS, динамическом выделении ресурсов и PersistentVolumeClaims см.
Примеры StorageOS.
vsphereVolume
vsphereVolume
используется для монтирования тома vSphere VMDK в ваш Pod. Содержимое
тома сохраняются, когда он размонтирован. Он поддерживает хранилище данных как VMFS, так и VSAN.
Примечание: Вы должны создать том vSphere VMDK, используя один из следующих методов, прежде чем использовать его с модулем.
Создание тома VMDK
Выберите один из следующих методов для создания тома VMDK.
Сначала ssh в ESX, затем используйте следующую команду для создания VMDK:
vmkfstools -c 2G /vmfs/volumes/DatastoreName/volumes/myDisk.vmdk
Используйте следующую команду для создания VMDK:
vmware-vdiskmanager -c -t 0 -s 40GB -a lsilogic myDisk.vmdk
Пример конфигурации vSphere VMDK
apiVersion: v1
вид: Стручок
метаданные:
имя: test-vmdk
спецификация:
контейнеры:
- изображение: k8s.gcr.io/test-webserver
имя: тест-контейнер
объем
- путь монтирования: / test-vmdk
имя: тест-том
объемы:
- название: тест-том
# Этот том VMDK уже должен существовать.
vsphereVolume:
volumePath: "[DatastoreName] volume / myDisk"
fsType: ext4
Для получения дополнительной информации см. Примеры томов vSphere.
vSphere CSI migration
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.19 [бета]
Функция CSIMigration
для vsphereVolume
, если она включена, перенаправляет все операции над плагинами
из существующего плагина в дереве на csi.vsphere.vmware.com
драйвер CSI. Чтобы использовать эту функцию,
драйвер vSphere CSI
должны быть установлены в кластере и CSIMigration
и CSIMigrationvSphere
ворота функций должны быть включены.
Для этого также требуется, чтобы минимальная версия vSphere vCenter / ESXi была 7.0u1, а минимальная версия HW - версия 15 виртуальной машины.
Примечание:
Следующие параметры StorageClass из встроенного подключаемого модуля
vsphereVolume
не поддерживаются Драйвер vSphere CSI:
diskformat
hostfailurestotolerate
forceprovisioning
cachere
diskstripes
diskstripes перейти на драйвер vSphere CSI,
но новые тома, созданные драйвером vSphere CSI, не будут учитывать эти параметры.
Миграция vSphere CSI завершена
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.19 [бета]
Чтобы отключить загрузку подключаемого модуля vsphereVolume
диспетчером контроллера и kubelet, вам необходимо установить эту функцию flag до true
. Вы должны установить драйвер CSI csi.vsphere.vmware.com
CSI на всех рабочих узлах.
Использование subPath
Иногда бывает полезно совместно использовать один том для нескольких целей в одном модуле.Свойство volumeMounts.subPath
указывает подпуть внутри указанного тома.
вместо его корня.
В следующем примере показано, как настроить Pod со стеком LAMP (Linux Apache MySQL PHP).
используя один общий том. Этот образец конфигурации subPath
не рекомендуется
для производственного использования.
Код и ресурсы приложения PHP сопоставляются с папкой html
тома и
база данных MySQL хранится в папке mysql
тома.Например:
apiVersion: v1
вид: Стручок
метаданные:
name: my-lamp-site
спецификация:
контейнеры:
- имя: mysql
изображение: mysql
env:
- имя: MYSQL_ROOT_PASSWORD
значение: "rootpasswd"
объем
- путь монтирования: / var / lib / mysql
name: site-data
subPath: mysql
- имя: php
изображение: php: 7.0-apache
объем
- mountPath: / var / www / html
name: site-data
subPath: html
объемы:
- имя: сайт-данные
persistentVolumeClaim:
ClaimName: my-lamp-site-data
Использование subPath с расширенными переменными среды
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.17 [стабильный]
Используйте поле subPathExpr
для создания имен каталогов subPath
из
нисходящие переменные среды API.
Свойства subPath
и subPathExpr
являются взаимоисключающими.
В этом примере Pod
использует subPathExpr
для создания каталога pod1
внутри
hostPath
том / var / log / pods
.
Том hostPath
берет имя Pod
из ниже API
.Каталог хоста / var / log / pods / pod1
смонтирован в контейнере по адресу / logs
.
apiВерсия: v1
вид: Стручок
метаданные:
имя: pod1
спецификация:
контейнеры:
- имя: container1
env:
- имя: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
изображение: busybox
команда: ["sh", "-c", "while [true]; do echo 'Hello'; sleep 10; done | tee -a /logs/hello.txt"]
объем
- имя: workdir1
mountPath: / журналы
subPathExpr: $ (POD_NAME)
restartPolicy: Никогда
объемы:
- имя: workdir1
hostPath:
путь: / var / log / pods
Ресурсы
Носитель данных (например, диск или твердотельный накопитель) тома emptyDir
определяется
носитель файловой системы, содержащий корневой каталог kubelet (обычно
/ var / lib / kubelet
).Нет ограничений на то, сколько места emptyDir
или
hostPath
том может потреблять, и никакой изоляции между контейнерами или между ними
стручки.
Чтобы узнать о запросе места с использованием спецификации ресурса, см.
как управлять ресурсами.
Плагины тома вне дерева
Плагины тома вне дерева включают
Интерфейс контейнерного хранилища (CSI)
и FlexVolume. Эти плагины позволяют поставщикам хранилищ создавать собственные плагины хранилища.
без добавления исходного кода своего плагина в репозиторий Kubernetes.
Раньше все плагины тома были «в дереве». Плагины "в дереве" были созданы, связаны, скомпилированы,
и поставляется с основными двоичными файлами Kubernetes. Это означало, что добавление новой системы хранения в
Kubernetes (плагин для томов) требовал проверки кода в основном репозитории кода Kubernetes.
И CSI, и FlexVolume позволяют разрабатывать плагины томов независимо от
базу кода Kubernetes и развернут (установлен) в кластерах Kubernetes как
расширения.
Для поставщиков хранилищ, которые хотят создать подключаемый модуль тома вне дерева, см.
в FAQ по плагину громкости.
csi
интерфейс хранения контейнера
(CSI) определяет стандартный интерфейс для систем оркестровки контейнеров (например,
Kubernetes), чтобы подвергать произвольные системы хранения их контейнерным рабочим нагрузкам.
Пожалуйста, прочтите проектное предложение CSI для получения дополнительной информации.
Примечание: Поддержка спецификаций CSI версий 0.2 и 0.3 в Kubernetes устарела.
v1.13 и будет удален в следующем выпуске.
Примечание. Драйверы CSI могут быть несовместимы со всеми выпусками Kubernetes.Пожалуйста, проверьте документацию конкретного драйвера CSI, чтобы узнать о поддерживаемых
шаги развертывания для каждого выпуска Kubernetes и матрица совместимости.
После развертывания драйвера тома, совместимого с CSI, в кластере Kubernetes пользователи
может использовать тип тома csi
для присоединения или монтирования томов, предоставляемых
Драйвер CSI.
Том csi
можно использовать в модуле тремя различными способами:
Следующие поля доступны администраторам хранилища для настройки CSI.
постоянный том:
-
драйвер
: строковое значение, указывающее имя используемого драйвера тома.Это значение должно соответствовать значению, возвращенному вGetPluginInfoResponse
.
драйвером CSI, как определено в спецификации CSI.
Он используется Kubernetes, чтобы определить, к какому драйверу CSI обращаться, и
Компоненты драйвера CSI, чтобы определить, какие объекты PV принадлежат драйверу CSI. -
volumeHandle
: строковое значение, однозначно идентифицирующее том. Это значение
должно соответствовать значению, возвращенному в полеvolume.id
CreateVolumeResponse
драйвером CSI, как определено в спецификации CSI.Значение передается какvolume_id
во всех вызовах драйвера тома CSI, когда
ссылаясь на объем. -
readOnly
: необязательное логическое значение, указывающее, должен ли том быть
«ControllerPublished» (прилагается) только для чтения. По умолчанию - false. Это значение
передается драйверу CSI через полетолько для чтения
в поле
ControllerPublishVolumeRequest
. -
fsType
: Если для PVVolumeMode
установлено значениеFilesystem
, то это поле можно использовать
чтобы указать файловую систему, которая должна использоваться для монтирования тома.Если
том не был отформатирован и форматирование поддерживается, это значение будет
используется для форматирования тома.
Это значение передается драйверу CSI через полеVolumeCapability
ControllerPublishVolumeRequest
,NodeStageVolumeRequest
и
NodePublishVolumeRequest
. -
volumeAttributes
: Сопоставление строки со строкой, задающей статические свойства.
тома. Эта карта должна соответствовать карте, возвращенной в
том.атрибуты
поляCreateVolumeResponse
драйвером CSI как
определено в спецификации CSI.
Карта передается драйверу CSI через полеvolume_context
в поле
ControllerPublishVolumeRequest
,NodeStageVolumeRequest
и
NodePublishVolumeRequest
. -
controllerPublishSecretRef
: ссылка на секретный объект, содержащий
конфиденциальная информация для передачи драйверу CSI для завершения CSI
ControllerPublishVolume
иControllerUnpublishVolume
звонков.Это поле
необязательный и может быть пустым, если секрет не требуется. Если секрет
содержит более одного секрета, все секреты передаются. -
nodeStageSecretRef
: ссылка на секретный объект, содержащий
конфиденциальная информация для передачи драйверу CSI для завершения CSI
NodeStageVolume
вызов. Это поле не является обязательным и может быть пустым, если не секрет.
требуется. Если секрет содержит более одного секрета, все секреты
пройдены. -
nodePublishSecretRef
: ссылка на секретный объект, содержащий
конфиденциальная информация для передачи драйверу CSI для завершения CSI
NodePublishVolume
звоните.Это поле является необязательным и может быть пустым, если нет.
требуется секрет. Если секретный объект содержит более одного секрета, все
секреты передаются.
Поддержка томов сырых блоков CSI
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.18 [стабильный]
Поставщики с внешними драйверами CSI могут реализовать поддержку томов сырых блоков
в рабочих нагрузках Kubernetes.
Вы можете настроить свой
PersistentVolume / PersistentVolumeClaim с поддержкой необработанного блочного тома, как обычно, без каких-либо специфических изменений CSI.
Эфемерные тома CSI
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.16 [бета]
Вы можете напрямую настраивать тома CSI в Pod
Технические характеристики. Указанные таким образом объемы недолговечны и не
сохраняются при перезапуске модуля. См. Эфемерное
Объемы
для дополнительной информации.
Для получения дополнительной информации о том, как разработать драйвер CSI, см.
kubernetes-csi documentation
Переход на драйверы CSI из встроенных плагинов
СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.17 [beta]
Функция CSIMigration
, если она включена, направляет операции против существующего в дереве
плагины к соответствующим плагинам CSI (которые, как ожидается, будут установлены и настроены).
В результате операторам не нужно делать никаких
изменения конфигурации существующих классов хранилища, PersistentVolumes или PersistentVolumeClaims
(относится к подключаемым модулям внутри дерева) при переходе к драйверу CSI, который заменяет подключаемый модуль внутри дерева.
Поддерживаемые операции и функции включают:
подготовка / удаление, подключение / отключение, подключение / отключение и изменение размера томов.
Плагины в виде дерева, которые поддерживают CSIMigration
и имеют соответствующий драйвер CSI.
перечислены в Типах томов.
flexVolume
FlexVolume - это внешний интерфейс плагина, который существовал в Kubernetes.
начиная с версии 1.2 (до CSI). Он использует основанную на exec модель для взаимодействия с
драйверы. Двоичные файлы драйвера FlexVolume должны быть установлены в заранее определенном томе.
путь к плагину на каждом узле, а в некоторых случаях и на узлах плоскости управления.
Модули
Pod взаимодействуют с драйверами FlexVolume через подключаемый модуль томов flexvolume
в виде дерева.Дополнительные сведения см. В примерах FlexVolume.
Распространение монтирования
Распространение монтирования позволяет совместно использовать тома, смонтированные контейнером, в
другие контейнеры в том же модуле или даже в другие модули того же узла.
Распространение монтирования тома контролируется полем mountPropagation
в контейнере . объем составляет
. Его значения:
Нет
- это крепление тома не получит никаких последующих подключений.
которые подключены хостом к этому тому или любому из его подкаталогов.Аналогичным образом никакие крепления, созданные контейнером, не будут видны на
гостья. Это режим "по умолчанию".Этот режим соответствует
частному распространению монтирования
, как описано в
Документация ядра LinuxHostToContainer
- это монтирование тома получит все последующие монтирования
которые подключены к этому тому или любому из его подкаталогов.Другими словами, если хост монтирует что-либо внутри монтирования тома,
контейнер увидит его установленным там.Аналогично, если какой-либо Pod с
Bidirectional
монтирует распространение к тому же
том монтирует там что угодно, контейнер сHostToContainer
монтируется
распространение увидит это.Этот режим равен
rslave
mount распространения, как описано в
Документация ядра LinuxДвунаправленный
- это монтирование тома ведет себя так же, как и монтированиеHostToContainer
.
Кроме того, будут распространены все монтирования томов, созданные контейнером.
обратно к хосту и ко всем контейнерам всех модулей, использующих один и тот же том.Типичным вариантом использования этого режима является Pod с драйвером FlexVolume или CSI или
Pod, который должен что-то смонтировать на хосте с использованием тома hostPath.
Этот режим эквивалентен
rshared
распространению монтировки, как описано в
Документация по ядру LinuxПредупреждение:
Двунаправленное распространение монтирования
может быть опасным. Это может повредить
операционная система хоста и поэтому разрешена только в привилегированных
контейнеры.Настоятельно рекомендуется ознакомиться с поведением ядра Linux.
Кроме того, любые монтирования томов, созданные контейнерами в модулях, должны быть уничтожены.
(демонтированы) контейнерами по окончании.
Конфигурация
Перед монтированием распространение может работать правильно в некоторых развертываниях (CoreOS,
RedHat / Centos, Ubuntu) общий ресурс монтирования должен быть правильно настроен в
Докер, как показано ниже.
Отредактируйте служебный файл Docker systemd
. Установите MountFlags
следующим образом:
Или удалите MountFlags = slave
, если он присутствует.Затем перезапустите демон Docker:
sudo systemctl daemon-reload
sudo systemctl перезапустить докер
Что дальше
Следуйте примеру развертывания WordPress и MySQL с постоянными томами.
Последнее изменение: 31 марта 2021 г., 19:31 по тихоокеанскому времени: восстановить отсутствующее слово (eea1c895a)
Подключить том файлов Azure к группе контейнеров - Экземпляры контейнеров Azure
- 6 минут на чтение
В этой статье
По умолчанию экземпляры контейнеров Azure не имеют состояния.Если контейнер перезапускается, выходит из строя или останавливается, все его состояние теряется. Чтобы сохранить состояние за пределами срока службы контейнера, вы должны смонтировать том из внешнего хранилища. Как показано в этой статье, экземпляры контейнеров Azure могут подключать общий файловый ресурс Azure, созданный с помощью файлов Azure. Служба файлов Azure предлагает полностью управляемые общие файловые ресурсы, размещенные в службе хранилища Azure, которые доступны через стандартный отраслевой протокол Server Message Block (SMB). Использование общего файлового ресурса Azure с экземплярами контейнеров Azure предоставляет функции общего доступа к файлам, аналогичные использованию общего файлового ресурса Azure с виртуальными машинами Azure.
Ограничения
- Общие ресурсы файлов Azure можно подключать только к контейнерам Linux. Узнайте больше о различиях в поддержке функций для групп контейнеров Linux и Windows в обзоре.
- Azure требуется, чтобы контейнер Linux работал как корень .
- При подключении тома общего файлового ресурса Azure поддерживается только CIFS.
Для подключения тома общего файлового ресурса
Примечание
Подключение общей папки Azure Files к экземпляру контейнера аналогично подключению привязки Docker.Если вы монтируете общий ресурс в каталог контейнера, в котором существуют файлы или каталоги, монтирование закрывает файлы или каталоги, делая их недоступными во время работы контейнера.
Важно
Если вы развертываете группы контейнеров в виртуальной сети Azure, вы должны добавить конечную точку службы в свою учетную запись хранения Azure.
Создание файлового ресурса Azure
Перед использованием общего файлового ресурса Azure с экземплярами контейнеров Azure необходимо его создать. Запустите следующий сценарий, чтобы создать учетную запись хранения для размещения общего файлового ресурса и самого общего ресурса.Имя учетной записи хранения должно быть глобально уникальным, поэтому сценарий добавляет случайное значение к базовой строке.
# При необходимости измените эти четыре параметра
ACI_PERS_RESOURCE_GROUP = myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME = mystorageaccount $ RANDOM
ACI_PERS_LOCATION = eastus
ACI_PERS_SHARE_NAME = acishare
# Создать учетную запись хранения с параметрами
az Storage account create \
- группа ресурсов $ ACI_PERS_RESOURCE_GROUP \
--name $ ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ ACI_PERS_LOCATION \
--sku Standard_LRS
# Создать файловую папку
az общий ресурс хранилища создать \
--name $ ACI_PERS_SHARE_NAME \
--account-name $ ACI_PERS_STORAGE_ACCOUNT_NAME
Получить учетные данные хранилища
Чтобы подключить файловый ресурс Azure как том в экземплярах контейнеров Azure, вам понадобятся три значения: имя учетной записи хранения, имя общего ресурса и ключ доступа к хранилищу.
Имя учетной записи хранения - Если вы использовали предыдущий сценарий, имя учетной записи хранения было сохранено в переменной
$ ACI_PERS_STORAGE_ACCOUNT_NAME
. Чтобы увидеть имя учетной записи, введите:эхо $ ACI_PERS_STORAGE_ACCOUNT_NAME
Имя общего ресурса - это значение уже известно (определено как
acishare
в предыдущем сценарии)Ключ учетной записи хранения - это значение можно найти с помощью следующей команды:
STORAGE_KEY = $ (az список ключей учетной записи хранения --resource-group $ ACI_PERS_RESOURCE_GROUP --account-name $ ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].значение "- выход цв) echo $ STORAGE_KEY
Развернуть контейнер и смонтировать том - CLI
Чтобы подключить общий файловый ресурс Azure как том в контейнере с помощью Azure CLI, укажите общий ресурс и точку подключения тома при создании контейнера с помощью команды az container create. Если вы выполнили предыдущие шаги, вы можете подключить созданный ранее общий ресурс, используя следующую команду для создания контейнера:
az контейнер создать \
- группа ресурсов $ ACI_PERS_RESOURCE_GROUP \
--name hellofiles \
- изображение mcr.microsoft.com/azuredocs/aci-hellofiles \
--dns-name-label aci-demo \
- порты 80 \
--azure-file-volume-account-name $ ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $ STORAGE_KEY \
--azure-file-volume-share-name $ ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path / aci / журналы /
Значение --dns-name-label
должно быть уникальным в пределах региона Azure, в котором вы создаете экземпляр контейнера. Обновите значение в предыдущей команде, если вы получаете сообщение об ошибке DNS name label при выполнении команды.
Управление файлами на смонтированном томе
После запуска контейнера вы можете использовать простое веб-приложение, развернутое через образ Microsoft aci-hellofiles, для создания небольших текстовых файлов в файловом ресурсе Azure по указанному вами пути монтирования. Получите полное доменное имя (FQDN) веб-приложения с помощью команды az container show:
az container show --resource-group $ ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
После сохранения текста с помощью приложения вы можете использовать портал Azure или такой инструмент, как Microsoft Azure Storage Explorer, для извлечения и проверки файла или файлов, записанных в общую папку.
Развернуть контейнер и смонтировать том - YAML
Вы также можете развернуть группу контейнеров и смонтировать том в контейнере с помощью Azure CLI и шаблона YAML. Развертывание с помощью шаблона YAML является предпочтительным методом при развертывании групп контейнеров, состоящих из нескольких контейнеров.
Следующий шаблон YAML определяет группу контейнеров с одним контейнером, созданным с помощью образа aci-hellofiles
. Контейнер подключает файловый ресурс Azure acishare , созданный ранее как том.Там, где указано, введите имя и ключ хранилища для учетной записи хранения, в которой размещается общий файловый ресурс.
Как и в примере с интерфейсом командной строки, значение dnsNameLabel
должно быть уникальным в пределах региона Azure, в котором вы создаете экземпляр контейнера. При необходимости обновите значение в файле YAML.
API
Версия: '2019-12-01'
расположение: Eastus
имя: file-share-demo
характеристики:
контейнеры:
- название: hellofiles
характеристики:
environmentVariables: []
изображение: mcr.microsoft.com / azuredocs / aci-hellofiles
порты:
- порт: 80
Ресурсы:
Запросы:
процессор: 1.0
ПамятьInGB: 1.5
объем
- mountPath: / aci / журналы /
имя: filesharevolume
osType: Linux
restartPolicy: Всегда
айпи адрес:
тип: Public
порты:
- порт: 80
dnsNameLabel: aci-demo
объемы:
- имя: filesharevolume
azureFile:
Sharename: acishare
storageAccountName: <имя учетной записи хранения>
storageAccountKey: <ключ учетной записи хранения>
теги: {}
тип: Microsoft.ContainerInstance / containerGroups
Для развертывания с шаблоном YAML сохраните предыдущий YAML в файл с именем deploy-aci.yaml
, затем выполните команду создания контейнера az с параметром --file
:
# Развернуть с шаблоном YAML
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Развернуть контейнер и смонтировать том - диспетчер ресурсов
В дополнение к развертыванию CLI и YAML вы можете развернуть группу контейнеров и смонтировать том в контейнере с помощью шаблона Azure Resource Manager.
Сначала заполните массив томов
в разделе шаблона свойств
группы контейнеров.
Затем для каждого контейнера, в котором вы хотите смонтировать том, заполните массив volumeMounts
в разделе свойств определения контейнера.
Следующий шаблон Resource Manager определяет группу контейнеров с одним контейнером, созданным с помощью образа aci-hellofiles
. Контейнер подключает файловый ресурс Azure acishare , созданный ранее как том.Там, где указано, введите имя и ключ хранилища для учетной записи хранения, в которой размещается общий файловый ресурс.
Как и в предыдущих примерах, значение dnsNameLabel
должно быть уникальным в пределах региона Azure, в котором вы создаете экземпляр контейнера. При необходимости обновите значение в шаблоне.
{
«$ schema»: «https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#»,
"contentVersion": "1.0.0.0",
"переменные": {
"container1name": "адские файлы",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles "
},
"Ресурсы": [
{
"имя": "демонстрация файла-обмена",
"тип": "Microsoft.ContainerInstance / containerGroups",
«apiVersion»: «2019-12-01»,
"location": "[resourceGroup (). location]",
"характеристики": {
"контейнеры": [
{
"name": "[переменные ('container1name')]",
"характеристики": {
"изображение": "[переменные ('container1image')]",
"Ресурсы": {
"Запросы": {
"cpu": 1,
«memoryInGb»: 1.5
}
},
"порты": [
{
«порт»: 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/ aci / logs"
}
]
}
}
],
"osType": "Linux",
"айпи адрес": {
"type": "Public",
"порты": [
{
"протокол": "TCP",
"порт": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"объемы": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Имя учетной записи хранения>",
"storageAccountKey": "<ключ учетной записи хранения>"
}
}
]
}
}
]
}
Чтобы развернуть с помощью шаблона Resource Manager, сохраните предыдущий JSON в файл с именем deploy-aci.json
, затем выполните команду создания группы развертывания az с параметром --template-file
:
# Развертывание с помощью шаблона Resource Manager
группа развертывания az create --resource-group myResourceGroup --template-file deploy-aci.json
Смонтировать несколько томов
Чтобы подключить несколько томов к экземпляру контейнера, необходимо выполнить развертывание с помощью шаблона Azure Resource Manager, файла YAML или другого программного метода. Чтобы использовать шаблон или файл YAML, укажите сведения об общем ресурсе и определите тома, заполнив массив томов
в разделе свойств файла.
Например, если вы создали два общих ресурса Azure Files с именами share1 и share2 в учетной записи хранения myStorageAccount , массив томов
в шаблоне диспетчера ресурсов будет выглядеть следующим образом:
"томов": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": ""
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": ""
}
}]
Затем для каждого контейнера в группе контейнеров, в которой вы хотите смонтировать тома, заполните массив volumeMounts
в разделе свойств определения контейнера.Например, при этом монтируются два тома, myvolume1 и myvolume2 , ранее определенные:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/ mnt / share1 /"
},
{
"name": "myvolume2",
"mountPath": "/ mnt / share2 /"
}]
Следующие шаги
Узнайте, как подключить другие типы томов в экземплярах контейнеров Azure:
Том
файлов · Драйвер vSphere CSI
Драйвер vSphere Vanilla CSI версии 2.0 и выше поддерживает файловые тома, поддерживаемые общими файловыми ресурсами vSAN, для статического / динамического создания и монтирования контейнерными приложениями с отслеживанием состояния.Эта функция позволяет ссылаться на одни и те же общие данные среди нескольких модулей, распределенных в разных кластерах, что делает ее абсолютной необходимостью для приложений, которым требуется совместное использование.
Прежде чем продолжить, имейте в виду, что функция томов файлов не работает в сочетании с зонами с учетом топологии, расширением тома и функциями шифрования.
Перейдите к разделу требований ниже, чтобы включить эту функцию в вашей среде.
Требования
Проверьте матрицу совместимости CSI vSphere и раздел поддерживаемых функций, чтобы убедиться, что ваша среда соответствует всем требуемым версиям.Также проверьте раздел ограничений, чтобы понять, может ли эта функция удовлетворить ваши потребности.
Чтобы использовать эту функцию в среде vSphere, необходимо убедиться в следующем:
Включите и настройте файловую службу в конфигурации кластера vSAN. Вы должны настроить необходимые домены файловых служб, IP-пулы, сеть и т. Д., Чтобы создать тома общих файловых ресурсов. Чтобы начать работу, обратитесь к документации по vSphere 7.0 vSAN File service.
Создайте выделенную сеть общего доступа к файлам, соединяющую все узлы Kubernetes, и убедитесь, что эта сеть имеет возможность маршрутизации в сеть общего доступа к файлам vSAN.См. Сетевой доступ к файловому ресурсу vSAN, чтобы лучше понять настройку.
Настройте узлы Kubernetes для использования DNS-сервера, который использовался для настройки файловых служб в кластере vSAN. Это поможет узлам разрешить точки доступа к общим файловым ресурсам с помощью полного доменного имени (FQDN) при подключении файлового тома к модулю. Чтобы получить конфигурацию DNS файловой службы vSAN, перейдите на вкладку
Configure
вашего кластера vSAN и перейдите в раздел File Service, как показано на снимке экрана ниже.
- Настройте секрет kubernetes с именем
vsphere-config-secret
, чтобы указать сетевые разрешения и размещение томов для общих файловых ресурсов vSAN в среде vSphere. Этот шаг не является обязательным. Дополнительные сведения см. В инструкциях по установке драйвера CSI vSphere в файле конфигурацииvSphere для файловых томов
. Если не указано иное, драйвер CSI может по своему усмотрению разместить тома общего файлового ресурса в любом из ваших хранилищ данных vSAN с включенными файловыми службами.В таком сценарии файловые тома, поддерживаемые общими папками vSAN с использованием протокола NFSv4, будут принимать сетевые разрешения по умолчанию, то есть права чтения-записи и root-доступ ко всем диапазонам IP-адресов.
Перед тем, как начать использовать файловые службы в своей среде, имейте в виду, что если у вас есть общие файловые ресурсы, совместно используемые более чем одним кластером в vCenter, удаление PVC с политикой восстановления, установленной на Удалить
в любом одном кластере, может удалить базовый файловый ресурс, из-за чего том становится недоступным для остальных кластеров.
После того, как вы закончите настройку файловых служб, посмотрите это видео, чтобы приступить к интеграции файловых служб vSphere CSI с вашими приложениями. Мы также предоставили несколько пробных YAML для спецификаций Storage Class, PersistentVolumeClaim, PersistentVolume и Pod для вашего удобства.
В следующем разделе, посвященном интеграции файловых служб CSI, будут объяснены некоторые изменения спецификации, обязательные для томов общих файловых ресурсов.
Интеграция файловых служб с вашим приложением
Динамическое предоставление файловых томов
Чтобы попробовать этот пример, вы можете сначала выбрать здесь спецификацию Storage Class.Чтобы создать спецификацию PVC для файлового тома, установите для accessModes
значение ReadWriteMany
или ReadOnlyMany
в зависимости от ваших требований.
API
Версия: v1
вид: PersistentVolumeClaim
метаданные:
имя: пример-ванильный-файл-ПВХ
спецификация:
accessModes:
- ReadWriteMany
Ресурсы:
Запросы:
хранилище: 1Gi
storageClassName: пример-ванильный-файл-sc
kubectl apply -f example-pvc.yaml
После привязки PVC, если вы опишете соответствующий PV, он будет выглядеть примерно так:
Имя: pvc-45cea491-8399-11ea-883a-005056b61591
Ярлыки: <нет>
Аннотации: пв.kubernetes.io/provisioned-by: csi.vsphere.vmware.com
Финализаторы: [kubernetes.io/pv-protection]
StorageClass: пример-ванильный-файл-sc
Статус: Связано
Заявление: default / example-vanilla-file-pvc
Политика возврата: Удалить
Режимы доступа: RWX
VolumeMode: файловая система
Емкость: 1 Ги
Привязка к узлу: <нет>
Сообщение:
Источник:
Тип: CSI (источник тома интерфейса хранилища контейнеров (CSI))
Драйвер: csi.vsphere.vmware.com
VolumeHandle: файл: 53bf6fb7-fe9f-4bf8-9fd8-7a589bf77760
Только чтение: ложь
VolumeAttributes: хранилище.kubernetes.io/csiProvisionerIdentity=1587430348006-8081-csi.vsphere.vmware.com
type = vSphere CNS File Volume
События: <нет>
VolumeHandle
, связанный с PV, должен иметь префикс file:
для файловых томов.
Модуль с доступом для чтения и записи к PVC
Создайте Pod для использования PVC из приведенного выше примера.
API
Версия: v1
вид: Стручок
метаданные:
имя: пример-ванильный-файл-pod1
спецификация:
контейнеры:
- название: тест-контейнер
изображение: gcr.io / google_containers / busybox: 1.24
команда: ["/ bin / sh", "-c", "echo 'Привет! Это Pod1' >> /mnt/volume1/index.html && while true; do sleep 2; done»]
объем
- название: тест-том
mountPath: / mnt / volume1
restartPolicy: Никогда
объемы:
- название: тест-том
persistentVolumeClaim:
ClaimName: example-vanilla-file-pvc
Если вам нужно прочитать один и тот же файловый ресурс из нескольких модулей, укажите PVC, связанный с файловым ресурсом, в ClaimName
во всех спецификациях модулей.
Блок с доступом только для чтения к ПВХ
Если вам нужно создать модуль с доступом только для чтения к указанному выше PVC, вам необходимо явно указать readOnly
как true
в разделе persistentVolumeClaim
, как показано ниже. Обратите внимание, что простая установка accessModes
на ReadOnlyMany
в спецификации PVC не сделает PVC доступным только для чтения для модулей.
API
Версия: v1
вид: Стручок
метаданные:
имя: пример-ванильный-файл-pod2
спецификация:
контейнеры:
- название: тест-контейнер
изображение: gcr.io / google_containers / busybox: 1.24
команда: ["/ bin / sh", "-c", "пока верно; спать 2; готово"]
объем
- название: тест-том
mountPath: / mnt / volume1
restartPolicy: Никогда
объемы:
- название: тест-том
persistentVolumeClaim:
ClaimName: example-vanilla-file-pvc
readOnly: правда
Если вы введете exec
в этот модуль и попытаетесь создать файл в mountPath
, то есть / mnt / volume1
, вы получите сообщение об ошибке.
$ kubectl exec -it example-vanilla-file-pod2 -c test-container - / bin / sh
/
/ mnt / volume1
touch: abc.txt: файловая система только для чтения
Статическая подготовка файловых томов
Если у вас есть существующий том файла постоянного хранилища в вашем VC, вы можете использовать статическое выделение ресурсов, чтобы сделать экземпляр хранилища доступным для вашего кластера.
Определите PVC и PV, как показано ниже
API
Версия: v1
вид: PersistentVolume
метаданные:
имя: static-file-share-pv-name
аннотации:
pv.kubernetes.io/provisioned-by: csi.vsphere.vmware.com
ярлыки:
"статический-pv-ярлык-ключ": "статический-pv-ярлык-значение"
спецификация:
вместимость:
хранилище: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: сохранить
csi:
драйвер: "csi.vsphere.vmware.com"
volumeAttributes:
введите: "Том файла vSphere CNS"
"volumeHandle": "файл: 236b3e6b-cfb0-4b73-a271-2591b2f31b4c"
---
вид: PersistentVolumeClaim
apiVersion: v1
метаданные:
имя: static-file-share-pvc-name
спецификация:
accessModes:
- ReadWriteMany
Ресурсы:
Запросы:
хранилище: 1Gi
селектор:
matchLabels:
статический-pv-метка-ключ: статическое-pv-значение-метки
storageClassName: ""
меток
пара ключ-значение static-pv-label-key: static-pv-label-value
, используемый в метаданных PV , и селектор
PVC помогает сопоставить PVC с PV во время статической инициализации.Также не забудьте сохранить префикс
file:
файлового ресурса vSAN при заполнении поля volumeHandle
в спецификации PV.
ПРИМЕЧАНИЕ. Для файловых томов CNS поддерживает несколько PV, ссылающихся на один и тот же общий файловый том.
Создание тома SMB для файлов Azure NetApp
- 5 минут на чтение
В этой статье
Azure NetApp Files поддерживает создание томов с использованием NFS (NFSv3 и NFSv4.1), SMB3 или двойной протокол (NFSv3 и SMB). Потребление емкости тома учитывается в отношении выделенной емкости его пула.
В этой статье показано, как создать том SMB3. Для томов NFS см. Создание тома NFS. Для томов с двумя протоколами см. Создание тома с двумя протоколами.
Прежде чем начать
Настроить подключения к Active Directory
Перед созданием тома SMB необходимо создать подключение Active Directory. Если вы не настроили подключения Active Directory для файлов Azure NetApp, следуйте инструкциям, описанным в разделе Создание подключений Active Directory и управление ими.
Добавить том SMB
Щелкните колонку Volumes в колонке Capacity Pools.
Щелкните + Добавить том , чтобы создать том.
Откроется окно «Создать том».В окне «Создать том» щелкните Создать и укажите информацию для следующих полей на вкладке «Основные»:
Имя тома
Укажите имя для создаваемого тома.Имя тома должно быть уникальным в пределах каждого пула емкости. Он должен состоять не менее чем из трех символов. Вы можете использовать любые буквенно-цифровые символы.
Вы не можете использовать
по умолчанию
илиbin
в качестве имени тома.Пул емкости
Укажите пул емкости, в котором вы хотите создать том.Квота
Укажите объем логической памяти, выделенной тому.В поле Доступная квота отображается объем неиспользуемого пространства в выбранном пуле емкости, который можно использовать для создания нового тома. Размер нового тома не должен превышать доступную квоту.
Пропускная способность (МиБ / с)
Если том создается в ручном пуле емкости QoS, укажите требуемую пропускную способность для тома.Если том создается в пуле емкости автоматического QoS, в этом поле отображается значение (квота x пропускная способность уровня обслуживания).
Виртуальная сеть
Укажите виртуальную сеть (VNet) Azure, из которой вы хотите получить доступ к тому.Указанная виртуальная сеть должна иметь подсеть, делегированную файлам Azure NetApp. Доступ к службе файлов Azure NetApp можно получить только из той же виртуальной сети или из виртуальной сети, которая находится в том же регионе, что и том, через пиринг виртуальной сети. Вы также можете получить доступ к тому из локальной сети через Express Route.
Подсеть
Укажите подсеть, которую вы хотите использовать для тома.
Указанная подсеть должна быть делегирована службе файлов Azure NetApp.Если вы не делегировали подсеть, вы можете щелкнуть Create new на странице Create a Volume. Затем на странице «Создание подсети» укажите информацию о подсети и выберите Microsoft.NetApp / тома , чтобы делегировать подсеть для файлов Azure NetApp. В каждой виртуальной сети службе Azure NetApp Files можно делегировать только одну подсеть.
Если вы хотите применить существующую политику моментальных снимков к тому, щелкните Показать расширенный раздел , чтобы развернуть его, укажите, хотите ли вы скрыть путь к моментальному снимку, и выберите политику моментального снимка в раскрывающемся меню.
Для получения информации о создании политики моментальных снимков см. Управление политиками моментальных снимков.
Щелкните Протокол и введите следующую информацию:
Выберите SMB в качестве типа протокола для тома.
Выберите подключение Active Directory и из раскрывающегося списка.
Укажите имя общего тома в Имя общего ресурса .
Если вы хотите включить шифрование для SMB3, выберите Включить шифрование протокола SMB3 .
Эта функция включает шифрование данных SMB3 в полете. Клиенты SMB, не использующие шифрование SMB3, не смогут получить доступ к этому тому. Сохраненные данные шифруются независимо от этого параметра.
Дополнительные сведения см. В разделе часто задаваемых вопросов по шифрованию SMB.Функция Шифрование протокола SMB3 в настоящее время находится в предварительной версии. Если вы впервые используете эту функцию, зарегистрируйте ее перед ее использованием:
Register-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFSMBEncryption
Проверить статус регистрации функции:
Примечание
Состояние регистрации может находиться в состоянии
Регистрация
в течение 60 минут перед изменением наЗарегистрировано
. Прежде чем продолжить, подождите, пока не появится статусЗарегистрировано
.Get-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFSMBEncryption
Вы также можете использовать команды Azure CLI
az feature register
иaz feature show
для регистрации функции и отображения статуса регистрации.Если вы хотите включить непрерывную доступность для тома SMB, выберите Включить непрерывную доступность .
Вы должны включить непрерывную доступность только для контейнеров профилей пользователей SQL Server и FSLogix. Использование общих ресурсов непрерывной доступности SMB для рабочих нагрузок, отличных от контейнеров профилей пользователей SQL Server и FSLogix, не поддерживается. Эта функция в настоящее время поддерживается в Windows SQL Server. Linux SQL Server в настоящее время не поддерживается.Если вы используете учетную запись, не являющуюся администратором (домен), для установки SQL Server, убедитесь, что этой учетной записи назначены необходимые привилегии безопасности. Если учетная запись домена не имеет необходимых привилегий безопасности (
SeSecurityPrivilege
) и привилегию нельзя установить на уровне домена, вы можете предоставить привилегию учетной записи, используя поле Пользователи привилегии безопасности подключений Active Directory. См. Раздел Создание подключения к Active Directory.
Щелкните Review + Create , чтобы просмотреть сведения о томе.Затем щелкните Create , чтобы создать том SMB.
Созданный вами том появится на странице «Тома».
Том наследует атрибуты подписки, группы ресурсов и местоположения из своего пула емкости. Чтобы отслеживать статус развертывания тома, вы можете использовать вкладку Уведомления.
Управление доступом к тому SMB
Доступ к тому SMB управляется с помощью разрешений.
Разрешения для общего доступа
По умолчанию новый том имеет разрешения для общего доступа Все / Полный доступ .Члены группы администраторов домена могут изменять права доступа следующим образом:
- Сопоставьте общий ресурс с диском.
- Щелкните правой кнопкой мыши диск, выберите Свойства , затем перейдите на вкладку Безопасность .
Права доступа к файлам и папкам NTFS
Вы можете установить разрешения для файла или папки с помощью вкладки Security свойств объекта в клиенте Windows SMB.
Следующие шаги
Добавление, удаление или стирание томов APFS в Дисковой утилите на Mac
Файловая система Apple (APFS) выделяет дисковое пространство по запросу.Когда один контейнер (раздел) APFS имеет несколько томов, свободное пространство контейнера является общим и может быть выделено любому из отдельных томов по мере необходимости. Каждый том использует только часть всего контейнера, поэтому доступное пространство - это общий размер контейнера за вычетом размеров всех томов в контейнере.
На вашем компьютере macOS установлена на наборе томов, известном как группа томов . Группа томов состоит из одного тома, используемого для системных файлов (с именем Macintosh HD), и другого тома, используемого для данных (с именем Macintosh HD - Data).
Открытая дисковая утилита для меня
Добавление тома APFS
Каждый том, добавляемый в контейнер APFS, при необходимости может иметь другой формат APFS.
В приложении Disk Utility на Mac выберите существующий том APFS на боковой панели, затем нажмите кнопку «Добавить том» на панели инструментов.
Если Дисковая утилита не открыта, щелкните значок Панели запуска в Dock, введите Дисковая утилита в поле поиска, затем щелкните значок Дисковой утилиты.
Введите имя для нового тома APFS.
Щелкните всплывающее меню «Формат» и выберите формат APFS.
Если вы хотите вручную управлять распределением томов APFS, нажмите «Параметры размера», введите значения в поля и нажмите «ОК».
Размер резерва: Дополнительный размер резерва гарантирует, что объем хранилища остается доступным для этого тома.
Размер квоты: Необязательный размер квоты ограничивает объем хранилища, который может выделить том.
Щелкните Добавить.
По завершении операции щелкните Готово.
Удаление тома APFS
При удалении тома все данные на нем безвозвратно стираются, и том удаляется из контейнера.
В приложении Disk Utility на Mac выберите том APFS, который вы хотите удалить, на боковой панели.
Если Дисковая утилита не открыта, щелкните значок Панели запуска в Dock, введите Дисковая утилита в поле поиска, затем щелкните значок Дисковой утилиты.
Нажмите кнопку «Удалить том» на панели инструментов.
Если кнопка «Удалить том» неактивна, выбранный том нельзя удалить, поскольку он уже используется. Чтобы удалить том, вам нужно открыть Дисковую утилиту в MacOS Recovery. См. Статью службы поддержки Apple о восстановлении macOS.
Выполните одно из следующих действий:
Если том APFS, который вы хотите удалить, является членом группы томов, нажмите кнопку Удалить группу томов, чтобы удалить все тома в группе, или нажмите кнопку Удалить, чтобы удалить только выбранный том.
Нажмите кнопку «Удалить», чтобы удалить выбранный том.
По завершении операции нажмите Готово.
Стереть том APFS
При стирании тома все данные на томе стираются безвозвратно, а пустой том остается в контейнере.
В приложении Disk Utility на Mac выберите том APFS, который вы хотите удалить, на боковой панели.
Если Дисковая утилита не открыта, щелкните значок Панели запуска в Dock, введите Дисковая утилита в поле поиска, затем щелкните значок Дисковой утилиты.
Нажмите кнопку «Стереть» на панели инструментов.
Если кнопка «Стереть» неактивна, выбранный том нельзя стереть, потому что он уже используется. Чтобы стереть том, вам необходимо запустить Дисковую утилиту в MacOS Recovery. См. Статью службы поддержки Apple о восстановлении macOS.
При желании введите новое имя для тома.
Если вы хотите изменить формат, щелкните всплывающее меню «Формат» и выберите формат APFS.
Выполните одно из следующих действий:
Если том APFS, который вы хотите удалить, является членом группы томов, нажмите кнопку «Стереть группу томов», чтобы стереть все тома в группе, или нажмите кнопку «Удалить», стереть только выбранный том.