Википедия дефолт: Недопустимое название — Викисловарь

Содержание

Дефолт — Википедия

Дефо́лт (англ. default — невыполнение обязательств) — невыполнение договора займа, то есть неоплата своевременно процентов или основного долга по долговым обязательствам или по условиям договора о выпуске облигационного займа.

Дефолт может объявляться как компаниями, частными лицами, так и государствами («суверенный дефолт»), неспособными обслуживать все или часть своих обязательств. Технический дефолт (один из видов дефолта) объявляет кредитор заёмщику.

Корпоративный дефолт является важным понятием корпоративного права, являясь, с одной стороны, защитным механизмом для компании, испытывающей временные финансовые трудности (защита от враждебного поглощения, защита от рейдерского захвата и т. д.), а с другой — защищает кредиторов от невыполнения компанией обязательств по займам.

Виды дефолтов

Есть два принципиально разных вида дефолта: просто дефолт (банкротство) и технический дефолт.

Дефолт (банкротство)

Обычный дефолт обозначает невозможность выполнения заемщиком своих обязательств. Это означает банкротство заемщика. Если это компания, то назначается арбитражный управляющий, который определяет дальнейшие шаги (продажа компании целиком, продажа компании по частям и так далее). Если дефолт объявляет физическое лицо, действия по отношению к такому заемщику после объявления дефолта регулируются национальным законодательством, но чаще всего обычные люди защищаются законом. Если дефолт объявляет государство («суверенный дефолт»), то долги и споры подлежат урегулированию на международном уровне.

Технический дефолт

Технический дефолт возникает вопреки воле эмитента (заёмщика) из-за отсутствия возможностей для оплаты, в дальнейшем прецедент подлежит урегулированию в соответствии с соглашением сторон [1].Технический дефолт — это ситуация, когда заёмщик не выполняет условия договора займа, но физически он этот договор может выполнить в будущем. Невыполнение условий договора может подразумевать как отказ платить проценты или основную часть долга, так и отказ предоставить необходимые документы (например годовой отчёт) или любое другое нарушение пункта договора займа. Тогда кредитор может объявить технический дефолт заёмщику. Дальнейшая судьба заёмщика и кредитора зависит от причин дефолта и возможностей урегулирования долга в будущем на основе законодательства в стране. Довольно часто технический дефолт приводит к банкротству заёмщика.

В истории корпоративные дефолты случались довольно часто, и многие правительства и гранды мирового бизнеса когда-то были в состоянии технического дефолта.

Примеры

В 1998[2] дефолт настиг Россию. Выплаты по процентам ГКО превышали возможности бюджета России. Государство отказалось платить по долгам. Денежные вклады населения обесценились, банковская система страны оказалась подорванной.

В 2001[3] году дефолт произошёл в Аргентине, в Мексике — в 1994 году, в Уругвае — в 2003 году,[4] в Северной Корее — в 1987 году.[5] 1 июля 2015 года Греция допустила технический дефолт[6].

Примечания

Литература

Псевдоклассы — CSS | MDN

Fullscreen APIЖивой стандартОпределён :fullscreen.
HTML Living StandardЖивой стандартНет изменений от HTML5.
Selectors Level 4Рабочий черновикОпределены :any-link, :local-link, :scope, :active-drop-target, :valid-drop-target, :invalid-drop-target, :current, :past, :future, :placeholder-shown, :user-error, :blank, :nth-match(), :nth-last-match(), :nth-column(), :nth-last-column() и :matches().
Нет существенных изменений для псевдоклассов, определённых в Selectors Level 3 и HTML5 (не рассматривая семантическое значение).
HTML5РекомендацияОпределено семантическое значение в HTML контексте для  :link, :visited, :active, :enabled, :disabled, :checked и :indeterminate.
Определены :default, :valid, :invalid, :in-range, :out-of-range, :required, :optional, :read-only, :read-write и :dir().
CSS Basic User Interface Module Level 3РекомендацияОпределены :default, :valid, :invalid, :in-range, :out-of-range, :required, :optional, :read-only и :read-write, но без связанного семантического значения.
Selectors Level 3РекомендацияОпределены :target, :root, :nth-child(), :nth-last-of-child(), :nth-of-type(), :nth-last-of-type(), :last-child, :first-of-type, :last-of-type, :only-child, :only-of-type, :empty и :not().
Определён синтаксис для :enabled, :disabled, :checked и :indeterminate, но без связанного семантического значения.
Нет значительных изменений для псевдоклассов, определённых в CSS Level 2 (Revision 1).
CSS Level 2 (Revision 1)РекомендацияОпределены :lang(), :first-child
, :hover и :focus.
Нет значительных изменений для псевдоклассов, определённых в CSS Level 1.
CSS Level 1РекомендацияОпределены :link, :visited и :active, но без связанного семантического значения.

Фильм Дефолт (2018) смотреть онлайн бесплатно в хорошем HD 1080 / 720 качестве

Фильм основан на реальных событиях.

Нарезка новостей по телевидению: государственный долг Кореи достиг 10 миллиардов долларов; подушевой доход в Корее достиг 10 тысяч долларов; в Сеуле проводятся Олимпийские игры; выстроен жилой комплекс на 20 тысяч жителей.

На мониторе компьютера биржевого брокера появляется сообщение: всем иностранным инвесторам незамедлительно покинуть Корею.

Начальник департамента Банка Кореи Хан Ши Хон идет на службу. Она задерживается у газетного киоска, там она встречается со своими подчиненными, они вместе заходят в здание банка.

Мелкий предприниматель Гап Су приезжает на свое производство. Он опаздывает, его уже дожидаются рабочие и его заместитель Чён Су. Гап Су открывает ворота, рабочие включают станки и приступают к изготовлению металлических мисок. Чён Су включает радио. Передают новости. Что ты такое слушаешь? Гап Су переключает приемник на станцию, которая транслирует танцевальную музыку.

Финансовый аналитик Корейской корпорации коммерческих банков Юн Чжон Хак звонит западному инвестору, тот обрывает разговор, ссылаясь на занятость. Юн слушает радиопередачу, ведущая которой рассказывает о множестве писем от своих слушателей, в которых они жалуются на финансово-экономические трудности: долги, задержки с выплатой зарплаты, банкротства. Юн узнает, какая станция транслирует эту программу.

Гап Су звонят из крупного торгового центра и заказывают больную партию мисок.

Директор банка Кореи просматривает отчет. Он нервно курит и требует, чтобы секретарша немедленно вызвала к нему Хан. Та приходит к начальнику. Это правда? Почему вы мне сразу не сообщили? Вы были заняты финансовой реформой, отчет я представила десять дней назад. Директор: надо все обдумать. Хан: необходимо созвать срочное совещание с советником президента страны по экономическим вопросам. Директор созванивается с советником, потом в сопровождении Хан отправляется на встречу. Перед отъездом Хан говорит своим сотрудником: скоро все изменится. Наш отчет заметили, страна на грани банкротства.

Возле здания правительства проходит пикет. Люди требуют, чтобы правительство перестало вмешиваться в работу банка Кореи.

Выслушав директора банка, советник спрашивает его: это правда? Что делать? Хан советует собрать совещание, на которое нужно пригласить вице-премьера по финансовым сопросам и главу налогового ведомства.

На совещании Хан говорит о том, что иностранные компании выводят капиталы из стран Восточной Азии. Они не верят, что мы способны предотвратить кризис. Правительство тратит два миллиарда в неделю на поддержку валютного курса, ставки кредитования достигли рекордных отметок. Сегодня резервы составили 15,8 миллиардов долларов. Директор банка добавляет: правительство не может гарантировать экспортно-импортную деятельность. Хан: это дефолт. По моим подсчетам до полного банкротства Кореи осталась неделя.

Советник: у президента и без того много забот. Он может рассердиться, если ему об этом доложить.

Участники совещания идут к президенту и сообщают ему о своих выводах. Тот обрушивается на советника: ты же говорил, что у нас экономика на подъеме. Виноват, господин президент!

Юн подает заявление об уходе. Он говорит своему начальнику: я пойду своим путем, буду вкладываться в кризис, корейская экономика скоро обанкротится. Начальник говорит Юну, что национальная экономика обязана выстоять. Многие во время кризиса уходят с хорошей работы. Юн настаивает на увольнении: не надо меня учить, лучше выдайте мне выходное пособие. Ты конспиратор и сукин сын! Конспиролог, – поправляет начальника Юн. А я как сказал?

Юн обзванивает своих клиентов, приглашает на встречу.

Юн устраивает для приехавших клиентов презентацию. Он напоминает клиентам, что обеспечивал для них неплохие проценты по вкладам. Потом он показывает, что экономика Кореи работает по принципу финансовой пирамиды. По моим подсчетам она рухнет в этом году. Некоторые клиенты сомневаются в том, что дела идут настолько плохо. В доказательство своей правоты Юн вываливает из мешка на пол груду писем, которые он получил на радиостанции. В них люди жалуются на кризисные явления. Клиенты поднимаются и уходят. Юн остается один. К нему возвращается пожилой мужчина, он говорит, что верит в дефолт. Возвращается еще один клиент, молодой парень. Юн спрашивает, сколько ему лет. 24. Пошел отсюда, сопляк. Да у меня денег черт знает сколько. Он показывает сберкнижку. Там порядка миллиона долларов. Юн приглашает молодого богача садиться.

В цех Гап Су приходит владелец супермаркета господин Ли. Он предлагает оплатить заказ простым векселем. Но мы привыкли к расчетам наличными. Ли: сейчас никто наличными не пользуется. Гап Су решает подумать. Ли оставляет ему документы и уходит. Чён Су уговаривает Гап Су подписать договор и взять вексель. Но как мы рассчитаемся с контрагентами? Возьмем взаймы, а потом рассчитаемся. Гап Су подписывает договор.

Хан настаивает на совещании, что нужно предупредить население. Вице-премьер говорит, что это делать нельзя, начнется паника и сумятица. Поэтому возможность дефолта будет обсуждаться за закрытыми дверями. Ни слова прессе и банковским кругам! Хан: давайте спасем хотя бы крепкие компании. Вице-премьер: а кто их проверит на крепость?

Гап Су дома рассказывает жене: наши миски скоро будут продавать в супермаркете. Я заключил сделку на 500 тысяч. Как только я эту сделку завершу – ты уйдешь с работы. Диктор с экрана телевизора вещает: экономика страны входит в восстановительный этап.

Сотрудники докладывают Хан: Сорос прекратил поток инвестиций в Корею, тревожные слухи множатся. Хан: нам надо найти неопровержимые доказательства бездействия властей.

Вице-премьер встречается с младшим сыном президента страны: господин президент не молод, ты должен быть готов занять его место. У меня нет нужных знаний. Ничего, мы дадим тебе эти знания. Мы на пороге национального банкротства, так что нужно быть готовым к переменам.

Хан со своими сотрудниками проводит инспекцию в нескольких компаниях. Она убеждается в некомпетентности руководства, а также в наличии коррупционных схем, в которых принимает участие младший сын президента.

Юн говорит клиентам, что им нужно скупать иностранную валюту: вона, денежная единица Кореи, скоро рухнет. Сейчас курс – 800 вон за доллар. По мнению Юна скоро за доллар будут давать не меньше 2000 вон. Он говорит: я хочу обогатиться до того момента, когда рухнет биржа.

Клиенты Юна получают наличные доллары.

Новости по телевидению: произошел мгновенный обвал на бирже. Курс доллара резко подскочил. Торговый центр, заказавший миски у Гап Су – на грани банкротства.

Гап Су подъезжает к торговому центру. Господин Ли тайком выходит из здания супермаркета с черного хода. Его преследует толпа разъяренных кредиторов.

Хан стоит в пробке на мосту. Полиция пытается уговорить стоящего на перилах человека не бросаться вниз. Человек делает шаг вперед и падает в воду с огромной высоты.

Сотрудники сообщают Хан: обанкротились 20 из 100 крупнейших компаний. А если взять средние и мелкие – число банкротств дойдет до 2000. Скоро все коммерческие банки окажутся неплатежеспособными.

Юн с клиентами заходят в офис банка, наблюдают там жуткую панику. Молодой клиент приходит в восторг: мы обогатились! Юн дает парню пощечину: обогащайся, если хочешь. Но только запомни две вещи: я тебе не друг; и не возбуждайся при виде денег.

Вице-премьер на совещании говорит: у нас есть только один вариант – обратиться в МВФ. Хан спорит с вице-премьером. Она предлагает выпустить ценные бумаги. Вице-премьер высмеивает Хан, допускает сексистские высказывания. В перерыве вице-премьер разговаривает с главой налогового ведомства: мы можем изменить страну, покончить с этими профсоюзами, которые постоянно бастуют.

После перерыва советник президента говорит, что обращаться в МВФ не следует.

Гап Су выясняет с помощником, сколько они задолжали партнерам. Не выплатим долги – нас посадят в тюрьму. Один из кредиторов господин Чу готов подождать. Через несколько дней Чён Су берет беспроцентный заём у родителей жены. Гап Су пытается продать дом, но цены на недвижимость резко упали, и ему предлагают сумму меньше, чем он заплатил при покупке три года назад.

Выясняется, что из-за падения курса воны цены на сырье резко поднялись, денег, полученных Чён Су не хватает даже для частичной оплаты долгов. Чён Су попадает в тюрьму.

Гап Су рассчитывается с господином Чу фальшивым чеком. Тот кончает жизнь самоубийством.

Юн приобретает для себя шикарную квартиру. В одной из комнат он обнаруживает труп повесившегося человека.

Гап Су напивается, собирается выброситься из окна, но от мыслей о самоубийстве отвлекают рисунки его детей, висящие на стене.

Вице-премьер добивается отставки советника президента, который отказался от идеи получить деньги в МВФ. На его место назначают лояльного вице-премьеру человека, его однокурсника по обучению в Гарварде. Новый советник публично заявляет, что никаких переговоров с МВФ не ведется.

В Сеул приезжает председатель МВФ Мишель Камдессю.

Хан присутствует на тайных переговорах корейских чиновников и главой МВФ. В качестве условия для начала переговоров Камдессю выдвигает требование: три основных кандидата на предстоящих президентских выборах должны подписать заявление о том, что соглашение с МВФ не может быть исправлено или аннулировано. Корейцы соглашаются на это условие.

Камдессю озвучивает условия предоставления Корее займа: должны быть ликвидированы 11 коммерческих банков; в страну допускаются иностранные инвесторы с возможностью недружественного поглощения; процентные ставки по кредитам резко повышаются; проводится реформа трудовых отношений, которая неизбежно вызовет массовую безработицу и ухудшит положение рабочего класса и мелкого бизнеса.

Хан протестует, она считает, что переговоры следует прекратить. Она спрашивает Камдессю, что делает в Сеуле заместитель госсекретаря США, не действует ли МВФ в интересах Америки. Камдессю требует, чтобы Хан покинула переговоры.

Хан и ее сотрудники устраивают перс-конференцию, на которой рассказывают журналистам о некомпетентности и продажности членов правительства, о ужасных условиях, на которых Корее будет выделен заём МВФ. Однако на следующий день ни одна газета не публикует материалы этой пресс-конференции.

Переговоры с МВФ заканчиваются, стороны приходят к соглашению. Корее выделены средства.

После работы Хан встречает Гап Су. Здравствуй, моя младшая сестренка! Он просит Хан воспользоваться ее связями в банковских кругах и помочь ему с кредитом.

Проходит 20 лет. В Корее ничего по существу не изменилось.

Юн основал инвестиционный холдинг. Он читает лекции по экономике. За индивидуальную консультацию за ужином он берет по 20 тысяч.

Гап Су, пытаясь перекрыть шум работающих станков, по телефону разговаривает с сыном, который идет на вступительный экзамен в вуз. Он говорит молодому человеку: никогда не верь людям, которые делают тебе добро. И вообще не верь никому. Доверять можно только самому себе.

Вице-премьер встречается с нынешним президентом страны, которым стал младший сын бывшего президента. Вице-премьер предупреждает о наступлении очередного экономического кризиса: скоро нас ждет очень интересное время.

К Хан, которая работает в частной компании, приходит молодая сотрудница банка Кореи. Она дает Хан отчеты, из которых становится ясно, что в стране начинается новый кризис. Она просит Хан помочь ей. Та соглашается: но я работаю в команде, и во второй раз я не проиграю.

Кто такой Билл Хванг и как его маржин-колл обвалил акции ViacomCBS и Baidu

Что произошло

Акции американских компаний из сектора коммуникаций ViacomCBS, Discovery, а также китайских Baidu, Tencent Music и др. подверглись распродажам на прошлой неделе и потеряли десятки процентов в стоимости.

Это случилось на фоне принудительного закрытия позиций инвестиционной компании Archegos Capital Management, основанной Биллом Хвангом. Об этом сегодня сообщают Wall Street Journal, Reuters и многие другие деловые СМИ. 

По данным WSJ, в конце прошлой недели Morgan Stanley, Goldman Sachs и Deutsche Bank быстро избавились от крупных пакетов акций этих и других компаний, а объем продаж приблизился к $30 млрд в рамках ликвидации позиций Archegos Capital, которая, по сути, получила маржин-колл. 

Маржин-колл — уведомление о необходимости внесения средств на счет, направляемое клиенту в случае снижения стоимости его портфеля меньше размера начальной маржи.

По данным СМИ, Archegos покупала акции вышеназванных компаний не только на свои, но и на заемные средства, которые ей предоставляли брокеры в США. Когда акции стали дешеветь, и денежных средств компании уже не хватало для покрытия своих позиций, брокеры, согласно типичной процедуре маржинального кредитования, потребовали довнесения обеспечения. Когда этого не произошло, последовали принудительные продажи этих акций со стороны брокеров, что привело к ускоренному снижению котировок, так как каждый брокер спешил сократить уже свои убытки.

Сайт Archegos Capital Management в данный момент не доступен, комментариев со стороны компании не публикуется.

Кто пострадал

Прежде всего, прошел обвал в акциях компаний из сектора коммуникаций. За неделю цены акций ViacomCBS упала на 46%, Discovery — на 50%, Tencent Music — на 34%, Baidu — на 19%.

Швейцарский Credit Suisse заявил в понедельник об «очень значительном» ударе по результатам первого квартала после того, как он начал закрывать позиции в крупном американском хедж-фонде, который на прошлой неделе объявил дефолт по маржинальным требованиям. Акции Credit Suisse в данный момент теряют 14%.

Акции японской финансовой компании Nomura сегодня подешевели в Токио на 16%. Nomura утром заявила, что ее дочерняя компания в США, возможно, понесет убыток порядка $2 млрд. Убытки Nomura связаны со сделками Archegos, сообщает Bloomberg со ссылкой на источники, знакомые с этим вопросом.

Акции американских инвестбанков Morgan Stanley и Goldman Sachs дешевеют на премаркете на 2,5% и 1,6%.

Кто такой Билл Хванг

Archegos Capital была основана бывшим аналитиком по акциям Tiger Management Биллом Хвангом. Bloomberg отмечает, что Хванг, работавший на Джулиана Робертсона в Tiger Management, создал семейный офис Archegos после закрытия собственного хедж-фонда. Трейдеры, знакомые с его стилем торговли, говорят, что Хванг использует стратегию с исключительно большим кредитным плечом.

Хванг в 2012 г. обвинялся в инсайдерской торговле акциями китайских банков и мошенничестве. Он заплатил $44 млн для урегулирования обвинений в незаконной торговле, выдвинутых против него Комиссией по ценным бумагам и биржам (SEC) в связи с этим инцидентом.

Forbes заявила, что попытки найти отчеты Archegos Capital в базе SEC — EDGAR не дали результата, так как она является семейным офисом и, вероятно, не подпадает под требования о предоставлении соответствующих отчетов.

Что дальше

Основная волна продаж в бумагах ViacomCBS, Discovery, Baidu, Tencent Music и других компаний, очевидно, прошла и большая часть позиций Archegos ликвидирована, хотя в СМИ появляются новости о том, что какая-то часть еще существует. То есть, вероятно, снижения в этих бумагах прежними темпами уже не будет. На премаркете сегодня они в небольшом плюсе.

Под давлением оказались акции инвестбанков — здесь ситуация еще не в полной мере прояснилась, продавцы могут быть активны в секторе какое-то время.

Ротация из акций роста в циклические бумаги и так была на повестке, а история с Archegos может усилить страхи коррекции.

БКС Мир инвестиций

Украина может списать на дефолт «долг Януковича» перед Россией

Украина не погасит долг в 3 млрд долларов перед Россией, так как находится в преддефолтном состоянии. Об этом рассказал

ФБА «Экономика сегодня» доцент Института финансов и устойчивого развития РАНХиГС, кандидат экономических наук Олег Филиппов, комментируя отчет Всемирного банка о задолженности развивающихся стран перед Россией. 

Всемирный банк обнародовал размеры задолженностей государств мира перед Россией на 2019 год. Долги Белоруссии и Венесуэлы международная финансовая организация признает перманентно растущими, но невозвратными. Что касается долга Украины, взятом еще в 2013 году, его и вовсе исключили из доклада.

Перед Россией выявлены невозвратные долги

Задолженность более 30 государств перед Россией на конец 2019 года составляла почти 23 млрд долларов по двусторонним займам. При этом самым крупным должником была Белоруссия, сумма долга республики достигла 8,1 млрд долларов. Страна также получила от России кредит на 1 млрд долларов в 2020 году. Часть этой суммы уже перевели, часть ожидает подтверждения и будет выдана в случае, если у Белоруссии не будет просроченных задолженностей перед «Газпромом». 

Федеральное агентство новостей &nbsp/&nbsp

Более 1 млрд долларов должны Бангладеш, Венесуэла, Индия, Вьетнам и Йемен. Причем часть долгов не были погашены еще со времен СССР, в основном это касается стран Африки.

Всемирный банк не включил 3 млрд долларов в задолженность перед Россией

Украина задолжала России 769 млн долларов, считает Всемирный банк. В докладе не отражены 3 млрд долларов, которые бывший президент Украины Виктор Янукович занял еще в 2013 году. Средства нужны были на поддержку действующего режима.

ФБА «Экономика сегодня» &nbsp/&nbsp

Переговоры с Москвой подразумевали кредит на 15 млрд долларов, три из которых успели получить и перевести в еврооблигации со ставкой пять процентов в пользу России, их разместили на ирландской бирже сроком на два года. После этого Янукович не удержался у власти.

В декабре 2015 года Украина отказалась выплачивать свой долг, назвав его коммерческим и потребовала реструктуризации. Тогда Международный валютный фонд (МВФ) обязал долг выплатить, и Украина перевела его из коммерческого в статус политического. 

Очередное судебное заседание по этому вопросу состоялось в 2019 году в Лондоне, в результате Украина отказалась выполнять предписания суда по выплате суверенного долга. В тот же период МВФ согласился кредитовать Украину на 5,5 млрд долларов.  

МВФ совместно с минфином США могли бы погасить украинские долги, продемонстрировав свою реальную поддержку, но этого не случилось.

МВФ также может потребовать от Украины вернуть деньги

В конце 2020 года МВФ внезапно отказался предоставлять помощь Украине в связи с пандемией коронавируса, подчеркнув, что у них уже есть программа сотрудничества, которая не подразумевает вопрос экстренного финансирования. Госказначейство Украины отчиталось о завершении 2020 года с дефицит госбюджета в размере 3,5 млрд долларов. 

wikipedia.org &nbsp/&nbspsjiong / CC BY-SA 2.0

Более того, МВФ придерживает транши по основной программе, так как не видит прогресса в структурных реформах Киева. Также Международный валютный фонд дал понять, что может потребовать досрочно вернуть выданные кредиты, если поймет, что ситуация не меняется. 

«Украина долг не отдаст. Во-первых, сейчас наблюдается серьезный конфликт между Россией и Украиной. Во-вторых, Киев находится в преддефолтном состоянии, и гасить эти долги ему нечем.

Вероятно, Всемирный банк реально оценил возможность возврата долга в 3 млрд долларов и исключил его. Могли бы признать невозвратным, но, возможно, убрали для политической коррекции, учитывая полемику вокруг Крыма и Донбасса. По сути, нет фактической разницы — невозвратный это долг или его просто не будет в докладе», — рассуждает Филиппов.

Предпосылок для выплаты «долга Януковича» нет, заключил эксперт.

Девальвация: чем отличается от инфляции

Девальвация в буквальном смысле означает обесценивание национальной валюты к валютам других стран

Сергей Антонов

любит цифры

Профиль автора

До второй половины 20 века это слово имело другое значение. Существовал так называемый золотой стандарт: правительство любой страны привязывало стоимость денег к золоту. Например, до 1897 года российский рубль можно было обменять примерно на 1,5 грамма золота. Потом случилась денежная реформа, национальную валюту девальвировали в два раза, и за рубль уже давали 0,77 грамма золота. Такое уменьшение золотого содержания денежной единицы и называлось девальвацией.

Сейчас термин обычно употребляется, когда речь идет об обесценивании национальной валюты по отношению к твердым валютам — тем, которые из-за стабильного курса другие страны используют в качестве резервов. Когда говорят о девальвации рубля, чаще всего подразумевают его курс к доллару и евро. Центробанк регулирует курс рубля через покупку или продажу долларов и евро большими объемами — таким образом поднимают или понижают стоимость валюты.

Девальвируя национальную валюту, государство влияет на экономику. Пример: российский бюджет получает большую часть доходов от продажи нефти за доллары. Когда доллар стоит 50 Р, баррель нефти за 100 $ превращается в 5000 Р выручки. Можно девальвировать рубль, чтобы доллар стоил, например, 60 Р. Тогда выручка от продажи барреля нефти вырастет до 6000 Р.

Еще девальвацией государство поддерживает внутреннего производителя: импорт становится дороже и население начинает покупать отечественные товары.

Отличие от инфляции

Девальвацией называют обесценивание национальной валюты относительно других мировых валют. Инфляцией — снижение покупательной способности национальной валюты на внутреннем рынке. Девальвация — это когда растет цена доллара в обменнике, а инфляция — когда увеличивается стоимость хлеба в магазине.

Инфляция при этом тесно связана с девальвацией. Например, одно из возможных последствий девальвации — девальвационно-инфляционная спираль.

Например, какое-то государство живет за счет продажи полезных ископаемых за рубеж. И этому государству не хватает денег в бюджете. Чтобы увеличить доходы, центральный банк страны проводит девальвацию. Стоимость импорта резко взлетает, следом поднимают цены внутренние производители — инфляция растет. Уровень жизни падает, денег в бюджете не хватает. Государство снова проводит девальвацию национальной валюты… И так несколько раз — это вызывает кризис, который развивается по спирали.

Виды девальвации

В зависимости от причин девальвация может быть открытой и скрытой.

При открытой центральный банк страны официально объявляет о своих намерениях. Национальную валюту девальвируют за сутки, резко снижая ее стоимость и устанавливая новый курс в обменниках. Открытую девальвацию часто сопровождают денежной реформой: обменивают обесценивающиеся старые деньги на новые, но уже по новому курсу.

Например, до денежной реформы 1961 года в СССР за американский доллар официально давали 4 рубля. Старые рубли меняли на новые в соотношении 1 к 10. После реформы валютный курс изменили: доллар стал стоить 90 копеек, а не 40, как должно было быть. Правительство провело девальвацию рубля в 2,25 раза.

История денежных реформ в России, сборник научных статей

При скрытой девальвации государство никаких объявлений не делает, а курс своей валюты по отношению к другим снижает постепенно. С одной стороны, такой процесс позволяет внутреннему производителю подстроиться под изменения ситуации и начать конкурировать с импортом. С другой, это чревато инфляцией, ухудшением уровня жизни населения и оттоком инвестиций из страны. Кроме того, скрытый вид девальвации предполагает активное расходование золотовалютных резервов, ведь центральный банк вынужден искусственно корректировать курс валют.

Примеры

В 1998 году в России произошел экономический кризис, его причиной было резкое падение цен на нефть и газ, а также проблемы у растущих экономик государств Юго-Восточной Азии.

Параллельно с этим в России уже долгое время одним из источников дохода бюджета были ГКО — государственные краткосрочные облигации. Чтобы выплачивать долги по уже выпущенным ценным бумагам, правительство эмитировало новые, создавая, по сути, финансовую пирамиду. В итоге 17 августа 1998 года государство объявило технический дефолт и заморозило выплаты по своим ценным бумагам.

Параллельно с этим Центральный банк отказался от искусственного регулирования курса рубля. За полтора месяца курс рубля к доллару изменился в два с половиной раза — с 6 Р до 15 Р. Государство провело девальвацию.

Последствия

Девальвация — это не кризисная ситуация. Центральные банки многих государств, в том числе и России, часто проводят девальвацию для регулирования экономических процессов.

Плюсы и минусы

Плюсы:

  1. Повышаются доходы от экспорта — валютная выручка стоит дороже при пересчете на внутренние деньги.
  2. Экономятся золотовалютные резервы — государству не надо тратить запасы, чтобы поддерживать курс национальной валюты.
  3. Растут продажи отечественных товаров — импорт дорожает, выгоднее становится покупать свое.

Минусы:

  1. Население перестает хранить деньги на депозитах — выгоднее покупать иностранную валюту, потому что ее курс растет.
  2. У компаний, которые закупают сырье и оборудование за рубежом, увеличиваются расходы.
  3. Растет инфляция — раскручивается девальвационно-инфляционная спираль, падает стоимость сбережений населения, снижается покупательная способность.

Список клавиш по умолчанию — Official TF2 Wiki

Ниже представлен список клавиш по умолчанию для версии Team Fortress 2 для ПК. Любую клавишу можно переназначить через меню «Настройки», консоль разработчика или при помощи скриптов.

Передвижение

ВперёдW+forward
НазадS+back
Шаг влевоA+moveleft
Шаг вправоD+moveright
ПрыжокSpace+jump
ПрисестьCtrl+duck
Всплыть+moveupРедко используется со включённым обзором мышью
Погрузиться/+movedown
Смотреть вверхPage Up+lookup
Смотреть внизPage Down+lookdown

Общение

Голосовая связьV+voicerecordПозволяет разговаривать с другими членами вашей команды, если консольная переменная сервера sv_alltalk имеет значение 0. Если 1, то ваш голос услышат все игроки на сервере
ЧатYsayТекстовая переписка со всеми игроками на сервере, включая наблюдателей
Сообщение для командыUsay_teamТекстовая переписка только с членами вашей команды
Голосовое меню 1Zvoice_menu_1
Голосовое меню 2Xvoice_menu_2
Голосовое меню 3Cvoice_menu_3
Позвать медикаE+helpme

Team Fortress

Сменить класс,changeclass
Сменить команду.changeteam
Открыть меню снаряженияMopen_charinfo_direct
Открыть рюкзакNopen_charinfo_backpack
Открыть список контрактовF2show_quest_logОткрывает интерфейс КонТрекера
Открыть подбор игрыF3show_matchmakingВызывает несуществующую консольную команду
Быстрая смена снаряженияCAPSLOCK+quickswitch
Выбрать набор Аload_itempreset 0
Выбрать набор Бload_itempreset 1
Выбрать набор Вload_itempreset 2
Выбрать набор Гload_itempreset 3
Бросить дипломатLdropitem
НасмешкиG+taunt
Использовать предмет в ячейке действияH+use_action_slot_item
Тематическое действие/насмешка+context_actionОткрывает окно выбора насмешки, или исполняет стандартную насмешку при полном отсуствии насмешек в выбранном снаряжении
Сведения о картеIshowmapinfo
Осмотреть цель/предметF+inspect
Начать голосованиеcallvoteОткрывает окно создания голосования
Изменить готовностьF4player_ready_toggleИспользуется для изменения статуса готовности в Манн против машин или в соревновательных матчах

Особые умения классов

* Примечание: На мыши для правшей, MOUSE1 и MOUSE2 означают левая и правая кнопки мыши соответственно.

* Примечание: Tab ⇆ — клавиша по умолчанию для MOUSE2 на Mac.

Сражение

Осн. режим оружия↵ Enter+attack
Альт. режим оружияMOUSE2+attack2Также используется для особых умений классов
Особая атакаMOUSE3+attack3Активирует щит от снарядов медика и ярость пулеметчика в Манн против машин. Также используется для переключения типов защиты от урона Вакцинатора
Перезарядить оружиеR+reloadПереключает типы защиты от урона Вакцинатора, открывает меню телепортации Озарения или переключает команду маскировки в маскировочном наборе шпиона
Предыдущее оружиеMWHEELUPinvprev
Следующее оружиеMWHEELDOWNinvnext
Последн. оружиеQlastinvШпион: закрывает меню маскировки
Инженер: закрывает меню КПК
Закрывает меню выбора насмешки
1-е оружие1slot1Основное оружие (у шпиона — дополнительное)
2-е оружие2slot2Дополнительное оружие (у шпиона — слот построек, т.е. жучок)
3-е оружие3slot3Оружие ближнего боя
4-е оружие4slot4Используется инженером (для возведения построек) и шпионом (для маскировки)
5-е оружие5slot5Используется инженером для разрушения построек
6-е оружие6slot6Достает Абордажный крюк в режиме Супер-Манн (или на серверах с другими режимами, где разрешены использования крюков)
7-е оружие7slot7Не используются
8-е оружие8slot8
9-е оружие9slot9
0-е оружие0slot10

Разное

Нанести спрейTimpulse 201
Показать счёт игроковTab ⇆+showscores
Сделать скриншотF5screenshot
Сохранить повтор текущей или послед. жизниF6save_replay
Сделать скриншот для жалобыF7abuse_report_queue
ВыходF10quit prompt
Консоль разработчика`toggleconsole
Согласиться перейти на другой серверaskconnect_acceptИспользуется для принятия запроса сервера о присоединении к другому серверу
Посмотреть/Принять запросJcl_trigger_first_notificationТ.е. запросы на обмен
Удалить/Отклонить запросKcl_decline_first_notification

* Примечание: ] — клавиша по умолчанию для «Показать счёт игроков» на Mac.

Дополнительно

Ниже представлен список клавиш по умолчанию, которые не отображены в настройках, но назначены в файлах игры.

EndcenterviewВид по центру
Alt+strafeБлокирует поворот взгляда
INS+klookДвижение боком. При зажатии ограничивает движение игрока только в левую или правую сторону, блокируя движение вперед и назад
Psay_partyТекстовая переписка только с членами вашего лобби

Ошибки

  • Клавиша F3 назначена на несуществующую команду.
  • Действия команд +klook и +strafe перепутаны местами.

См. также

Мой поиск по умолчанию был взломан Википедией? | Форум поддержки Firefox

Ха-ха, очень забавно. Я тоже умею рассказывать анекдоты! Это не ошибка, это особенность!

Если ты не собираешься мне помогать, я был бы признателен, если бы ты оставил шутки при себе. Я потратил почти 40 часов бодрствования, пытаясь это исправить, и мое терпение было слишком истощено для игр.

РЕДАКТИРОВАТЬ И теперь мой поиск был захвачен ebay, что здесь происходит!

РЕДАКТИРОВАТЬ II

Боже мой, я думал, ты шутишь.Команда firefox всерьез поставила это обновление? Они специально вот так адресную строку сломали?

Мне будет трудно выразить это словами, не доведя до вульгарности. Я невероятно раздражен. Я часами пытался это исправить. Вы знаете, сколько рабочего времени я потерял из-за ожидания завершения сканирования на наличие вредоносных программ? Часы за часами, потерянные ветром. За последние дни я перезагружал свой компьютер в безопасном режиме чаще, чем за последние пять лет. Говоря о годах, мои закладки, мои настройки, мои поисковые системы, которые я сохранил в окне поиска, теперь исчезли, больше чем годовая настройка.Я собирался переустановить свою ОС сегодня утром, прежде чем увидел это сообщение, по крайней мере, я сэкономил столько времени.

Я серьезно подумываю о том, чтобы найти законные пути, которыми я могу воспользоваться. Команда Mozilla никак не может сломать такой основной компонент своего браузера без надлежащего тестирования и обратной связи перед развертыванием. Если это было сделано специально, я буду невероятно разочарован. Я ожидал большего от Mozilla, чем это.

Ха-ха, очень забавно. Я тоже умею рассказывать анекдоты! Это не ошибка, это особенность! Если ты не собираешься мне помогать, я был бы признателен, если бы ты оставил шутки при себе.Я потратил почти 40 часов бодрствования, пытаясь это исправить, и мое терпение было слишком истощено для игр. РЕДАКТИРОВАТЬ И теперь мой поиск был захвачен ebay, что здесь происходит! РЕДАКТИРОВАТЬ II Боже мой, я думал, ты шутишь. Команда firefox всерьез поставила это обновление? Они специально вот так адресную строку сломали? Мне будет трудно выразить это словами, не доведя до вульгарности. Я невероятно раздражен. Я часами пытался это исправить.Вы знаете, сколько рабочего времени я потерял из-за ожидания завершения сканирования на наличие вредоносных программ? Часы за часами, потерянные ветром. За последние дни я перезагружал свой компьютер в безопасном режиме чаще, чем за последние пять лет. Говоря о годах, мои закладки, мои настройки, мои поисковые системы, которые я сохранил в окне поиска, теперь исчезли, больше чем годовая настройка. Я собирался переустановить свою ОС сегодня утром, прежде чем увидел это сообщение, по крайней мере, я сэкономил столько времени. Я серьезно подумываю о том, чтобы найти законные пути, которыми я могу пойти.Команда Mozilla никак не может сломать такой основной компонент своего браузера без надлежащего тестирования и обратной связи перед развертыванием. Если это было сделано специально, я буду невероятно разочарован. Я ожидал большего от Mozilla, чем это.

Изменено , автор: Me-Name-Bob

Фонд Викимедиа по умолчанию включает HTTPS на всех сайтах, включая Википедию — TechCrunch

Фонд Викимедиа, который управляет Википедией и рядом других проектов на основе вики, объявил сегодня утром, что теперь он внедряет HTTPS по умолчанию на всех своих сайтах для шифрования своего трафика.В нем говорится, что это решение усложнит для правительств и других третьих лиц мониторинг трафика пользователей, а также затруднит для интернет-провайдеров цензуру доступа к определенным статьям Википедии или другой информации, размещенной в его сети. места.

Организация ранее внедряла HTTPS по умолчанию еще в 2013 году, но в то время этот переход затронул только зарегистрированных пользователей на веб-сайтах проектов Викимедиа, включая Википедию. Это означало, что для включения этой защиты пользователям сначала нужно было создать учетную запись на сайте, а затем войти в систему, используя комбинацию своего имени пользователя и пароля.Но для определенных стран, таких как Китай и Иран, где HTTPS был непростым вариантом, организация заявила, что им не нужно будет использовать HTTPS при входе в систему или просмотре страниц веб-сайтов.

Сегодня Фонд Викимедиа сообщает, что он также будет использовать HTTP Strict Transport Security (HSTS) для защиты от попыток «взломать» HTTPS и перехватить трафик.

Компания также проделала большую работу над собственной инфраструктурой и базой кода в рамках подготовки к изменению, которое включало калибровку конфигурации HTTPS для хорошей работы даже в странах или в сетях с плохой технической инфраструктурой.Организация заявляет, что свела к минимуму негативные последствия перехода на HTTPS в отношении «задержки, времени загрузки страницы и взаимодействия с пользователем».

Обеспокоенность влиянием HTTPS на пользователей с низкой пропускной способностью и плохим подключением долгое время была одной из причин, по которой организация воздерживалась от включения HTTPS по умолчанию. Фактически, в марте Лила Третьикова, исполнительный директор Фонда Викимедиа, процитировала именно эту проблему в интервью, где она объяснила, почему на сайтах Викимедиа не было сделано изменений, несмотря на все возрастающие призывы к крупным веб-ресурсам защищать своих пользователей с помощью технологии шифрования.

Однако организация предупреждает, что, хотя она сделала все возможное для поддержки ряда устройств, используемых в местах с различными уровнями связи и свободой информации, коммутатор «может повлиять на доступ для некоторого трафика Викимедиа в определенных частях мира». Другими словами, еще предстоит увидеть, какое влияние этот переход окажет на те места, где доступ к Интернету регулярно подвергается цензуре и слежке, а также в регионах, где сами сети развиты недостаточно.

«Что касается Китая, мы понимаем, что версии китайской Википедии как HTTP, так и HTTPS были недоступны в материковом Китае для большого числа пользователей в течение нескольких недель», — сказал представитель Викимедиа.«Однако некоторым пользователям удалось сохранить доступ — включение HTTPS повысит безопасность их соединений, а также повысит безопасность для других пользователей китайской Википедии, например, в Гонконге и на Тайване. Кроме того, многие пользователи в Китае обращаются к английской Википедии как к источнику, и теперь они могут получить доступ к английской Википедии более безопасно », — добавили они.

Организация не будет предлагать пользователям возможность отказаться от использования HTTPS по умолчанию, как это было в 2013 году, но заявляет, что это затруднило правительствам вмешательство в доступ пользователей к Википедии.

Викимедиа также напомнила пользователям, что она поддерживает HTTPS вручную в течение четырех лет с помощью HTTPS Everywhere, проекта, предлагающего расширения для браузера, которые упрощают веб-серфинг с использованием технологии HTTPS, и поддерживает HTTPS, когда пользователи перенаправляются на сайты Викимедиа из основных поисковых систем. .

Несмотря на то, что переход на HTTPS может повлиять на некоторых пользователей, организация заявила, что пришло время внести изменения:

«Мы считаем, что шифрование делает Интернет сильнее для всех.В мире, где массовое наблюдение стало серьезной угрозой интеллектуальной свободе, безопасные соединения необходимы для защиты пользователей по всему миру. Без шифрования правительствам будет легче отслеживать конфиденциальную информацию, создавая сдерживающий эффект и сдерживая участие, или, в крайних случаях, они могут изолировать или дисциплинировать граждан. Учетные записи также могут быть взломаны, страницы могут подвергаться цензуре, другие недостатки безопасности могут раскрыть конфиденциальную информацию и сообщения пользователей. В связи с этими обстоятельствами мы считаем, что по умолчанию настало время для HTTPS.Мы призываем других присоединиться к нам, поскольку мы продвигаемся вперед с этим обязательством ».

Фонд Викимедиа работал над этим сдвигом в течение последнего года, наращивая усилия по тестированию и оптимизации, и заявляет, что в настоящее время завершает внедрение HTTPS и HSTS для всех сайтов Викимедиа. Сегодня начинается заключительный этап этого перехода, и процесс должен быть завершен через пару недель.

Синтаксис

Markdown для вики-сайтов в Azure DevOps — Azure DevOps

  • 4 минуты на чтение

В этой статье

Службы Azure DevOps | Azure DevOps Server 2020 | Сервер Azure DevOps 2019 | ТФС 2018

Важно

Для просмотра содержимого, доступного для вашей платформы, убедитесь, что вы выбрали правильную версию этой статьи в селекторе версий, расположенном над оглавлением.Поддержка функций различается в зависимости от того, работаете ли вы в Azure DevOps Services или в локальной версии Azure DevOps Server, переименованной в Team Foundation Server (TFS).
Чтобы узнать, какую локальную версию вы используете, см. Какую платформу / версию я использую?

В этой статье вы найдете руководство по синтаксису Markdown, специфичное для Wiki, для использования в Azure DevOps.

Оглавление для вики-страниц

Чтобы создать оглавление, добавьте [[_TOC_]]. Оглавление создается при добавлении тега и наличии хотя бы одного заголовка на странице.

[[_TOC_]] можно разместить в любом месте страницы, чтобы отобразить оглавление. Для TOC учитываются только заголовки Markdown (теги заголовков HTML не рассматриваются).

Все теги HTML и Markdown удаляются из заголовков при добавлении их в блок TOC. Например, добавление полужирного шрифта и курсива к тексту заголовка отображает оглавление следующим образом.

Согласованность сохраняется в форматировании в оглавлении.

Примечание

Тег [[_TOC_]] чувствителен к регистру.Например, [[_toc_]] может не отображать оглавление. Кроме того, отображается только первый экземпляр [[_TOC_]], а остальные игнорируются.

Добавить диаграммы русалок на вики-страницу

Wiki поддерживает следующие типы диаграмм русалки:

Чтобы добавить диаграммы русалок на вики-страницу, используйте следующий синтаксис:

  ::: русалка
<синтаксис диаграммы русалки>
:::
  

Также есть кнопка на панели инструментов для добавления диаграммы Русалочки по умолчанию на вики-страницу.

Примечание

Большинство HTML-тегов и fontawesome не поддерживаются синтаксисом диаграммы «Русалка».Русалка не поддерживается в браузере Internet Explorer.

Эта функция поддерживается только в Azure DevOps Services (не в Azure DevOps Server).

Вставить видео на страницу Wiki

Чтобы встраивать видео с YouTube и Microsoft Streams на вики-страницу, используйте следующий синтаксис:

  ::: видео

:::
  

iframe — это встроенный блок iframe видео YouTube или Microsoft Streams.

Результат:

(окончание «:::» необходимо для предотвращения разрыва страницы)

Любой файл, содержащий блок YAML в Wiki, обрабатывается таблицей с одним заголовком и одной строкой. Блок YAML должен быть первым в файле и иметь форму действительного YAML, установленного между строками, пунктирными тройками. Он поддерживает все основные типы данных, списки и объекты в качестве значений. Синтаксис поддерживается в вики, предварительный просмотр файла кода.

Базовый пример:

  ---
тег: сообщение
название: Привет, мир
---
  

Теги со списком:

  ---
теги:
- сообщение
- код
- сеть
название: Привет, мир
---
  

Вставить результаты запроса Azure Boards в Wiki

Чтобы встроить результаты запроса Azure Boards на вики-страницу в виде таблицы, используйте следующий синтаксис:

  ::: query-table <идентификатор запроса>
:::
  

Вы также можете использовать панель инструментов и селектор запросов для встраивания результатов запроса на вики-страницу.

@ упоминания пользователей и групп

Для @ упоминаний пользователей или групп в вики введите «@» в редакторе вики. Это @mention открывает автозаполнение, в котором вы можете упоминать пользователей или группы, чтобы получать уведомления по электронной почте.

Вы также можете выбрать «@mention» на панели инструментов редактирования.

Посещения страниц для вики-страниц

Автоматически вы видите общее количество посещений страницы за последние 30 дней на каждой странице.

Используйте пакетный API pagesBatch , чтобы увидеть ежедневное количество посещений всех страниц с разбивкой на страницы. Однако они не сортируются по количеству посещений. Для данных старше 30 дней вы можете получить все посещения страниц с помощью остального API. Отсортируйте эти страницы по количеству посещений, чтобы попасть в первую сотню. Вы можете сохранить эти посещения на панели управления или в базе данных.

Примечание

Посещение страницы определяется как просмотр страницы данным пользователем за 15-минутный интервал.

Ссылка на рабочие элементы вики-страницы

Введите знак фунта ( # ), а затем введите идентификатор рабочего элемента.

Примечание

Эта функция доступна в TFS 2018.2 и более поздних версиях.

Поддержка HTML-тегов на вики-страницах

На вики-страницах вы также можете создавать богатый контент с помощью HTML-тегов.

Подсказка

Вы можете вложить уценку в свой HTML, но вы должны включить пустую строку между HTML-элементом и уценкой.

  

[Ссылка для уценки] (https://microsoft.com)

Примечание

Вставка расширенного содержимого в виде HTML поддерживается в Azure DevOps Server 2019.1 и более поздних версиях.

Пример — встроенное видео

  
  
  
  

Результат:

Пример — форматированный текст

  

Этот текст необходимо зачеркнуть , поскольку он избыточен !

Это текст телетайпа.

Цветной текст
Этот текст выровнен по центру.

Этот текст содержит текст надстрочный .

Этот текст содержит нижний индекс текст.

Статус проекта ЗЕЛЕНЫЙ , хотя количество ошибок / разработчик может быть красным. - Возможность диапазона

Отказ от ответственности: Wiki также поддерживает отображение небольшого текста

Текст большего размера

Результат:

Статьи по теме

Справочник по 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: последняя версия.
  

Перед тем, как демон Docker выполнит инструкции из Dockerfile , он выполняет предварительная проверка Dockerfile и возвращает ошибку, если синтаксис неверен:

  $ docker build -t test / myapp.

[+] Building 0.3s (2/2) ЗАВЕРШЕНО
 => [внутреннее] определение сборки загрузки из Dockerfile 0.1s
 => => перенос dockerfile: 60B 0.0 с
 => [внутренняя] загрузка .dockerignore 0,1 с
 => => контекст передачи: 2B 0,0 с
ошибка: не удалось решить: ошибка rpc: код = неизвестно desc = не удалось решить с помощью внешнего интерфейса dockerfile.v0: не удалось создать определение LLB:
строка ошибки синтаксического анализа файла dockerfile 2: неизвестная инструкция: RUNCMD
  

Демон Docker запускает инструкции из Dockerfile одну за другой, фиксация результата каждой инструкции к новому изображению, если необходимо, прежде чем, наконец, вывести идентификатор вашего новое изображение.Демон Docker автоматически очистит контекст, который вы послал.

Обратите внимание, что каждая инструкция выполняется независимо и вызывает новый образ. будет создан — поэтому RUN cd / tmp не повлияет на следующий инструкции.

По возможности Docker использует кеш сборки для ускорения сборки докера процесс значительно. На это указывает сообщение CACHED в консоли. выход. (Для получения дополнительной информации см. Руководство по передовым методам Dockerfile :

  $ docker build -t svendowideit / ambassador.[+] Корпус 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 указывает родительский элемент Изображение , с которого вы находитесь строительство. ИЗ может предшествовать только одна или несколько инструкций 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.Есть два каналы, на которых выпускаются новые изображения: стабильный и lab .

Стабильный канал следует за семантическим управлением версиями. Например:

  • 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.

Рассмотрим следующий пример, который неочевидным образом дает сбой на Окна . Второй \ в конце второй строки будет интерпретироваться как 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 инструкция и dir . Однако этот синтаксис в лучшем случае сбивает с толку, поскольку он не естественно для путей на 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 от до создавать несколько образов или использовать один этап сборки как зависимость для другого.Просто запишите последний идентификатор изображения, выводимый коммитом перед каждым новым ИЗ инструкции . Каждая инструкция FROM очищает любое состояние, созданное предыдущим инструкции.
  • При желании можно дать имя новому этапу сборки, добавив Имя 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 form)

Команда 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 (устарело)

Инструкция MAINTAINER устанавливает поле Автор сгенерированных изображений. Инструкция LABEL - гораздо более гибкая версия этого, и вы должны использовать вместо этого, поскольку он позволяет устанавливать любые требуемые метаданные, и их можно просмотреть легко, например с докером осмотрите . Чтобы установить метку, соответствующую MAINTAINER поле, которое вы можете использовать:

  LABEL org.opencontainers.image.authors = "[email protected]"
  

Затем это будет видно из docker inspect с другими метками.

EXPOSE

  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 update && apt-get install -y ...
  

Или используя ARG , который не сохраняется в окончательном образе:

  ARG DEBIAN_FRONTEND = не интерактивный
ЗАПУСТИТЬ apt-get update && apt-get install -y...
  

Альтернативный синтаксис

Инструкция ENV также допускает альтернативный синтаксис ENV <ключ> <значение> , исключая = . Например:

Этот синтаксис не позволяет устанавливать несколько переменных среды в одиночная инструкция ENV и может сбивать с толку. Например, следующие устанавливает единственную переменную среды ( 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 »в / relativeDir / :

  ДОБАВИТЬ 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 может содержать только инструкцию на основе URL-адреса ADD . Вы также можете пройти сжатый архив через STDIN: ( docker build - ), Dockerfile в корне архива и остальная часть Архив будет использоваться в качестве контекста сборки.

Если ваши файлы URL защищены с помощью аутентификации, вам необходимо использовать RUN wget , RUN curl или используйте другой инструмент из контейнера в качестве инструкции ADD не поддерживает аутентификацию.

Примечание

Первая обнаруженная инструкция ADD сделает кеш недействительным для всех следуя инструкциям из файла Docker, если содержимое имеет измененный.Это включает в себя аннулирование кеша для команд RUN . См. Dockerfile Best Practices. руководство - Использование кеша сборки для дополнительной информации.

ADD подчиняется следующим правилам:

  • Путь должен находиться внутри контекста сборки; вы не можете ADD ../something / something , потому что первый шаг docker build - отправить контекстный каталог (и подкаталоги) в демон докера.

  • Если - это URL, а не заканчивается косой чертой в конце, то файл загружается с URL-адреса и копируется на .

  • Если - это URL, а заканчивается косой чертой в конце, то имя файла выводится из URL-адреса, и файл загружается в <самый лучший> / <имя файла> . Например, ADD http: // example.com / foobar / будет создайте файл / foobar . URL-адрес должен иметь нетривиальный путь, чтобы в этом случае можно найти соответствующее имя файла ( http://example.com не будет работать).

  • Если - это каталог, копируется все содержимое каталога, включая метаданные файловой системы.

Примечание

Сам каталог не копируется, только его содержимое.

  • Если - это локальный tar-архив в распознанном формате сжатия (identity, gzip, bzip2 или xz), затем он распаковывается как каталог. Ресурсы из удаленные URL-адреса не распакованы . Когда каталог копируется или распакованный, он имеет то же поведение, что и tar -x , результат - объединение:

    1. Независимо от того, что существовало на пути назначения и
    2. Содержимое исходного дерева, конфликты разрешены в пользу из «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» к / relativeDir / :

  КОПИРОВАНИЕ тест.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 флаг, сборка завершится ошибкой при операции COPY .Использование числовых идентификаторов требует нет поиска и не зависит от содержимого корневой файловой системы контейнера.

Примечание

При сборке с использованием STDIN (сборка докеров - ) нет контекст сборки, поэтому COPY использовать нельзя.

Необязательно COPY принимает флаг --from = , который можно использовать для установки исходное местоположение на предыдущем этапе сборки (созданное с помощью FROM .. AS ) который будет использоваться вместо контекста сборки, отправленного пользователем.В случае сборки этап с указанным именем не может быть найден изображение с таким же именем попытался использовать вместо этого.

COPY подчиняется следующим правилам:

  • Путь должен находиться внутри контекста сборки; вы не можете COPY ../something / something , потому что первый шаг docker build - отправить контекстный каталог (и подкаталоги) в демон докера.

  • Если - это каталог, копируется все содержимое каталога, включая метаданные файловой системы.

Примечание

Сам каталог не копируется, только его содержимое.

  • Если - это файл любого другого типа, он копируется отдельно вместе с его метаданные. В этом случае, если заканчивается косой чертой /, он будет считаться каталогом и будет записано содержимое по адресу / base () .

  • Если указано несколько ресурсов , либо напрямую, либо из-за использование подстановочного знака, тогда должен быть каталогом, и он должен заканчиваться на косая черта /.

  • Если не заканчивается косой чертой, он будет считаться обычный файл, а содержимое будет записано в .

  • Если не существует, он создается вместе со всеми отсутствующими каталогами. на своем пути.

Примечание

Первая обнаруженная инструкция COPY сделает кеш недействительным для всех следуя инструкциям из файла Docker, если содержимое имеет измененный. Это включает в себя аннулирование кеша для команд 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 передаст аргумент -d точке входа.Вы можете переопределить инструкцию ENTRYPOINT , используя команду docker run --entrypoint флаг.

Оболочка Форма предотвращает запуск любых аргументов командной строки CMD или . используется, но имеет тот недостаток, что ваш 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 ни, 99,7 ид, 0,0 ват, 0,0 выс, 0,0 си, 0,0 ст
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"]
ВХОДНАЯ ТОЧКА ["/ 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 run . Чтобы гарантировать, что 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 определяют, какая команда выполняется при запуске контейнера. Есть несколько правил, описывающих их сотрудничество.

  1. Dockerfile должен указывать хотя бы одну из команд CMD или ENTRYPOINT .

  2. ENTRYPOINT должен быть определен при использовании контейнера в качестве исполняемого файла.

  3. CMD следует использовать как способ определения аргументов по умолчанию для команды ENTRYPOINT или для выполнения специальной команды в контейнере.

  4. 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 является образ, который заставляет docker run to создайте новую точку монтирования на / myvol и скопируйте файл приветствия во вновь созданный том.

Примечания к указанию томов

Помните о томах в Dockerfile .

  • Тома в контейнерах на базе Windows : при использовании контейнеров на базе Windows место назначения тома внутри контейнера должно быть одним из:

    • несуществующий или пустой каталог
    • диск, отличный от C:
  • Изменение громкости из Dockerfile : Если какие-либо шаги сборки изменит данные в томе после того, как они были объявлены, эти изменения будут отменены.

  • Форматирование JSON : список анализируется как массив JSON. Вы должны заключать слова в двойные кавычки ( "), а не в одинарные кавычки ( ').

  • Каталог хоста объявлен во время выполнения контейнера : Каталог хоста (точка монтирования) по своей природе зависит от хоста. Это для сохранения имиджа переносимость, поскольку не может быть гарантирована доступность заданного каталога хоста на всех хостах.По этой причине вы не можете смонтировать каталог хоста из в Dockerfile. Инструкция VOLUME не поддерживает указание host-dir параметр. Вы должны указать точку монтирования при создании или запуске контейнера.

ПОЛЬЗОВАТЕЛЬ

или

Инструкция ПОЛЬЗОВАТЕЛЬ устанавливает имя пользователя (или 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
WORKDIR b
РАБОЧИЙ ДИРЕК 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.
  

ПОЛЬЗОВАТЕЛЬ в строке 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 = echo hello , поэтому, если изменения, мы получаем промах кеша.

Рассмотрим другой пример в той же командной строке:

  ОТ 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 добавляет к изображению команду триггера , чтобы выполняться позже, когда изображение используется в качестве основы для другая сборка. Триггер будет выполнен в контексте последующая сборка, как если бы она была вставлена ​​сразу после FROM в последующем файле Dockerfile .

Любая инструкция сборки может быть зарегистрирована как триггер.

Это полезно, если вы создаете изображение, которое будет использоваться в качестве основы. для создания других образов, например среды сборки приложения или демон, который можно настроить в соответствии с настройками пользователя.

Например, если ваше изображение является многоразовым конструктором приложений Python, оно потребует, чтобы исходный код приложения был добавлен в конкретный каталог, и может потребоваться, чтобы сценарий сборки вызывал после что. Вы не можете просто позвонить по телефону ADD и RUN сейчас, потому что вы еще не иметь доступ к исходному коду приложения, и он будет другим для каждая сборка приложения. Вы можете просто предоставить разработчикам приложений с шаблоном Dockerfile для копирования и вставки в свое приложение, но это неэффективно, подвержено ошибкам и сложно обновлять, потому что смешивается с кодом конкретного приложения.

Решение состоит в том, чтобы использовать ONBUILD для регистрации предварительных инструкций в запустить позже, на следующем этапе сборки.

Вот как это работает:

  1. Когда он встречает инструкцию ONBUILD , построитель добавляет запускать метаданные создаваемого изображения. Инструкция иначе не влияет на текущую сборку.
  2. В конце сборки список всех триггеров сохраняется в манифест изображения, под ключом OnBuild .Их можно проверить с помощью Докер проверяет команду .
  3. Позже образ может быть использован в качестве основы для новой сборки, используя ИЗ инструкции . В рамках обработки инструкции FROM , нисходящий компоновщик ищет триггеры ONBUILD и выполняет их в том же порядке, в котором они были зарегистрированы. Если какой-либо из триггеров сбой, инструкция FROM прерывается, что, в свою очередь, вызывает строить на провал. Если все триггеры выполнены успешно, инструкция FROM завершается, и сборка продолжается как обычно.
  4. Триггеры удаляются из окончательного изображения после выполнения. В Другими словами, они не наследуются «внуками».

Например, вы можете добавить что-то вроде этого:

  ДОБАВИТЬ ДОБАВИТЬ. / приложение / 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 = ПРОДОЛЖИТЕЛЬНОСТЬ (по умолчанию: 30 с )
  • --start-period = ПРОДОЛЖИТЕЛЬНОСТЬ (по умолчанию: 0 с )
  • --retries = N (по умолчанию: 3 )

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

Если один запуск проверки занимает больше времени, чем , таймаут секунд, то проверка считается потерпевшим неудачу.

Требуется повторных попыток последовательных сбоев проверки работоспособности контейнера считать нездоровой .

период запуска обеспечивает время инициализации для контейнеров, которым требуется время для начальной загрузки. Отказ датчика в течение этого периода не будет засчитан в максимальное количество повторных попыток. Однако, если проверка работоспособности прошла успешно в течение начального периода, контейнер считается началось, и все последовательные сбои будут засчитываться в максимальное количество повторных попыток.

В Dockerfile может быть только одна инструкция HEALTHCHECK . Если вы перечислите более одного, тогда только последний HEALTHCHECK вступит в силу.

Команда после ключевого слова CMD может быть командой оболочки (например, HEALTHCHECK CMD / bin / check-running ) или массив exec (как и другие команды Dockerfile; см. например 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 эхо по умолчанию

# Выполняется как 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 , когда Оболочка , форма из них используется в 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: \ пример \
 ---> 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, автоматизация, создание образов

Настройки игры - Stellaris Wiki

Эта статья была проверена для текущей версии игры для ПК (3.0).

Настройки игры - это различные изменения, которые игрок может внести перед началом одиночной или многопользовательской игры.Эти настройки можно использовать, чтобы сделать игровые сессии короче или длиннее, проще или сложнее, а также при желании увеличить сложность.

При запуске новой игры игрок может выбрать тип галактики, в которой он будет играть. Расширение империи ограничено галактической плоскостью, поэтому форма галактики будет влиять на игру. Какие типы галактик доступны в начале игры, определяется количеством звезд в галактике.

Форма галактики [править]

Доступны 3 различных типа галактик, с 2 вариантами спиральной галактики, всего 4 возможных варианта формы галактики.

Тип Мин. Размер галактики Описание
Эллиптический Крошечный В эллиптических галактиках звезды расположены в форме эллипса, что приводит к равномерному географическому распределению. Расширение в основном беспрепятственное. Это также карта по умолчанию.
Спираль (2 рукава) Маленький В спиральных галактиках звезды расположены в рукавах, расходящихся по спирали.Спиральная галактика представляет собой интересную географию, поскольку галактические рукава слабо связаны друг с другом.
Спираль (4 рукава) Средний
Кольцо Крошечный Кольцевые галактики имеют звезды, расположенные в форме кольца вокруг галактического ядра, что позволяет легче отделить другие империи от остальной части галактики, чем с любой другой формой. Расширение ограничено по часовой стрелке или против часовой стрелки.Внутреннее кольцо окружает галактическое ядро ​​.

Размер галактики [править]

В дополнение к форме галактики, размер галактики также можно выбрать в начале игры, от 200 до 1000 звезд. Размер галактики влияет на количество звезд, а также на то, сколько империй ИИ, падших империй и империй мародеров может быть создано в начале игры.

Размер Количество звезд Максимум империй ИИ Максимум падших империй Максимум империй мародеров
Крошечный 200 6 1 1
Малый 400 12 2 2
Средний 600 18 3 2
Большой 800 24 4 3
Огромный 1000 30 5 3

Детали игры [править]

Advanced Empires [править]

Продвинутые империи - это империи искусственного интеллекта, которые начинают с преимущества перед игроками-людьми.Они получают следующие преимущества, чтобы иметь фору:

Game Phases [править]

Следующие события происходят после Mid-Game :

Следующие события происходят после End-Game

  • Кризис эндшпиля может спровоцировать
  • Падшие империи могут пробудить
  • Бемат Талассократия может появиться
  • Меньше случайных шпионских событий
  • Империи мародеров больше не могут стать Ордой
  • Империи ИИ быстрее обнаруживают улики L-ворот

Сложность [править]

Увеличивает сложность игры для более сложной задачи, с более высокой сложностью, предоставляя бонусы империям ИИ.Более высокая сложность также увеличивает силу кризиса эндшпиля. Вассалы игроков-людей не получают бонусов к сложности. В дополнение к бонусам, указанным ниже, ИИ получает небольшое увеличение скорости корабля, скорости варпа и бонусов уклонения.

Масштабирование сложности приводит к тому, что ИИ (или люди) империи и космические инопланетяне получают бонусы сложности с нуля и увеличиваются в течение игры, достигая бонуса, определенного уровнем сложности в конце игры.

Ironman Mode [править]

Ironman - это дополнительный игровой режим, который ограничивает контроль игрока над своим файлом сохранения, эффективно устраняя возможность исправления ошибок и изменения решений, принятых в ходе игры.В режиме Ironman сохранение вручную отключено, и игра запускается с одним файлом сохранения, который перезаписывается при каждом значительном действии. Консольные команды также отключены.

Для включения режима Ironman требуется, чтобы в меню настроек была включена опция Autosave to Cloud. . Кроме того, пользователю необходимо войти в Steam, а Steam Cloud должен быть включен для игры в библиотеке Steam (Stellaris / Properties / Updates ). Это также требует, чтобы «Включить синхронизацию Steam Cloud для приложений, которые ее поддерживают» был включен в настройках Steam (Steam / Настройки / Облако).

Достижения можно получить только в режиме Ironman. Если контрольная сумма изменена из-за наличия модов игрового процесса, Ironman Mode не будет предоставлять достижения.

Ссылки [править]

Автоматический порог

Содержание этой страницы не проверялось с момента перехода от MediaWiki. Если вы хотите помочь, ознакомьтесь с руководством!

Этот плагин преобразует 8- и 16-битные изображения в двоичную форму, используя различные методы определения порога global (на основе гистограммы).Сегментированная фаза всегда отображается белым цветом (255).

Для определения локального порога , а не глобального, см. Плагин Auto Local Threshold.

Установка

ImageJ : требуется v1.42m или новее. Загрузите Auto_Threshold-X.Y.Z.jar и скопируйте его в папку ImageJ / plugins и либо перезапустите ImageJ, либо выполните команду «Справка› Обновить меню ». После этого новая команда должна появиться в «Image› Adjust ›Auto Threshold».

Fiji : этот плагин является частью дистрибутива Fiji, скачивать его не нужно.

Использовать

Метод выбирает применяемый алгоритм (подробно описан ниже).

Параметры Игнорировать черный и Игнорировать белый устанавливают ячейки гистограммы изображения для уровней серого [0] и [255] на 0 соответственно. Это может быть полезно, если оцифрованное изображение имеет недоэкспонированные или переэкспонированные пиксели.

Белый объект на черном фоне устанавливает белыми пиксели со значениями выше порогового значения (в противном случае он устанавливает белыми значения, меньшие или равные пороговому значению).

Установить порог вместо порога (отдельные изображения) устанавливает пороговую таблицу LUT без изменения данных пикселей. Это работает только для одиночных изображений.

Если вы обрабатываете стек, доступны две дополнительные опции: Стек может использоваться для обработки всех срезов (порог каждого среза будет вычисляться отдельно). Если этот параметр не отмечен, будет обработан только текущий фрагмент. Использовать гистограмму стека сначала вычисляет гистограмму всего стека, затем вычисляет порог на основе этой гистограммы и, наконец, преобразовывает в двоичную форму все срезы с этим единственным значением.Выбор этой опции также автоматически выбирает опцию Stack выше.

Важные примечания:

1. Доступ к этому подключаемому модулю осуществляется через пункт меню Изображение ›Автоматический порог, однако методы определения порогового значения также были частично реализованы в апплете порогового значения ImageJ, доступном через пункт меню Изображение› Настроить ›Порог…. Хотя плагин Auto Threshold может использовать или игнорировать крайние значения гистограммы изображения (игнорировать черный, игнорировать белый), апплет не может: метод «по умолчанию» игнорирует крайние значения гистограммы, а другие методы - нет.Это означает, что применение двух команд к одному и тому же изображению может дать явно разные результаты. По сути, плагин Auto Threshold с правильными настройками может воспроизводить результаты апплета, но не наоборот.

2. Начиная с версии 1.12 плагин поддерживает пороговую обработку 16-битных изображений. Поскольку плагин Auto Threshold обрабатывает все пространство шкалы серого, он может работать медленно при работе с 16-битными изображениями. Обратите внимание, что апплет порогового значения ImageJ также обрабатывает 16-битные изображения, но на самом деле ImageJ сначала вычисляет гистограмму с 256 ячейками.Следовательно, могут быть различия в результатах, полученных на 16-битных изображениях при использовании апплета, и в истинных 16-битных результатах, полученных с помощью этого плагина. Обратите внимание, что для ускорения гистограмма заключена в квадратные скобки, чтобы включать только диапазон ячеек, содержащих данные (и избегать обработки пустых ячеек гистограммы на обоих крайних точках).

3. Результатом 16-битных изображений и стеков (при обработке всех срезов) является 8-битный контейнер, показывающий результат белым цветом [255] в соответствии с концепцией «двоичного изображения» (т.е.е. 8 бит со значениями 0 и 255). Однако для стеков, в которых пороговым значением является только 1 срез, результатом по-прежнему будет 16-битный контейнер с фазой с пороговым значением, показанной белым цветом [65535]. Это сделано для того, чтобы данные в оставшихся срезах остались нетронутыми. Параметр «Попробовать все» сохраняет 16-битный формат, чтобы по-прежнему показывать изображения с методами, которые могут не достичь порогового значения. Изображения и стопки, которые невозможно порог, остаются без изменений.

4. Одно и то же изображение в 8 и 16 битах (без масштабирования ) возвращает одно и то же пороговое значение, однако метод Ли первоначально возвращал разные значения, когда данные изображения находились на смещении (например.грамм. при добавлении фиксированного значения ко всем пикселям). Текущая реализация позволяет избежать этой проблемы, связанной с смещением.

5. То же изображение , масштабированное на фиксированное значение (например, при умножении всех пикселей на фиксированное значение), возвращает аналогичный пороговый результат (в пределах 2 уровней шкалы серого исходного немасштабированного изображения) для всех методов, кроме Хуанга, Ли и Треугольник из-за того, как работают эти алгоритмы. Например. Метод треугольника, примененный к 8-битному изображению и к тому же изображению, преобразованному в 16-битное с масштабированием , может привести к различным пороговым значениям.Это связано с тем, что масштабирование от 8 до 16 бит создает пустые интервалы между масштабированными значениями серого. Метод «Треугольник» (на основе геометрического подхода) находит те искусственные пробелы в новой 16-битной гистограмме, которые удовлетворяют ограничениям метода, но которых не было бы в исходном 8-битном изображении. Этого нельзя предотвратить (например, обнаружив пустые ячейки гистограммы), поскольку это может помешать анализу, когда на изображении существуют настоящие пустые ячейки (в отличие от артефактических).

Доступные методы

Попробовать все

Какой метод лучше всего сегментирует ваши данные? На этот вопрос можно попытаться ответить, используя опцию Попробуйте все .Это создает монтаж с результатами всех методов, позволяя исследовать, как различные алгоритмы работают с конкретным изображением или стеком. При использовании стеков в некоторых случаях может быть нецелесообразно сегментировать каждый фрагмент по отдельности, а не использовать единый порог для всех фрагментов (попробуйте mri-stack.tif из образцов изображений, чтобы лучше понять эту проблему).

Исходное изображение

Попробуйте все методы.

При обработке стеков с большим количеством фрагментов монтажные работы могут стать очень большими (примерно в 16 раз больше исходного размера стека), что может привести к нехватке оперативной памяти.Появится всплывающее окно (если в стопках более 25 срезов), чтобы подтвердить, должна ли процедура отображать результаты мониторинга. Выберите , чтобы вычислить пороговые значения и отобразить их в окне журнала.

По умолчанию

Это оригинальный метод автоматического определения порога, доступный в ImageJ, который является разновидностью алгоритма IsoData (описанного ниже). Параметр по умолчанию должен возвращать те же значения, что и параметр «Изображение› Настроить ›Порог› Авто »при выборе Игнорировать черный и Игнорировать белый .Чтобы указать сегментацию желаемой фазы, используйте опцию Белые объекты на черном фоне . Метод IsoData также известен как итеративное промежуточное средство .

Хуан

Реализует метод нечеткой пороговой обработки Хуанга. При этом используется функция энтропии Шеннона (можно также использовать функцию энтропии Ягера).

DOI: 10.1016 / 0031-3203 (94) E0043-K (PDF)

Портировано из подпрограмм 1 и 2 ME Celebi fourier_0.8.

Хуан2

Это альтернативная реализация метода Хуанга Дж.Schindelin с впечатляющим преимуществом в скорости на 16-битных изображениях. Однако на некоторых изображениях метод возвращает другие значения, чем исходный метод Хуанга, описанный выше.

Intermodes

Это предполагает бимодальную гистограмму. Гистограмма итеративно сглаживается с использованием скользящего среднего размера 3, пока не останется только два локальных максимума: j и k. Затем порог t вычисляется как (j + k) / 2. Изображения с гистограммами, имеющими крайне неравные пики или широкую и плоскую впадину, не подходят для этого метода.метод

DOI: 10.1111 / j.1749-6632.1965.tb11715.x

Портировано из кода MATLAB Антти Ниемисто. См. Здесь отличную слайд-презентацию и его оригинальный код MATLAB.

IsoData

Итерационная процедура на основе алгоритма изоданных:

DOI: 10.1109 / TSMC.1978.4310039

Процедура делит изображение на объект и фон, принимая начальное пороговое значение, затем вычисляются средние значения пикселей на уровне порогового значения или ниже и пикселей выше.Вычисляются средние значения этих двух значений, порог увеличивается, и процесс повторяется до тех пор, пока порог не станет больше, чем составное среднее. То есть

  порог = (средний фон + средние объекты) / 2.
  

Существует несколько реализаций этого метода. Смотрите исходный код для дальнейших комментариев.

Li

Реализует метод определения порога минимальной перекрестной энтропии Ли, основанный на итеративной версии (2-я ссылка ниже) алгоритма.

DOI: 10.1016 / 0031-3203 (93)

-D

DOI: 10.1016 / S0167-8655 (98) 00057-9 (PDF)

DOI: 10.1117 / 1.1631315

Портировано из подпрограмм 3 и 4 ME Celebi fourier_0.8.

MaxEntropy

Реализует метод определения порога Капура-Саху-Вонга (максимальная энтропия):

DOI: 10.1016 / 0734-189X (85) -2

Портировано из подпрограмм 5 и 6 ME Celebi fourier_0.8.

Среднее

В качестве порогового значения используется среднее значение уровней серого.Он используется некоторыми другими методами как порог первого предположения.

DOI: 10.1006 / cgip.1993.1040

MinError (I)

Итеративная реализация порогового значения минимальной ошибки Киттлера и Иллингворта.

Кажется, что эта реализация сходится чаще, чем оригинал. Тем не менее иногда алгоритм не сходится к решению. В этом случае в окно журнала выводится предупреждение, а результатом по умолчанию является первоначальная оценка порога, который вычисляется с использованием метода Mean.Параметры Игнорировать черный или Игнорировать белый могут помочь избежать этой проблемы.

DOI: 10.1016 / 0031-3203 (86)

-0

Портировано из кода MATLAB Антти Ниемисто. См. Здесь отличную слайд-презентацию и исходный код MATLAB.

Минимум

Подобно методу Intermodes, здесь предполагается бимодальная гистограмма. Гистограмма итеративно сглаживается с использованием скользящего среднего размера 3, пока не останется только два локальных максимума.Порог t таков, что yt − 1> yt <= yt + 1.

Изображения с гистограммами, имеющими крайне неравные пики или широкую и плоскую впадину, не подходят для этого метода.

DOI: 10.1111 / j.1749-6632.1965.tb11715.x

Портировано из кода MATLAB Антти Ниемисто. См. Здесь отличную слайд-презентацию и исходный код MATLAB.

Моменты

Метод Цая пытается сохранить моменты исходного изображения в пороговом результате.

DOI: 10.1016 / 0734-189X (85)