Как сделать контейнер: Блок-контейнер своими руками | Строительный портал

Содержание

Блок-контейнер своими руками | Строительный портал

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

 

  1. Виды блок-контейнеров
  2. Установка блок-контейнера

 

Виды блок-контейнеров

 

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

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

 

Блок-контейнер собственной сборки

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

 

Блок-контейнер, переделанный из транспортного контейнера

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

 

Блок-контейнер сборно-разборной

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

Производством таких блок-контейнеров занимаются специализированные компании. Сама конструкция в своем большинстве схожа с самодельным блок-контейнером, но вот использование сэндвич-плит в качестве стен, пола и потолка явственно выделяют сборно-разборной блок-контейнер. Если нет желания возиться со сваркой, то при наличии определенной суммы можно приобрести уже готовый блок-контейнер и просто собрать его как конструктор. На сборный блок-контейнер цена колеблется от 2 000 у.е. до 5 000 у.е. и зависит от внутренней площади.

 

Установка блок-контейнера

 

Определившись с видом блок-контейнера, можно приступать к его установке. Как уже отмечалось, каждый вид блок-контейнеров требует определенных трудозатрат.  Самым трудоемким является самодельный. Для его создания придется сначала выполнить чертеж, закупить материалы, затем собрать каркас и обшить его. Самый простой и наименее трудозатратный сборно-разборной контейнер. Но и общая стоимость может быть выше. Рассмотрим, как собрать своими руками каждый из этих видов блок-контейнеров.

 

Сборка блок-контейнера с нуля

Начиная работы по созданию самодельного блок-контейнера, первое, что придется делать, это его чертеж. Для этого можно воспользоваться компьютерной программой, такой как ArchiCad, а можно просто нарисовать простенький чертеж на листе бумаги. В чертеже необходимо указать все размеры будущего блок-контейнера с отображением места установки двери и окон. Для собственноручно сделанного блок-контейнера можно выбрать практически любые удобные для Вас размеры. Но есть один важный момент. Если в дальнейшем потребуется перевозить такой контейнер, то его ширина не должна превышать 2,5 м. Для создания блок-контейнера чертеж должен содержать описание всех материалов и размеры. Особое внимание следует уделить каркасу, а именно месту установки двери и окон. Для дверного проема и окон потребуется установить дополнительные стойки. Напоследок указываем материал для обшивки стен и утеплитель. Из

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

  • для каркаса гнутый швеллер 100 мм;
  • металлические листы толщиной 2 мм для чернового пола;
  • оцинкованный профнастил для внешней обшивки;
  • деревянный брусок 40х100 мм для лаг и внутреннего каркаса;
  • доски 25х200 мм для пола, а также напольное покрытие, например, линолеум;
  • супердиффузионная мембрана для паровлагозащиты;
  • утеплитель (минеральная или каменная вата) для стен, пола и потолка;
  • фанера или пластиковая вагонка для внутренней обшивки;
  • окна и дверь.

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

Обзаведясь всем необходимым, приступаем к возведению блок-контейнера. Начинаем с подготовки участка под установку блок-контейнера. Для этого разравниваем землю и тщательно утрамбовываем её. Чтобы контейнер не стоял на голой земле, под него необходимо создать простой фундамент. Для этого можно возвести столбики из кирпича, подложить бетонные плиты или создать свайный фундамент.

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

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

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

Аналогичным образом привариваем все остальные стойки.

Важно! Расстояние между стойками дверного проема должно быть равно ширине двери. Также для надежности между ними вверху приваривается перемычка. Высота от перемычки до уголка должна быть равна высоте двери. То же самое касается и оконных проемов. Но в них кроме верхней, должна присутствовать еще и нижняя перемычка.

Следующим шагом будет сварка верхней обвязки

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

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

Далее переходим к обшивке блок-контейнера оцинкованным профнастилом. Тут все довольно просто. Листы профнастила заводятся с внутренней стороны каркаса. Если высота листов несколько больше, то их можно без особых трудностей подрезать болгаркой. Профнастил фиксируется к каркасу несколькими способами. Можно использовать короткие саморезы по металлу с широкой шляпкой, а можно закрепить при помощи отрывных заклепок.

Важно! При установке листов в оконных проемах следует сделать напуск листа в 3 – 4 см на оконный проем. Это необходимо, чтобы после установки окон скрыть щели и места, задутые пеной.

Закончив со стенами, переходим к крыше блок-контейнера. Для самой крыши используем все тот же профнастил. Единственное, что необходимо будет сделать, это приварить еще несколько перемычек между стенами для надежного закрепления профнастила. Далее укладываем сам профнастил и фиксируем его к металлическому каркасу.

Следующим шагом будет создание деревянного каркаса, его утепление и обшивка. Сам каркас нужен для укладки утеплителя, чтобы последний не выпадал и не осыпался. Для этого используем деревянный брус. Вначале устанавливаем стойки, затем делаем перемычки между ними. Внутренние размеры между стойками и перемычками должны соответствовать размеру утеплителя, минус 5 – 10 мм для надежного закрепления внутри. Теперь поверх каркаса настилаем супердиффузионную мембрану и степлером закрепляем её к деревянному каркасу. В завершение внутрь каркаса укладывается утеплитель и поверх него снова настилается супердиффузионная мембрана. Осталось лишь обшить стены фанерой или вагонкой. Подобным образом обшиваем и потолок.

Что касается пола, то он будет на деревянных лагах, уложенных на металлические листы. Его создание схоже с обшивкой стен. Вначале укладываем лаги. Шаг между ними выбираем с таким расчетом, чтобы туда поместился утеплитель. Затем укладываем утеплитель и настилаем поверх мембрану. Осталось уложить и закрепить доски для самого пола. Сами доски нужно острогать, подогнать вплотную и закрепить к лагам гвоздями или саморезами, а поверх них настелить финишное напольное покрытие.

Теперь переходим к окнам и двери. Так как такой блок-контейнер предназначен для временного проживания, то не лишним будет позаботиться о прочной и надежной двери. Лучше всего будет сделать её самостоятельно из стальных листов. Но создание такой двери требует большого опыта, поэтому проще купить или сделать под заказ. Сама дверь устанавливается на металлические петли, которые привариваются к стойкам из гнутого швеллера. При установке петель необходимо строго следить за тем, чтобы они были на одной линии. Для металлической двери устанавливается три петли. Две сверху, на расстоянии 20 и 50 см от края двери и одна снизу, на расстоянии в 30 см от порога. После чего двери навешиваются на место.

Что касается окон, то тут есть один важный момент. Окна являются уязвимым местом при взломе, поэтому их необходимо будет защитить решетками. Сама решетка приваривается к стальному швеллеру, который выполняет роль оконного проема. Сами окна могут быть как деревянными, так и металлопластиковыми. При установке необходимо проверять вертикаль окна, чтобы оно не заваливалось. Щели между оконной рамой и стойкой швеллера можно запенить. На этом создание самодельного блок-контейнера закончено. При желании внутри можно провести дополнительные отделочные работы.

 

Переделка уже готового морского контейнера

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

Чтобы сделать блок-контейнер металлический, переделанный из транспортного, первое, что придется сделать, это выбрать и приобрести сам б/у контейнер. Объявления о продаже транспортных контейнеров можно найти без проблем. Такие контейнеры производятся в нескольких размерах: стандарт и НС (High Cube). Соответственно 20 и 40 футов в длину (6 и 12 метров), шириной 2,35 м и высотой 2,4 м и 2,7 м. Стандартный контейнер можно найти в среднем по 1200 у.е., а НС по 2100 у.е. Такие стандартные размеры накладывают определенные ограничения, особенно это неприятно в отношении ширины контейнера. Но выходом их данной ситуации может служить стыковка двух и более контейнеров. Чтобы создать пригодный для жизни блок-контейнер из транспортного, необходимо сделать следующее:

  • приобрести один или несколько контейнеров и доставить их на участок;
  • пока контейнеры будут в пути, подготовить и разровнять площадку под его установку;
  • как и в случае с самодельным, под транспортный контейнер создается простой легкий фундамент;
  • после доставки контейнер устанавливается на место. Для этого необходимо заранее заказать кран;
  • если контейнеры будут стыковаться, тогда после их установки срезаем соприкасающиеся стенки при помощи болгарки;
  • в месте стыковки, там, где проходит нижняя и верхняя обвязки, а также вертикальные стойки, свариваем их между собой;
  • если контейнер будет только один, то приступаем к вырезке проемов для окон и дверей. Делаем это при помощи автогена или болгарки;
  • для надежности двери в дверном проеме можно установить две вертикальные стойки из металлического уголка;
  • дальнейшие работы будут заключаться в отделке блок-контейнера. Они идентичны работам, описанным для самодельного блок-контейнера. Единственное важное отличие будет заключаться в необходимости внешней отделки, а именно покраске или облицовке металлических стенок.

 

Монтаж сборно-разборного блок-контейнера

Из всех блок-контейнеров наиболее дорогостоящим и в тоже время самым простым в сборке является сборно-разборной блок-контейнер. Такие контейнеры делаются под заказ на специализированном предприятии. Блок-контейнер сборный имеет стандартную ширину в 2,5 м, а его длина может колебаться от 2,5 м до 6 м. Также возможен вариант создания блок-контейнера большей длины. Сборка такого контейнера выполняется двумя монтажниками и напоминает обычный конструктор, время сборки от 4 до 6 часов. Такие высокие показатели сборки обусловлены использованием сэндвич-панелей и заранее подогнанными друг к другу деталями. При выполнении сборки своими руками в первый раз предприятие может предоставить своего специалиста и полный набор документации по сборке.

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

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

Блок-контейнер своими руками | Строительный портал

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

 

  1. Виды блок-контейнеров
  2. Установка блок-контейнера

 

Виды блок-контейнеров

 

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

 

Блок-контейнер собственной сборки

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

 

Блок-контейнер, переделанный из транспортного контейнера

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

 

Блок-контейнер сборно-разборной

С развитием рынка и технологий в строительстве начали появляться блок-контейнеры, которые легко монтируются и также легко разбираются. Сборно-разборные контейнеры пользуются огромной популярностью у строительных компаний. Их можно разобрать и хранить на складе, благо – места они занимают немного, а при необходимости быстро возвести бытовки для рабочих на стройплощадке. Производством таких блок-контейнеров занимаются специализированные компании. Сама конструкция в своем большинстве схожа с самодельным блок-контейнером, но вот использование сэндвич-плит в качестве стен, пола и потолка явственно выделяют сборно-разборной блок-контейнер. Если нет желания возиться со сваркой, то при наличии определенной суммы можно приобрести уже готовый блок-контейнер и просто собрать его как конструктор. На сборный блок-контейнер цена колеблется от 2 000 у.е. до 5 000 у.е. и зависит от внутренней площади.

 

Установка блок-контейнера

 

Определившись с видом блок-контейнера, можно приступать к его установке. Как уже отмечалось, каждый вид блок-контейнеров требует определенных трудозатрат.  Самым трудоемким является самодельный. Для его создания придется сначала выполнить чертеж, закупить материалы, затем собрать каркас и обшить его. Самый простой и наименее трудозатратный сборно-разборной контейнер. Но и общая стоимость может быть выше. Рассмотрим, как собрать своими руками каждый из этих видов блок-контейнеров.

 

Сборка блок-контейнера с нуля

Начиная работы по созданию самодельного блок-контейнера, первое, что придется делать, это его чертеж. Для этого можно воспользоваться компьютерной программой, такой как ArchiCad, а можно просто нарисовать простенький чертеж на листе бумаги. В чертеже необходимо указать все размеры будущего блок-контейнера с отображением места установки двери и окон. Для собственноручно сделанного блок-контейнера можно выбрать практически любые удобные для Вас размеры. Но есть один важный момент. Если в дальнейшем потребуется перевозить такой контейнер, то его ширина не должна превышать 2,5 м. Для создания блок-контейнера чертеж должен содержать описание всех материалов и размеры. Особое внимание следует уделить каркасу, а именно месту установки двери и окон. Для дверного проема и окон потребуется установить дополнительные стойки. Напоследок указываем материал для обшивки стен и утеплитель. Из материалов потребуются следующие:

  • для каркаса гнутый швеллер 100 мм;
  • металлические листы толщиной 2 мм для чернового пола;
  • оцинкованный профнастил для внешней обшивки;
  • деревянный брусок 40х100 мм для лаг и внутреннего каркаса;
  • доски 25х200 мм для пола, а также напольное покрытие, например, линолеум;
  • супердиффузионная мембрана для паровлагозащиты;
  • утеплитель (минеральная или каменная вата) для стен, пола и потолка;
  • фанера или пластиковая вагонка для внутренней обшивки;
  • окна и дверь.

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

Обзаведясь всем необходимым, приступаем к возведению блок-контейнера. Начинаем с подготовки участка под установку блок-контейнера. Для этого разравниваем землю и тщательно утрамбовываем её. Чтобы контейнер не стоял на голой земле, под него необходимо создать простой фундамент. Для этого можно возвести столбики из кирпича, подложить бетонные плиты или создать свайный фундамент.

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

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

Сварив нижнюю обвязку, переходим к стойкам. Они будут располагаться в углах обвязки, одна или две с тыльной стенки, а также в районе дверного проема и окон. Начинаем с углов. После того как будет установлена стойка, необходимо чтобы напарник удерживал её строго в вертикальном положении, пока сварщик прихватит стойку в нескольких местах. И если получилось сделать без наклона, то привариваем стойку окончательно. Для дополнительной устойчивости внизу стойки можно приварить треугольные распорки. Аналогичным образом привариваем все остальные стойки.

Важно! Расстояние между стойками дверного проема должно быть равно ширине двери. Также для надежности между ними вверху приваривается перемычка. Высота от перемычки до уголка должна быть равна высоте двери. То же самое касается и оконных проемов. Но в них кроме верхней, должна присутствовать еще и нижняя перемычка.

Следующим шагом будет сварка верхней обвязки. Тут все довольно просто. Поверх уже сваренных стоек по периметру укладываются уголки для верхней обвязки и привариваются.

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

Далее переходим к обшивке блок-контейнера оцинкованным профнастилом. Тут все довольно просто. Листы профнастила заводятся с внутренней стороны каркаса. Если высота листов несколько больше, то их можно без особых трудностей подрезать болгаркой. Профнастил фиксируется к каркасу несколькими способами. Можно использовать короткие саморезы по металлу с широкой шляпкой, а можно закрепить при помощи отрывных заклепок.

Важно! При установке листов в оконных проемах следует сделать напуск листа в 3 – 4 см на оконный проем. Это необходимо, чтобы после установки окон скрыть щели и места, задутые пеной.

Закончив со стенами, переходим к крыше блок-контейнера. Для самой крыши используем все тот же профнастил. Единственное, что необходимо будет сделать, это приварить еще несколько перемычек между стенами для надежного закрепления профнастила. Далее укладываем сам профнастил и фиксируем его к металлическому каркасу.

Следующим шагом будет создание деревянного каркаса, его утепление и обшивка. Сам каркас нужен для укладки утеплителя, чтобы последний не выпадал и не осыпался. Для этого используем деревянный брус. Вначале устанавливаем стойки, затем делаем перемычки между ними. Внутренние размеры между стойками и перемычками должны соответствовать размеру утеплителя, минус 5 – 10 мм для надежного закрепления внутри. Теперь поверх каркаса настилаем супердиффузионную мембрану и степлером закрепляем её к деревянному каркасу. В завершение внутрь каркаса укладывается утеплитель и поверх него снова настилается супердиффузионная мембрана. Осталось лишь обшить стены фанерой или вагонкой. Подобным образом обшиваем и потолок.

Что касается пола, то он будет на деревянных лагах, уложенных на металлические листы. Его создание схоже с обшивкой стен. Вначале укладываем лаги. Шаг между ними выбираем с таким расчетом, чтобы туда поместился утеплитель. Затем укладываем утеплитель и настилаем поверх мембрану. Осталось уложить и закрепить доски для самого пола. Сами доски нужно острогать, подогнать вплотную и закрепить к лагам гвоздями или саморезами, а поверх них настелить финишное напольное покрытие.

Теперь переходим к окнам и двери. Так как такой блок-контейнер предназначен для временного проживания, то не лишним будет позаботиться о прочной и надежной двери. Лучше всего будет сделать её самостоятельно из стальных листов. Но создание такой двери требует большого опыта, поэтому проще купить или сделать под заказ. Сама дверь устанавливается на металлические петли, которые привариваются к стойкам из гнутого швеллера. При установке петель необходимо строго следить за тем, чтобы они были на одной линии. Для металлической двери устанавливается три петли. Две сверху, на расстоянии 20 и 50 см от края двери и одна снизу, на расстоянии в 30 см от порога. После чего двери навешиваются на место.

Что касается окон, то тут есть один важный момент. Окна являются уязвимым местом при взломе, поэтому их необходимо будет защитить решетками. Сама решетка приваривается к стальному швеллеру, который выполняет роль оконного проема. Сами окна могут быть как деревянными, так и металлопластиковыми. При установке необходимо проверять вертикаль окна, чтобы оно не заваливалось. Щели между оконной рамой и стойкой швеллера можно запенить. На этом создание самодельного блок-контейнера закончено. При желании внутри можно провести дополнительные отделочные работы.

 

Переделка уже готового морского контейнера

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

Чтобы сделать блок-контейнер металлический, переделанный из транспортного, первое, что придется сделать, это выбрать и приобрести сам б/у контейнер. Объявления о продаже транспортных контейнеров можно найти без проблем. Такие контейнеры производятся в нескольких размерах: стандарт и НС (High Cube). Соответственно 20 и 40 футов в длину (6 и 12 метров), шириной 2,35 м и высотой 2,4 м и 2,7 м. Стандартный контейнер можно найти в среднем по 1200 у.е., а НС по 2100 у.е. Такие стандартные размеры накладывают определенные ограничения, особенно это неприятно в отношении ширины контейнера. Но выходом их данной ситуации может служить стыковка двух и более контейнеров. Чтобы создать пригодный для жизни блок-контейнер из транспортного, необходимо сделать следующее:

  • приобрести один или несколько контейнеров и доставить их на участок;
  • пока контейнеры будут в пути, подготовить и разровнять площадку под его установку;
  • как и в случае с самодельным, под транспортный контейнер создается простой легкий фундамент;
  • после доставки контейнер устанавливается на место. Для этого необходимо заранее заказать кран;
  • если контейнеры будут стыковаться, тогда после их установки срезаем соприкасающиеся стенки при помощи болгарки;
  • в месте стыковки, там, где проходит нижняя и верхняя обвязки, а также вертикальные стойки, свариваем их между собой;
  • если контейнер будет только один, то приступаем к вырезке проемов для окон и дверей. Делаем это при помощи автогена или болгарки;
  • для надежности двери в дверном проеме можно установить две вертикальные стойки из металлического уголка;
  • дальнейшие работы будут заключаться в отделке блок-контейнера. Они идентичны работам, описанным для самодельного блок-контейнера. Единственное важное отличие будет заключаться в необходимости внешней отделки, а именно покраске или облицовке металлических стенок.

 

Монтаж сборно-разборного блок-контейнера

Из всех блок-контейнеров наиболее дорогостоящим и в тоже время самым простым в сборке является сборно-разборной блок-контейнер. Такие контейнеры делаются под заказ на специализированном предприятии. Блок-контейнер сборный имеет стандартную ширину в 2,5 м, а его длина может колебаться от 2,5 м до 6 м. Также возможен вариант создания блок-контейнера большей длины. Сборка такого контейнера выполняется двумя монтажниками и напоминает обычный конструктор, время сборки от 4 до 6 часов. Такие высокие показатели сборки обусловлены использованием сэндвич-панелей и заранее подогнанными друг к другу деталями. При выполнении сборки своими руками в первый раз предприятие может предоставить своего специалиста и полный набор документации по сборке.

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

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

Жилая бытовка блок контейнер своими руками

В этой статье Очумелый Строитель. ru поведает вам как сделать бытовку блок контейнер своими руками

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

Преимущества.

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

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

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

Процесс сборки блок контейнера.

Пошаговые действия:

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

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

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

Возводим каркас блок контейнера.

Шаг 1. После подготовки фундамента, приступаем к монтажу каркаса. Лучше всего для стойки каркаса применять брус с сечением не менее 15х15 сантиметров. Если сечением будет меньше, то это приведет к тому, что каркас окажется непрочным.

Шаг 2. Далее устанавливаем горизонтальные балки обвязки нижнего и верхнего уровня (яруса). Чтобы брус прослужил достаточно долго и был менее подвержен грибкам и паразитам, его необходимо тщательно обработать специальным антисептиком.

Шаг 3. После монтажа каркаса, необходимо приступить к его обшивке. Первым делом нужно выбрать, какой утеплитель использовать, это зависит от региона, времени года и длительности эксплуатации бытовки.

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

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

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

Утепление пола и возведение крыши.

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

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

3. Если вы решили утеплить стены и пол бытовки, то после возведения крыши потребуется обшить потолок. Для этого применяется пароизоляционный, гидроизоляционный и теплоизоляционный материалы, которые обшивают листами ДВП или ламинированным ДСП.

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

Следуйте нашим рекомендациям и создавайте комфортные бытовки блок контейнеры своими руками.


Рекомендуем вам еще:

Как сделать блок контейнер своими руками чертежи. Технология изготовления силового каркаса блок контейнера Баня из контейнера: с чего следует начать

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

Виды конструкций бытовок

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

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

Основу всех бытовок представляют конструктивные элементы, которые имеют четкие размеры. Таким образом, бытовка может быть построена и отделана внутри из:

  • доски и бруса;
  • оцинкованных листов;
  • натуральной или пластиковой вагонки;
  • утеплительных материалов.

Сама бытовка представляет собой очень простое строение, размерами длина-6,0 м, ширина-2,40м, высота-2,4 м. которое, как правило, состоит из:

  • швеллер гнутый 100-120 мм.
  • угловые стойки – уголок 75х75
  • кровля – лист металлический 1,5 мм. х/к, гладкая
  • утепление – минеральная вата, толщина 50 мм УРСА (пол, потолок, стены)
  • пароизоляция – техническая пленка
  • входная дверь – каркасная, обшитая листом С-8 0,4 мм., либо металлическая
  • межкомнатная дверь, если предусмотрена конструкцией
  • окно – 800*1000 мм деревянное или пластиковое, 2 стекла
  • наружная обшивка блок-контейнера – оцинкованный лист С8, 0,4 мм.
  • внутренняя отделка – ДВП (оргалит) или вагонка
  • пол – обрезная доска 20-25 мм.

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

Конструкция блок контейнеров

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

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

Конструкция деревянной бытовки

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

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

Конструкция металлической бытовки

Для реализации больших строительных объектов, которые возводятся несколько лет, стоит на металлокаркасе. Срок ее службы составляет от 5 лет. Основой для металлической бытовки выступает каркас, который отделывается с наружной стороны профнастилом или полимерным покрытием. В качестве внутренней отделки может служить:

  • ПВХ панель;
  • деревянная вагонка;
  • оргалит.

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

В основе конструкции блок-контейнеров и постов охраны лежит металлический каркас, который состоит из гнутого швеллера 120х50х3 и 140х60х4 мм., сталь 3СП/ПС-5, ГОСТ 8278-83 который служит в качестве нижней и верхней обвязки. Металлические угловые стойки также изготавливаются из стали 3СП/ПС-5 и имеют С-образный профиль для увеличения прочности и устойчивости каркаса.

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

Каркас металлической бытовки и поста охраны покрывается эмалью препятствующий появлению коррозии и ржавчины. Цвет эмали может быть выбран по желанию заказчика.

Кровля блок-контейнера изготавливается из листового металла Ст08пс5, ТУ 14-106-321-2010 толщиной 1.2 мм. Листы металла свариваются между собой в сплошным швом полуавтоматической сваркой в среде углекислого газа — это наиболее надёжный вид сварки который обеспечит защитой от проникновения воды через кровлю, её целостность долговечность. Кровля как и каркас покрывается эмалью для предотвращения образования коррозии.

Металлический каркас укрепляется деревянной обрешёткой, которая состоит из бруска хвойных пород древесины естественной влажности, сечением 100х40 мм. Деревянный каркас служит для увеличения силовых качеств конструкции и для крепления внутренней и наружной отделки.

В качестве утеплителя используется минеральная вата различных производителей, таких как URSA, Knauf, ISOVER, ROCKWOOL. В зависимости от пожеланий заказчика толщина утепления блок-контейнера может иметь 50 или 100 мм., может быть использован утеплитель из каменной ваты и звукоизолирующие панели из минеральной ваты.

Внутренняя отделка блок-контейнера и поста охраны отличается внешним видом и качеством отделочных материалов. Основным критерием отбора внутренней отделки является целевое назначение выбираемой конструкции. К примеру, для расселения строительных бригад или под склад на строительном объекте, шиномонтаж — подойдёт блок-контейнер с отделкой эконом класса, такой как «оргалит (ДВП)» или «ДВПО (Облагороженное ДВП)». Блок-контейнер предназначенный для организации офиса продаж, магазин, штаб ИТР, пост охраны — подойдёт более дорогая и качественная отделка. Такая как «панели МДФ», деревянная вагонка. Конечно же, эти примеры не исключают взаимной замены друг друга. Очень часто в нашей компании заказывает металлические бытовки для расселения строительных бригад с отличной внутренней отделкой — панели МДФ.

Для наружной отделки блок-контейнера используется оцинкованный профлист С8, толщиной 0,4/0,45 мм. Профлист С8 имеет большое количество рёбер жёсткости которое создаёт дополнительное усиление стен блок-контейнера, его надёжности и целостности. В качестве дополнительной комплектации мы предлагаем профлист с полимерным покрытием (RAL), который может быть различных цветов. С цветами и вариантами внешнего вида Вы можете ознакомится в конфигураторе внешнего вида блок-контейнера и поста охраны .

В стандартной комплектации блок-контейнер имеет деревянные окна размером 80х65 сантиметров (по стеклу). Деревянные окна имеют двойное остекление. Для улучшения комфортабельности и других качеств блок-контейнера и поста охраны мы можем предложить пластиковые поворотно-откидные окна размером 90х80 сантиметров.

Полы блок-контейнера имеют многослойную структуру. В основании блок-контейнера находится черновая обрезная доска, которая является «днищем» конструкции и на которую укладывается пароизоляционная плёнка и утеплитель. Последним чистовым слоем является влагостойкая ДСП 16 мм., или шпунтованная половая доска 28 мм. В качестве улучшения комфорта, долговечности и сохранности пола мы предлагаем постелить линолеум.

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

Закладывалась каркасная технология. Однако вместо пиломатериалов и КДК (клееный брус) использовался металлопрокат цельнотянутый или гнутый. В зависимости от назначения и способа эксплуатации для сооружения блок-контейнеров использовались обе каркасных технологии – Платформа и Балун.

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

Заготовка материалов

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

Крой

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

Гибка

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

  • для некоторых позиций сортамента просто не существует аналогов;
  • даже при минимальной толщине стенки швеллера и уголка запас прочности превышает 300 – 500%;
  • гнутый профиль снижает материалоемкость производства и себестоимость конечного продукта.

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

Сращивание

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

Технология Платформа

Особенностями каркасного метода по технологии Платформа являются:

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

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

Стеновые каркасы

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

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

Сварка и обработка швов

В промышленных условиях при наличии станков, оборудования, специального инструмента и специалистов, умеющих всем этим пользоваться профессионально, резко возрастает качество блок контейнера. Сварные швы зачищаются УШМ с абразивной оснасткой после неразрушающего контроля подразделениями ОТК.

Затем стеновые панели стыкуют на платформе сваркой, создается единый пространственный каркас с высоким запасом надежности.

Окрашивание

При поточном производстве малярные цеха оборудуются окрасочными камерами и кабинками, позволяющими снизить расход ЛКМ, повысить качество защитно-декоративного покрытия и соблюсти требования ОТ, пожаробезопасности объекта и норм экологии.

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

Технология Балун

В некоторых случаях применяется каркасная технология Балун, обладающая некоторыми особенностями:

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

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

Внутренний деревянный каркас

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

Внутренние стены изготавливаются из деревосодержащих листовых материалов – ДСП, ОСП, ЦСП, МДФ, фанеры. Их удобнее крепить на деревянный каркас, который создается из досок или бруска, закрепленного на металлических стойках.

Ячейки обрешетки заполняются утеплителем для всесезонной эксплуатации или регионов с суровым климатом. В вариантах блок контейнеров Люкс разводка инженерных систем обычно изготавливается внутри каркасных конструкций.

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

Блок-контейнер из сэндвич панелей

При использовании в качестве стенового материала сэндвич панелей технология изготовления блок контейнеров максимально упрощается:

  • металлический сэндвич обладает самонесущей способностью;
  • резко сокращается количество стоек силового каркаса;
  • снижается материалоемкость и трудоемкость производства;
  • утеплитель уже заложен в ограждающие конструкции.

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

Производитель Бытовки РФ реализует блок контейнеры всех указанных типов. И проектирует из них модульные здания любого целевого назначения повышенной комфортности.

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

Схема модульного блок контейнера

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

13 идей, как сделать необычный контейнер для цветов своими руками

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

Иногда для вдохновения достаточно всего лишь осмотреться по сторонам, и вот уже идея сама приходит в голову! Загляните в чулан, гараж, кухонный ящик с ненужной посудой – наверняка среди «хлама» найдется что-то, из чего вы легко сделаете красивый «дизайнерский» контейнер.

1. Винные пробки

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

2. Бетонные плиты

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

3. Бетонные блоки

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

4. Жестяные банки

Вот уж действительно сложно найти настолько же функциональный и «многоразовый» предмет, как консервная банка или банка из-под кофе! С давних пор зарекомендовавшая себя как превосходный контейнер для червей (тех, что берут с собой на рыбалку), отличная пепельница и скромная подставка для карандашей, жестяная банка не перестает удивлять и предстает перед нами в роли стильного предмета интерьера. Немного погните банку молотком, затем покрасьте аэрозольной краской золотистого цвета.

5. Стеклянные банки

Не отстают от жестяных и их стеклянные собратья, коих полно на любом балконе, антресолях или в кладовой. Конечно, банки из стекла пригодятся для приготовления заготовок из собранного на участке урожая, но почему бы из неприкосновенного «стеклянного» запаса не выделить пару-тройку банок для дизайна дачи? Здесь вам снова поможет краска: подберите цветовую гамму, покрасьте банки изнутри и снаружи. Можно использовать трафарет, чтобы на вазоне получился рисунок (см. фото выше).

6. Автомобильные покрышки

Да-да, те самые набившие оскомину резиновые покрышки тоже есть в нашем списке идей создания контейнеров для цветов. Но не стоит кривиться при упоминании этих слов в разговоре о дизайне участка. Здесь, как и в любом другом деле, главное не «переборщить»: выкрасите покрышки, но не делайте узоров – «родной» текстуры колеса будет достаточно. Разместите такие контейнеры в одном месте, продумав композицию.

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

7. Бревно или полено

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

8. Старая мебель

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

9. Ненужная посуда

Допустим, вы уже украсили сад старым столом, стилизованным под цветочный вазон (или наоборот, – решать вам!). Почему бы не поставить на этот стол несколько треснувших чашек из любимого сервиза? Хорошо смотрятся и металлические предметы: чайник, кофейник, кастрюля. А дуршлаг можно использовать как подвесное кашпо, предварительно покрасив краской.

10. Люстра

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

11. Банка из-под краски

Мы снова вернулись к банкам, – а куда без них! На этот раз контейнер получится большего размера, чем в случае с жестяной и стеклянной банкой. Если после покрасочных работ у вас остались банки от краски, добавьте (при необходимости) немного «подтеков», прорежьте дренажное отверстие и высадите в вазон цветок.

12. Битая плитка

Разбитая керамическая плитка – прекрасный материал для декорирования. Чтобы сделать красивый вазон, найдите емкость (например, неприглядный цветочный горшок) и вооружитесь клеем. Плитку (если нужно) разбейте на более мелкие кусочки, горшок-основу вымойте и высушите. При помощи клея закрепите кусочки плитки на поверхности горшка, затем покройте изделие лаком.

13. Веревка

Джутовая веревка, шпагат или веревка из другого материала в умелых руках способна преобразить любую емкость. Обратите внимание на изображение слева внизу (см. фото выше) – между прочим, это нелюбимая многими покрышка! Вам понадобятся клей, емкость-основа и веревка: промазывая поверхность и веревку клеем, обмотайте основу и дайте высохнуть.

Надеемся, мы смогли вдохновить вас на создание необычных цветочных контейнеров. Будем рады увидеть фотографии ваших прекрасных «поделок» в комментариях к статье!

Как сделать мусорный контейнер своими руками?

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

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

Мусорный контейнер из фанеры

Главный недостаток такого материала – без должной обработки он быстро гниет, поэтому покраске или пропитке нужно будет уделить особое внимание. Для строительства потребуется электролобзик, шуруповерт, маркер или мел, фанера 10-12 мм, крепеж, краска и пропитка.

Алгоритм работ следующий:

  • размечаем выкройки на фанере – помните, что основание контейнера должно быть уже, чем верхушка;
  • вырезаем стенки и дно будущей емкости электролобзиком;
  • сборку проводим в следующей последовательности: дно, затем по очереди крепим все стенки;
  • в фанере лучше высверливать отверстия под саморезы 2-3 мм, иначе материал может потрескаться;
  • внизу обязательно делаем сливные отверстия, иначе в контейнере будет скапливаться вода;
  • завершаем работы нанесением пропитки и покраской.

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

Контейнер из листового железа

Если у вас есть сварочный аппарат, лучше сварить контейнер из стали. При покраске он не будет ржаветь, в него можно складывать тяжелый мусор, не боясь повреждения. Для изготовления подойдет сталь 1,2-1,5 мм, потребуется болгарка, отрезные и лепестковые круги, сварочный аппарат и электроды.

Алгоритм работ простой:

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

Емкость из стали более надежная, она прослужит в 2-3 раза дольше, чем из фанеры. Нужно только следить за металлом и вовремя его подкрашивать.


Закажите услугу по вывозу мусора в компании ООО Утилизатор

Как сделать из контейнера жилое теплое помещение. — Домина


Здесь мы расскажем о том, как можно сделать из морского металлического контейнера жилое теплое помещение, например бытовку, офис, торговый павильон или дачный дом – всё своими руками. О том как сделать фундамент под эту конструкцию можно прочитать в предыдущем блоге здесь.

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

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


Если Вы планируете совместить контейнера путем выреза внутренних стен, необходимо помнить – стенка контейнера это основа его жесткости.

Убрав боковую стенку контейнера более чем на 50%, его жесткость может и вовсе сойти на нет. Если же без этого не обойтись, то необходимо будет усиливать жесткость конструкции крыши, например при помощи достаточно крепкого швеллера, закрепив его по всему периметру выреза и лучше это сделать ДО самой работы по резке стен.


После, необходимо сразу приступить к установке дверей, окон и герметизации кровли, т.к. крайне не желательно допустить, например, попадание дождя на утеплитель.
К слову сказать, контейнер – сам по себе довольно герметичен и если нет необходимости в полноценной кровле, то можно обойтись простой гидроизоляцией. Для этого предварительно необходимо как можно плотнее стянуть контейнера между собой при помощи болтового соединения, как по нижним углам, так и по верхним.
В местах стыков, где были убраны боковые стенки контейнеров, крыша уже не имеет былой жесткости и не будет лишним добавить дополнительные болтовые соединения.
Имеет смысл посыпать тонким слоем еще не застывшую гидроизоляцию сыпучими материалами, например песком — это не позволит поверхности со временем потрескаться из за чрезмерного высыхания.
По завершении работы с крышей, можно приступать к внутреннему утеплению. Начинаем работу с монтажа обрешетки из деревянного бруса сечением 50х50мм (стены) и 100х50мм (пол, потолок). В качестве утеплителя стен и пола будем использовать плиты на основе базальтовой минеральной ваты толщиной 50мм, и укладывать в 2 слоя, т.е. общая толщина утеплителя составит 100мм.
Потолок будет утеплен пенополистиролом ПСБ25 толщиной 100мм.
Начать было решено с потолка, затем пол и в завершении – утепление стен. Стены утеплялись с учетом перекрывания бруса вторым слоем утеплителя, т.к. он может стать мостиком для холода.
После распределения утеплителя, необходимо закрыть его пароизоляционной мембраной.
Помимо основных свойств, пленка не позволит проникнуть в помещение мелких частиц утеплителя (пыли) , которые могут образоваться через какое-то время при наличии вентиляции.
На пол использовалась ОСП плита толщиной 18мм.

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

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

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

После этого, мы получим теплое и надежное помещение, имеющее жесткий металлический каркас в виде контейнера морского типа (высота 2.9м), установленного на свайно-винтовом фундаменте. Постройка мобильна и при необходимости может быть перемещена из одного места в другое при минимуме времени и затрат.

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

Контейнеры W3.CSS


Это мой заголовок

Это моя статья

Эта статья светло-серого цвета, а текст коричневого цвета. Эта статья светло-серого цвета, а текст коричневого цвета. Эта статья светло-серого цвета, а текст коричневого цвета. Эта статья светло-серого цвета, а текст коричневого цвета. Эта статья светло-серого цвета, а текст коричневого цвета.


Контейнерный класс

Класс w3-container добавляет отступ 16 пикселей слева и справа. к любому элементу HTML.

Класс w3-container — идеальный класс для использования для всех элементов контейнера HTML, таких как:

,
,
,
,
,
и более.


Контейнеры обеспечивают равенство

w3-container обеспечивает равенство для всех HTML-контейнеров. элементы:

  • Общие поля
  • Обычные прокладки
  • Общие профили
  • Общие шрифты
  • Общие цвета

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

Пример


Класс w3-container очень важен w3.Класс CSS.


Попробуй сам »

Чтобы добавить цвет, просто добавьте w3- color class:

Пример


Лондон — столица Англии.


Попробуй сам »

Верхние и нижние колонтитулы

Класс w3-container можно использовать для стилизации заголовков:

Пример

<заголовок>

Заголовок


Попробуй сам »

Нет разницы в способе W3.CSS обрабатывает

и
элементы.

Класс w3-container можно использовать для стилизации нижних колонтитулов:

Нижний колонтитул

Информация о нижнем колонтитуле находится здесь

Пример


Нижний колонтитул

Информация о нижнем колонтитуле находится здесь


Попробуй сам »

Пример

<нижний колонтитул>

Нижний колонтитул

Информация о нижнем колонтитуле находится здесь


Попробуй сам »

Многие веб-страницы используют элементы

вместо элементов
и
.


Статьи и разделы

w3-container класс может быть используется для стилизации элементов

и
:

Пример


Лондон
Лондон самый густонаселенный город Соединенного Королевства,
с мегаполис с населением более 9 миллионов жителей.


Париж


Район Парижа — один из крупнейших населенных пунктов Европы,
мест. с более чем 2 миллионами жителей.


<раздел class = "w3-container">

Токио


Токио — это центр Большого Токио,
и самый густонаселенный мегаполис в мире.


Попробуй сам »

Многие веб-страницы используют элементы

вместо элементов
и
.


Пример веб-страницы

Автомобиль — это колесный самоходный автомобиль, используемый для перевозки.В большинстве определений этого термина указывается, что автомобили предназначены в первую очередь для движения по дорогам. (Википедия)

Нижний колонтитул

Пример использования элементов HTML


Заголовок

Автомобиль


Автомобиль — это колесный самоходный автомобиль, используемый для перевозки. В большинстве определений этого термина указывается, что автомобили предназначены в первую очередь для движения по дорогам. (Википедия)



Нижний колонтитул

Попробуй сам »

Пример использования семантических элементов HTML


Заголовок

 Автомобиль


Автомобиль — это колесный самоходный автомобиль, используемый для перевозки. В большинстве определений этого термина указывается, что автомобили предназначены в первую очередь для движения по дорогам. (Википедия)



Нижний колонтитул

Попробуй сам »

Прокладка контейнера

Класс w3-container по умолчанию имеет отступы слева и справа 16px , и без верхнего или нижнего отступа:

У меня нет верхнего или нижнего отступа

Пример


У меня нет верхнего или нижнего отступа.

Попробуй сам »

Обычно вам не нужно изменять заполнение контейнера по умолчанию, потому что абзацы и заголовок имеют поля, имитирующие заполнение.

Пример


Я заголовок


Я параграф.


Попробуй сам »

Контейнер для хранения «сделай сам»: 45 простых и быстрых идей

Контейнеры для хранения

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

Преимущества использования контейнера для хранения своими руками

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

Стоимость

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

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

Настройка

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

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

Простота

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

Организация

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

Хранилище «Сделай сам» поможет вам организовать пространство в доме. Организация и настройка работают рука об руку: чем более специализированными являются ваши хранилища, тем легче вам будет ориентироваться в процессе устранения беспорядка.Хранение вещей своими руками — это помощь, чтобы хранить ваши вещи в одном месте, и позволяет с легкостью управлять своим расписанием.

Типы контейнеров для хранения, которые можно сделать своими руками

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

1. Держатель почты вентилятора DIY из переработанных материалов

Использованные материалы:

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

2. Сделайте своими руками плавающие полки из старых чемоданов

Фото DoubleDecker Vintage с сайта Etsy

Использованные материалы:

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

3. Создание кубических полок с парой ящиков

Использованных материалов:

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

4. Подвесные ящики для хранения

Использованных материалов:

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

5. Создайте DIY настольный контейнер для хранения контейнеров из рулонов туалетной бумаги

Фото Lilyshop

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

6. Создание пустотелых отверстий на полке

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

7. Этикетки для пластиковых контейнеров и ящиков для хранения

Фотография Time With Thea

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

8. Используйте решетчатые полки и ящики для организации шкафа

Фото Creatively Homespun

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

9. Тканые тростниковые корзины Контейнер для хранения своими руками

Фото DIY-Is-Fun.com

Использованных материалов:

Плетеные корзины из тростника — идеальные контейнеры, которые можно сделать своими руками. Они универсальны и быстро собираются. Кроме того, легко найти материалы для их изготовления!

10.Коробки для хлопьев — идеальные настольные органайзеры

Используемых материалов:

Ящики для хлопьев очень универсальны, так как в них можно хранить практически все, что угодно. Сделать их довольно легко. Один из способов сделать это — вырезать фетровую бумагу с принтом и обернуть ее. После этого вы можете поместить в них картонные разделители, чтобы сделать отдельные отделения.

11.Вышитые корзины декоративны и функциональны

Фото DesignImprovised.com

Материалы:

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

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

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

13. Организуйтесь на природе с этим ящиком для рукоделия

Использованных материалов:

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

14. Органайзер для ящиков Pegboard — быстро и весело сделать

Фото Рэйчел Лин с сайта queenbeeofhoneydos.com

Использованных материалов:

Органайзеры Pegboard изготавливаются легко и быстро. Во-первых, вам понадобится фанера корпусного типа толщиной ½ дюйма. Затем используйте перфорированную доску в качестве направляющей для просверливания отверстий в доске. Убедитесь, что резьба винтов входит в дюбели, а машинная резьба — в перфорированную доску.

15. Больше никаких аксессуаров с DIY Jean Wall Organizer

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

16. Попрощайтесь с пушистым ворсом с помощью специальной настенной корзины

Фото A Prudent Life

Использованных материалов:

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

17. В старых контейнерах для сливок для кофе можно хранить семена, специи и другие ингредиенты

Фото с сайта pinterest

Не выбрасывайте старые бутыли для хранения сливок. Пара таких вещей отлично подойдет для хранения крохотных вещей.

18. Больше не надо насморк: этот органайзер для салфеток своими руками отлично подходит для вашего стола

Фотография Time With Thea

Кто бы мог подумать, что насморк может привести ваш дом в порядок? Между тем, эти коробки для салфеток — идеальное средство от беспорядка в ящиках.Так что, когда вы излечились от гриппа и все ткани исчезли, вы все равно можете использовать этот ящик для хранения.

19. Банки Mason отлично подходят для хранения жидкого мыла

Фото с сайта myfrugaladventures.com

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

20. Настенная вешалка для контейнеров для хранения «сделай сам» будет держать детские книги в порядке

Фото Table + Hearth

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

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

Фото: What’s Ur Home Story?

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

22. Держите эти надоедливые части Lego подальше от ваших ног с помощью этой DIY Lego Head

Фото Meatloaf и Melodrama

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

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

Фото стола и очага

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

24. Превратите деревянную доску в держатель для ткани

Фото Table + Hearth

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

25. Сделайте убранную полку для туалетных принадлежностей из одной деревянной доски

Фото Pretty Handy Girl

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

26. Нарезанные коробки для закусок хороши для хранения бумаги

Фото: Vintage, Paint и др.

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

27. Приклейте несколько ручек к крышкам контейнеров для поделок или предметов макияжа

Фото Tastefully Frugal

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

28. Храните предметы буфета в переработанных рождественских банках

Фото Knick of Time

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

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

Фото My Sweet Things


Вымойте старые банки с майонезом, маринованными огурцами и персиками. Почему? Потому что в этих банках можно хранить мелкие предметы. Если у вас мало идей, вот совет: вы даже можете оставить в них свои ключи.

30. Пенни за ваши мысли? Дайте им знать, где хранить эти монеты, с помощью этой доски DIY

Фото Tried and True

Есть лишние мелочи? Монеты могут неизбежно раздражать, когда они повсюду.Таким образом, вы можете оставить табличку, чтобы люди знали, как их хранить.

31. Держите свой ящик для специй в чистоте и порядке с помощью однородных контейнеров

Фото Bright Green Door

Если вы шеф-повар или мама, готовящая домашнюю еду, вам наверняка придется иметь дело с жарой на кухне. Тем не менее, беспорядок может мешать, поскольку вы изо всех сил пытаетесь жонглировать сковородой и готовить еду.Это может расстраивать, когда у вас мало времени, а специи нигде не найти. Хранение их в одинаковых контейнерах позволит сохранить эти специи в порядке.

32. Организуйте свою грязную вертикальную морозильную камеру с контейнерами и лентой Washi

Фото из Pinterest

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

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

Фото Two Twenty One из Pinterest

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

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

Автор фото: From a Dream to DIY

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

35. Освободите место на туалетном столике, повесив самодельную полку для хранения вещей

Фотография от старого дома до нового дома

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

36. Пластиковые ведра для хранения «сделай сам» для хранения краски, чтобы ваша кладовая выглядела хорошо

Фото: The Organized Life

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

37. Проявите творческий подход с холщовыми корзинами по трафарету

Фото as Southernbucket с сайта Etsy

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

38. Овладей пальцами и плести корзину

Фото из Pinterest

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

39. Держите свои ремесла под контролем с этими джинсовыми ведрами

Фото Recyclart из Pinterest

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

40. Сделай коробку из лишней ткани

Фотография A Life Before Laundry из Pinterest

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

41. Больше не нужно пересчитывать эти бункеры

Фото Ebay из Pinterest

Украсьте свои складские помещения цифрами. Это и интуитивно понятный способ проектирования, и отличный способ отличить идентичные контейнеры.

42. Окуните большую корзину в краску

Фото: Love Grows Wild

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

43. Оживите свою корзину для хранения проволоки своими руками с помощью вязания крючком

Фото The Good Stuff

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

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

Фото Etsy из Pinterest

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

45. Создайте очаровательную коробку с несколькими узорами для вашего рабочего места.

Фото: The Crafted Life

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

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

Как создать образ Docker из контейнера

Взгляды


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

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

Ладно, перейдем прямо к делу.

Шаг 1. Создание базового контейнера

Давайте начнем с создания работающего контейнера. Чтобы не увязнуть в деталях какого-либо конкретного контейнера, мы можем использовать nginx.

Команда Docker create создаст для нас новый контейнер из командной строки:

Здесь мы запросили новый контейнер с именем nginx_base с портом 80, доступным для localhost.Мы используем nginx: alpine в качестве базового образа для контейнера.

Если у вас нет образа nginx: alpine в локальном репозитории образов Docker, он загрузится автоматически. Когда это произойдет, вы увидите что-то вроде этого:

Шаг 2. Проверьте изображения

Если вы посмотрите на список образов в вашей системе, вы увидите nginx: alpine image:

Шаг 3. Осмотрите контейнеры

Обратите внимание, что контейнер не запущен, поэтому вы не увидите его в списке контейнеров, если не используете флаг -a (-a для всех).

Шаг 4: Запустите контейнер

Давайте запустим контейнер и посмотрим, что произойдет.

Теперь посетите http: // localhost в своем браузере. Вы увидите сообщение по умолчанию «Добро пожаловать в nginx!» страница. Теперь у нас запущен контейнер nginx.

Шаг 5. Измените работающий контейнер

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

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

Давайте создадим новый файл index.html и скопируем его в работающий контейнер. Используя редактор на вашем компьютере, создайте файл index.html в том же каталоге, из которого вы запускали команды Docker.

Затем вставьте в него следующий HTML-код:

 

 Привет, мама 


 

Привет, мама!

Затем сохраните файл и вернитесь в командную строку.Мы будем использовать команду docker cp, чтобы скопировать этот файл в работающий контейнер.

Теперь перезагрузите браузер или снова посетите http: // localhost. Вы увидите сообщение «Привет, мама!» вместо страницы приветствия nginx по умолчанию.

Шаг 6. Создание образа из контейнера

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

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

Чтобы сохранить контейнер Docker, нам просто нужно использовать команду docker commit, например:

Теперь посмотрим на список образов докеров:

Как видите, там новое изображение. У него нет репозитория или тега, но он существует. Это образ, созданный из работающего контейнера. Давайте отметим его, чтобы его было легче найти позже.

Шаг 7. Отметьте изображение

Используя тег docker, мы можем назвать только что созданный образ.Нам нужен ID изображения для команды, поэтому, учитывая, что ID изображения, указанный выше, является f7a677e35ee8, наша команда будет:

И если мы снова посмотрим на индекс изображений, мы увидим, что были заменены:

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

Шаг 8: Создание изображений с тегами

Вы также можете пометить изображение по мере его создания, добавив еще один аргумент в конец команды, например:

Эта команда одновременно выполняет фиксацию и теги, что полезно, но не обязательно.

Шаг 9: Удалите исходный контейнер

Ранее мы запускали контейнер Docker. Мы видим, что он все еще работает, используя команду docker ps.

Давайте остановим контейнер Docker, который в данный момент запущен, и удалим его.

Если мы перечислим все контейнеры Docker, их не должно быть:

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

Обратите внимание, что запуск docker эквивалентен выполнению docker create с последующим запуском docker; мы просто экономим здесь шаг.

Параметр -d указывает Docker запускать отсоединенный контейнер, чтобы мы вернули нашу командную строку.

Шаг 10: Посмотрите на запущенные контейнеры

Если вы сейчас посмотрите на запущенные контейнеры, вы увидите, что у нас есть один под названием hi_mom:

Теперь посмотрите http: // localhost.

Как видите, на странице index.html теперь отображается сообщение «Привет, мама!» сообщение именно так, как мы хотели.

Остановите контейнер hi_mom перед переходом к следующему разделу.

Шаг 11. Рассмотрите свои варианты

Есть несколько необязательных вещей, которые мы можем сделать с помощью команды commit, которая изменит информацию о наших изображениях.

Например, мы можем захотеть записать, кто является автором нашего изображения, или захватить сообщение фиксации, сообщающее нам о состоянии изображения.

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

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

Эта команда запустит образ nginx: alpine с именем nginx_base; создание образа будет включено в выполнение команды.

–rm приведет к удалению контейнера при его закрытии. Параметр -d указывает клиенту командной строки работать в автономном режиме. Это позволит нам запускать другие команды с того же терминала.

Итак, если вы сейчас посетите http: // localhost, вы должны увидеть страницу приветствия nginx по умолчанию.

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

Вариант A: Установить авторство

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

Мы будем использовать команду docker inspect, чтобы получить подробную информацию об изображении и найти строку автора.

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

И мы можем проверить авторство того изображения:

Давайте удалим это изображение и попробуем другие варианты:

Вариант Б. Создание сообщений фиксации

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

Существует параметр –сообщение, которое можно использовать для включения этой информации.

Выполните эту команду:

Используя имя образа, мы можем посмотреть историю образа Docker, чтобы увидеть наше сообщение. Здесь мы используем команду docker history, чтобы показать историю изменений созданного нами образа:

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

Давайте удалим это изображение и рассмотрим другие варианты:

Вариант C: Фиксация без паузы

Когда вы используете команду фиксации, контейнер будет приостановлен.

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

Вы можете добавить к команде фиксации флаг –pause = false, и образ будет создан из контейнера без паузы.

Если не поставить контейнер на паузу, вы рискуете повредить свои данные.

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

Давайте удалим это изображение и рассмотрим другие варианты:

Вариант D. Изменить конфигурацию

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

Вы можете изменить любые из следующих настроек образа в процессе фиксации:

  • CMD
  • ENTRYPOINT
  • ENV
  • EXPOSE
  • LABEL
  • ONBUILD
  • USER
  • VOLUME
  • WORKDIR

Исходный файл докеров Nginx содержит следующие настройки:

  • CMD [«nginx», «-g», «демон выключен;»]
  • ENV NGINX_VERSION 1.15.3
  • EXPOSE 80

Итак, мы просто поиграем с одним из них на мгновение. NGINX_VERSION и EXPOSE могут вызвать проблемы с запуском контейнера, поэтому мы будем вмешиваться в командную строку (CMD), выполняемую контейнером.

Nginx позволяет нам передавать аргумент командной строки -T, который выводит его конфигурацию в стандартный формат. Давайте создадим изображение с альтернативным значением CMD следующим образом:

Теперь остановите контейнер nginx_base с помощью этой команды:

И запустите новый контейнер из только что созданного образа:

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

Создание образов Docker: заключение

Подкоманда docker commit очень полезна для диагностики и загрузки новых образов из существующих контейнеров.

Как я показал выше, есть много полезных опций. В Docker CLI есть много других мощных команд. Если хотите, вы можете изучить некоторые из них здесь.

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

Чтобы узнать больше о работе с Docker и Scalyr, ознакомьтесь со следующими ресурсами:
Установка агента Scalyr в Docker
Настройте агент Scalyr для Docker
и почувствуйте себя и попробуйте Scalyr на себе.

Лучшие практики для строительства контейнеров | Центр облачной архитектуры

В этой статье описывается набор передовых методов создания контейнеров. Эти практики охватывают широкий спектр целей, от сокращения времени сборки до создание меньших и более устойчивых изображений с целью создания контейнеров легче построить (например, с Cloud Build), и легче бежать Google Kubernetes Engine (GKE).

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

Чтобы получить максимальную отдачу от этой статьи, вам понадобятся некоторые знания Docker и Kubernetes. Некоторые обсуждаемые здесь передовые методы также применимы к контейнерам Windows, но большинство предполагает, что вы работаете с контейнерами Linux. Консультации по бегу и операционные контейнеры доступны в Лучшие практики для работы с контейнерами.

Упакуйте одно приложение в контейнер

Важность: ВЫСОКАЯ

Примечание. В контексте этой передовой практики «приложение» считается быть единым программным обеспечением с уникальным родительским процессом и потенциально несколько дочерних процессов.

Когда вы начинаете работать с контейнерами, частая ошибка — рассматривать их как виртуальные машины, которые могут одновременно запускать много разных вещей. Контейнер может работать таким образом, но это снижает большинство преимуществ контейнера модель.Например, возьмем классический стек Apache / MySQL / PHP: у вас может возникнуть соблазн для запуска всех компонентов в одном контейнере. Однако лучшая практика использовать два или три разных контейнера: один для Apache, один для MySQL и потенциально один для PHP, если вы используете PHP-FPM.

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

Рисунок 1. Контейнер слева соответствует лучшему упражняться. Контейнер справа — нет.

Если у вас есть несколько приложений в контейнере, они могут иметь разные жизненные циклы, или находиться в разных состояниях. Например, вы можете получить контейнер, который запущен, но один из его основных компонентов разбился, или не отвечает. Без дополнительной проверки работоспособности общий контейнер система управления (Docker или Kubernetes) не может определить, является ли контейнер здоровый.В случае Kubernetes это означает, что если основной компонент не отвечает, Kubernetes не перезапустит ваш контейнер автоматически.

Вы можете увидеть следующие действия в общедоступных изображениях, но не следуют за их пример:

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

Правильная обработка PID 1, обработки сигналов и зомби-процессов

Важность: ВЫСОКАЯ

Сигналы

Linux — это основной способ управления жизненным циклом процессов внутри контейнер. В соответствии с предыдущей передовой практикой, чтобы тесно связать жизненный цикл вашего приложения в контейнер, в котором оно находится, убедитесь, что ваш приложение правильно обрабатывает сигналы Linux.Самый важный сигнал Linux — это SIGTERM, потому что он завершает процесс. Ваше приложение также может получить Сигнал SIGKILL, который используется для некорректного завершения процесса, или Сигнал SIGINT, который отправляется при вводе Ctrl + C и обычно обрабатывается как SIGTERM.

Идентификаторы процесса (PID) — это уникальные идентификаторы, которые ядро ​​Linux дает каждый процесс. PID размещены в пространстве имен, что означает, что у контейнера есть собственный набор PID, которые сопоставлены с PID в хост-системе.Первый процесс запустился, когда запуск ядра Linux имеет PID 1. Для нормальной операционной системы это process — это система инициализации, например systemd или SysV. Точно так же первый процесс, запущенный в контейнере, получает PID 1. Docker и Kubernetes используют сигналы для общаться с процессами внутри контейнеров, особенно для их завершения. И Docker, и Kubernetes могут отправлять сигналы только процессу с PID 1. внутри контейнера.

В контексте контейнеров PID и сигналы Linux создают две проблемы для рассмотреть возможность.

Проблема 1: Как ядро ​​Linux обрабатывает сигналы

Ядро Linux обрабатывает сигналы для процесса с PID 1 иначе, чем для так и для других процессов. Обработчики сигналов не регистрируются автоматически для этого процесса, что означает, что такие сигналы, как SIGTERM или SIGINT, будут иметь по умолчанию не действует. По умолчанию вы должны убить процессы, используя SIGKILL, предотвращающий любое корректное завершение работы. В зависимости от вашего приложения, используя SIGKILL может привести к ошибкам пользователя, прерыванию записи (для хранилищ данных), или нежелательные предупреждения в вашей системе мониторинга.

Проблема 2: Как классические системы инициализации обрабатывают потерянные процессы

Классические системы инициализации, такие как systemd, также используются для удаления ( reap ) осиротевших, зомби-процессы. Осиротевшие процессы — процессы, чьи родители умерли — являются повторно присоединены к процессу, имеющему PID 1, который должен пожать их, когда они умрут. Это делает обычная система инициализации. Но в контейнере эта ответственность ложится на любой процесс имеет PID 1. Если этот процесс не обрабатывает должным образом пожиная, вы рискуете исчерпать память или другие ресурсы.

У этих проблем есть несколько общих решений, описанных ниже. разделы.

Решение 1. Запустите как PID 1 и зарегистрируйте обработчики сигналов

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

Самый простой способ реализовать это решение — запустить процесс с CMD и / или ENTRYPOINT в вашем Dockerfile.Например, в после Dockerfile nginx — это первый и единственный запускаемый процесс.

  ОТ debian: 9

ЗАПУСТИТЬ apt-get update && \
    apt-get install -y nginx

ЭКСПОЗИЦИЯ 80

CMD ["nginx", "-g", "daemon off;" ]
  
Предупреждение: Процесс nginx регистрирует собственные обработчики сигналов. С этим решение, во многих случаях вы должны сделать то же самое в своем коде приложения.

Иногда вам может потребоваться подготовить среду в вашем контейнере для вашего процесс для правильной работы.В этом случае лучше всего иметь контейнер запускает сценарий оболочки при запуске. Этому сценарию оболочки поручено: подготовка среды и запуск основного процесса. Однако если взять при таком подходе сценарий оболочки имеет PID 1, а не ваш процесс, поэтому вы должны использовать встроенную команду exec для запуска процесса из оболочки сценарий. Команда exec заменяет сценарий нужной программой. Ваш затем процесс наследует PID 1.

Решение 2. Включите совместное использование пространства имен процессов в Kubernetes

Когда вы включаете совместное использование пространства имен процессов для пода Kubernetes использует единое пространство имен процесса для всех контейнеров в что Pod.Контейнер инфраструктуры Kubernetes Pod становится PID 1 и автоматически пожинает потерянные процессы.

Решение 3. Используйте специализированную систему инициализации

Как и в более классической среде Linux, вы также можете использовать команду init система для решения этих проблем. Однако обычные системы инициализации, такие как systemd или SysV слишком сложны и велики именно для этой цели, поэтому мы рекомендую использовать систему инициализации, такую ​​как тини , который создан специально для контейнеров.

Если вы используете специализированную систему инициализации, процесс инициализации имеет PID 1 и выполняет следующее:

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

Вы можете использовать это решение в самом Docker, используя параметр --init команды docker запустить команду . Чтобы использовать это решение в Kubernetes, необходимо установить системы инициализации в образе контейнера и используйте ее в качестве точки входа для контейнер.

Оптимизация для кеша сборки Docker

Важность: ВЫСОКАЯ

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

Например, чтобы в полной мере использовать кеш сборки Docker, необходимо разместить шаги сборки, которые часто меняются, внизу Dockerfile. Если вы положите их вверху, Docker не может использовать свой кеш сборки для других строить шаги, которые меняются реже. Поскольку новый образ Docker обычно построенный для каждой новой версии вашего исходного кода, добавьте исходный код к изображению как можно позже в Dockerfile. На следующей диаграмме вы можете увидеть что если вы меняете STEP 1 , Docker может повторно использовать только слои из ОТ debian: 9 шаг.Однако если вы измените STEP 3 , Docker сможет повторно использовать слои для STEP 1 и STEP 2 .

Рисунок 2. Примеры использования кэша сборки Docker. Зеленым цветом обозначены слои, которые можно использовать повторно. Красным цветом обозначены слои, которые необходимо воссоздать.

Повторное использование слоев имеет еще одно последствие: если этап сборки зависит от кеша, хранящегося в локальной файловой системе, этот кеш должен быть сгенерирован в тот же шаг сборки.Если этот кеш не создается, шаг сборки может выполняться с устаревшим кешем из предыдущей сборки. Ты видишь это поведение чаще всего с менеджерами пакетов, такими как apt или yum: вы должны обновите свои репозитории с помощью той же команды RUN , что и при установке пакета.

Если вы измените второй шаг RUN в следующем файле Dockerfile, apt-get Команда update не запускается повторно, что приводит к устареванию подходящего кеша.

  ОТ debian: 9

ЗАПУСТИТЬ apt-get update
ЗАПУСТИТЬ apt-get install -y nginx
  

Вместо этого объедините две команды в один шаг RUN :

  ОТ debian: 9

ЗАПУСТИТЬ apt-get update && \
    apt-get install -y nginx
  

Значение: MEDIUM

Чтобы защитить свои приложения от злоумышленников, постарайтесь уменьшить поверхность атаки ваше приложение, удалив все ненужные инструменты.Например, удалить коммунальные услуги, такие как netcat, который вы можете использовать для создания обратной оболочки внутри вашей системы. Если netcat не в контейнере злоумышленник должен найти другой путь.

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

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

Содержимое файловой системы

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

Безопасность файловой системы

Недостаточно отсутствия инструментов в вашем образе: вы должны предотвратить потенциальные злоумышленникам от установки собственных инструментов. Здесь вы можете комбинировать два метода:

  • Избегайте запуска с правами root внутри контейнера: этот метод предлагает первый уровень безопасности и может предотвратить, например, злоумышленников от изменение файлов, принадлежащих root, с помощью диспетчера пакетов, встроенного в ваше изображение (например, apt-get или apk ).Чтобы этот метод был полезным, вы должны отключить или удалите команду sudo . Эта тема более широко освещена в Избегайте запуска с правами root.

  • Запустите контейнер в режиме только для чтения, что вы делаете с помощью - флаг только для чтения из докера , запустите команду или с помощью readOnlyRootFilesystem вариант в Kubernetes. Вы можете обеспечить это в Kubernetes с помощью PodSecurityPolicy .

Предупреждение: Если вашему приложению необходимо записать временные данные на диск, вы можете по-прежнему используйте параметр readOnlyRootFilesystem и добавьте emptyDir объем для ваших временных файлов.Kubernetes не поддерживает опции монтирования на пустоDir тома, поэтому вы не можете смонтировать этот том с включенным флагом noexec , что означает что злоумышленник может поместить двоичный файл в этот том и выполнить его.

Создайте изображение как можно меньшего размера

Значение: MEDIUM

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

Примечание: Это Сообщение блога содержит много полезной информации по этой теме с языковыми особенностями Примеры.

Использовать минимально возможное базовое изображение

Базовый образ — это тот, который указан в инструкции FROM в вашем Dockerfile. Все остальные инструкции в Dockerfile строятся поверх этого изображение.Чем меньше базовое изображение, тем меньше полученное изображение, а быстрее его можно скачать. Например, альпийский: 3,7 изображение на 71 МБ меньше, чем сентос: 7 изображение.

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

  С нуля
КОПИРОВАТЬ mybinary / mybinary
CMD ["/ mybinary"]
  

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

Уменьшите беспорядок на изображении

Чтобы уменьшить размер вашего образа, устанавливайте только то, что строго необходимо внутри Это. Может возникнуть соблазн установить дополнительные пакеты, а затем удалить их более поздний шаг. Однако этого подхода недостаточно. Потому что каждая инструкция файла Dockerfile создает слой, удаляя данные из изображения на более позднем этапе чем шаг, который его создал, не уменьшает размер всего изображения ( данные все еще там, просто спрятаны на более глубоком уровне).Рассмотрим этот пример:

Плохой файл Docker Хороший файл Dockerfile
ОТ debian: 9 
RUN apt-get update && \ apt-get install -y \ [buildpackage] ЗАПУСТИТЬ [создать мое приложение] RUN apt-get autoremove --purge \ -y [пакет сборки] && \ apt-get -y чистый && \ rm -rf / var / lib / apt / lists / *
ОТ debian: 9 
RUN apt-get update && \ apt-get install -y \ [buildpackage] && \ [создать мое приложение] && \ apt-get autoremove --purge \ -y [пакет сборки] && \ apt-get -y чистый && \ rm -rf / var / lib / apt / lists / *

В плохой версии Dockerfile, [buildpackage] и файлы в / var / lib / apt / lists / * все еще существует в слое, соответствующем первому ЗАПУСК .Этот слой является частью изображения и должен быть загружен и загружен с помощью остальное, даже если содержащиеся в нем данные недоступны в итоговом изображении.

В хорошей версии Dockerfile все делается на одном слое, содержит только ваше созданное приложение. [buildpackage] и файлы в / var / lib / apt / lists / * нигде в результирующем изображении не существует, даже спрятан в более глубоком слое.

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

Еще один отличный способ уменьшить беспорядок на вашем изображении — использовать многоэтапные сборки (введено в Docker 17.05). Многоступенчатые сборки позволяют для создания вашего приложения в первом контейнере «сборки» и использования результата в другой контейнер, используя тот же файл Dockerfile.

Рисунок 3. Многоступенчатый процесс сборки Docker.

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

  ОТ golang: 1.10 как строитель

WORKDIR / tmp / go
КОПИРОВАТЬ hello.go ./
RUN CGO_ENABLED = 0 go build -a -ldflags '-s' -o привет

С нуля
CMD ["/ привет"]
КОПИРОВАТЬ --from = builder / tmp / go / hello / hello
  

Попробуйте создать изображения с общими слоями

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

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

Рисунок 4. Создание изображений с общими слоями.

Сканировать образы на предмет уязвимостей

Значение: MEDIUM

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

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

Чтобы помочь вам решить эту проблему, Контейнерный анализ может сканировать ваши изображения на наличие уязвимостей в общедоступные пакеты. Доступны следующие варианты:

Автоматическое сканирование уязвимостей

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

  • Создайте задание, подобное cron, которое перечисляет уязвимости и запускает процесс их исправления, если исправление существует.
  • Как только уязвимость обнаружена, используйте Интеграция Pub / Sub для запуска процесса установки исправлений, который использует ваша организация.
API сканирования по требованию

Если этот параметр включен, вы можете вручную сканировать локальные изображения или сохраненные изображения. в реестре артефактов или реестре контейнеров.Эта функция поможет вам обнаружить и устраняйте уязвимости на ранних этапах конвейера сборки. Например, вы можете использовать Cloud Build для сканирования изображения после него. построен, а затем заблокировать загрузку в реестр артефактов если сканирование обнаруживает уязвимости с заданным уровнем серьезности. если ты также включил автоматическое сканирование уязвимостей, также реестр артефактов сканирует изображения, которые вы загружаете в реестр.

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

  1. Храните изображения в реестре артефактов и включить сканирование уязвимостей.
  2. Настройте задание, которое регулярно извлекает новые уязвимости из Реестр артефактов и при необходимости запускает перестройку образов.
  3. После создания новых образов ваша система непрерывного развертывания развернуть их в промежуточной среде.
  4. Вручную проверьте промежуточную среду на наличие проблем.
  5. Если проблем не обнаружено, вручную запустите развертывание в производственную среду.

Правильно пометьте изображения

Значение: MEDIUM

Образы

Docker обычно идентифицируются двумя компонентами: их именем и их тег. Например, для образа google / cloud-sdk: 193.0.0 , google / cloud-sdk — это имя, а 193.0.0 — это тег. Тег последний используется по умолчанию, если вы не указывайте его в своих командах Docker.Пара имени и тега уникальна в в любой момент времени. Однако при необходимости вы можете переназначить тег другому изображению.

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

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

Маркировка с использованием семантического управления версиями

Распространенный способ выпуска программного обеспечения — «пометить» (как в команде git tag ) a конкретная версия исходного кода с номером версии. В Спецификация семантического управления версиями обеспечивает чистый способ обработки номеров версий. В этой системе ваше программное обеспечение номер версии состоит из трех частей: X.Y.Z , где:

  • X — это основная версия, увеличиваемая только для несовместимых изменений API.
  • Y — это второстепенная версия, увеличенная для новых функций.
  • Z — это версия патча, увеличенная для исправления ошибок.

Каждое приращение младшего номера версии или версии исправления должно быть обратно совместимое изменение.

Если вы используете эту или аналогичную систему, пометьте свои изображения в соответствии с следующая политика:

  • Тег latest всегда относится к самому последнему (возможно, стабильному) изображение. Этот тег перемещается, как только создается новое изображение.
  • Тег X.Y.Z относится к определенной версии вашего программного обеспечения. Не надо переместите его на другое изображение.
  • Тег X.Y относится к последнему выпуску исправления X.Y minor ветка вашего программного обеспечения. Он перемещается, когда выходит новая версия патча.
  • Тег X относится к последнему выпуску патча последнего второстепенного выпуск основной ветви X . Он перемещается, когда либо новый патч версия или новая второстепенная версия.

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

Пометка с использованием хэша коммита Git

Если у вас есть продвинутая система непрерывной доставки и вы выпускаете свое программное обеспечение часто вы, вероятно, не используете номера версий, как описано в Семантическом Спецификация управления версиями.В этом случае общий способ обработки номеров версий — использовать хэш SHA-1 коммита Git (или его короткую версию) в качестве версии номер. По замыслу хеш коммита Git неизменяем и ссылается на конкретный версия вашего программного обеспечения.

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

Тщательно подумайте, использовать ли публичное изображение

Важность: N / A

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

Одно из больших преимуществ Docker — огромное количество общедоступных изображения для всех видов программного обеспечения.Эти изображения позволяют начать работу быстро. Однако, когда вы разрабатываете контейнерную стратегию для своего организации, у вас могут быть ограничения, которые публично предоставили изображения не могут встретиться. Вот несколько примеров ограничений, которые могут делают невозможным использование публичных изображений:

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

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

  • Надежный автоматизированный способ создания образов, даже для образов которые строятся редко.Триггеры сборки в Cloud Build — хороший способ добиться этого.
  • Стандартное базовое изображение. Google предоставляет некоторые базовые изображения что вы можете использовать.
  • Автоматический способ распространения обновлений базового образа на «дочерние» изображения.
  • Способ устранения уязвимостей в ваших изображениях. Для получения дополнительной информации см. Сканировать изображения на наличие уязвимостей.
  • Способ обеспечить соблюдение ваших внутренних стандартов в отношении изображений, созданных разные команды в вашей организации.

Доступно несколько инструментов, которые помогут вам применить политики к изображениям, которые вы сборка и развертывание:

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

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

Примечание о лицензиях

Прежде чем включать сторонние библиотеки и пакеты в образ Docker, убедитесь, что соответствующие лицензии позволяют вам это делать.Сторонние лицензии может также налагать ограничения на распространение, которые применяются, когда вы публикуете Образ Docker в общедоступный реестр.

Что дальше

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

Учебное пособие по Docker для начинающих

Введение

Что такое докер?

Википедия определяет Docker как

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

Вау! Это полный рот. Проще говоря, Docker — это инструмент, который позволяет разработчикам, системным администраторам и т. Д. Легко развертывать свои приложения в песочнице (называемой контейнерами ) для работы в операционной системе хоста, то есть Linux. Ключевым преимуществом Docker является то, что он позволяет пользователям упаковать приложение со всеми его зависимостями в стандартизированный модуль для разработки программного обеспечения. В отличие от виртуальных машин, контейнеры не имеют больших накладных расходов и, следовательно, позволяют более эффективно использовать базовую систему и ресурсы.

Что такое контейнеры?

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

Виртуальные машины

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

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

Зачем нужны контейнеры?

Контейнеры

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

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

Google Trends для Docker

Благодаря этим преимуществам контейнеры (и Docker) получили широкое распространение.Такие компании, как Google, Facebook, Netflix и Salesforce, используют контейнеры, чтобы сделать большие группы инженеров более продуктивными и улучшить использование вычислительных ресурсов. Фактически, Google считает, что контейнеры избавили от необходимости в центре обработки данных.

Чему меня научит этот урок?

Это руководство призвано помочь вам запачкать руки с помощью Docker. Помимо демистификации ландшафта Docker, он даст вам практический опыт создания и развертывания собственных веб-приложений в облаке.Мы будем использовать Amazon Web Services для развертывания статического веб-сайта и двух динамических веб-приложений на EC2 с использованием Elastic Beanstalk и Elastic Container Service. Даже если у вас нет предыдущего опыта развертывания, это руководство должно быть всем, что вам нужно для начала работы.


Начало работы

Этот документ состоит из нескольких разделов, каждый из которых объясняет определенный аспект Docker. В каждом разделе мы будем вводить команды (или писать код). Весь код, использованный в руководстве, доступен в репозитории Github.

Примечание. В этом руководстве используется Docker версии 18.05.0-ce . Если вы обнаружите, что какая-либо часть учебника несовместима с будущей версией, поднимите вопрос. Спасибо!

Предварительные требования

Для этого учебника не требуются какие-либо специальные навыки, кроме базового удобства работы с командной строкой и текстовым редактором. В этом руководстве используется git clone для локального клонирования репозитория. Если в вашей системе не установлен Git, либо установите его, либо не забудьте вручную загрузить zip-файлы с Github.Предыдущий опыт разработки веб-приложений будет полезен, но не обязателен. По мере продвижения по руководству мы будем использовать несколько облачных сервисов. Если вы хотите продолжить, пожалуйста, создайте учетную запись на каждом из этих веб-сайтов:

Настройка компьютера

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

До нескольких выпусков назад запуск Docker в OSX и Windows был довольно сложной задачей.Однако в последнее время Docker вложил значительные средства в улучшение процесса адаптации своих пользователей к этим ОС, поэтому запуск Docker теперь — легкая прогулка. Руководство по началу работы с Руководство по Docker содержит подробные инструкции по настройке Docker на Mac, Linux и Windows.

По завершении установки Docker протестируйте установку Docker, выполнив следующее:

  $ docker run привет-мир

Привет из Докера.
Это сообщение показывает, что ваша установка работает правильно....  

Привет, мир

Игра с Busybox

Теперь, когда у нас все настроено, пришло время испачкать руки. В этом разделе мы собираемся запустить контейнер Busybox в нашей системе и познакомиться с командой docker run .

Для начала запустим в нашем терминале:

  $ docker pull busybox  

Примечание. В зависимости от того, как вы установили докер в своей системе, после выполнения указанной выше команды вы можете увидеть ошибку , в которой отказано в разрешении .Если вы используете Mac, убедитесь, что движок Docker запущен. Если вы работаете в Linux, добавьте к командам docker префикс sudo . В качестве альтернативы вы можете создать группу докеров, чтобы избавиться от этой проблемы.

Команда pull извлекает образ busybox из реестра Docker и сохраняет его в нашей системе. Вы можете использовать команду docker images , чтобы просмотреть список всех образов в вашей системе.

  $ образы докеров
РЕПОЗИТОРНЫЙ ТЕГ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАН ВИРТУАЛЬНЫЙ РАЗМЕР
busybox latest c51f86c28340 4 недели назад 1.109 МБ  

Запуск Docker

Отлично! Давайте теперь запустим контейнер Docker на основе этого образа. Для этого мы собираемся использовать всемогущую команду docker run .

  $ docker run busybox
 долларов США 

Подождите, ничего не произошло! Это ошибка? Ну нет. За кулисами произошло много всего. Когда вы вызываете и запускаете , клиент Docker находит образ (в данном случае busybox), загружает контейнер и затем запускает команду в этом контейнере.Когда мы запускали docker run busybox , мы не предоставляли команду, поэтому контейнер загрузился, запустил пустую команду и затем вышел. Ну да — облом вроде. Попробуем что-нибудь поинтереснее.

  $ docker run busybox echo "привет от busybox"
привет от busybox  

Красиво — наконец-то мы видим какой-то выход. В этом случае клиент Docker послушно выполнил команду echo в нашем контейнере busybox, а затем вышел из нее. Если вы заметили, все это произошло довольно быстро.Представьте, что вы загружаете виртуальную машину, выполняете команду, а затем завершаете ее работу. Теперь вы знаете, почему говорят, что контейнеры быстрые! Хорошо, теперь пора увидеть команду docker ps . Команда docker ps показывает все запущенные в данный момент контейнеры.

  $ докер пс
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ ИМЯ ПОРТОВ  

Поскольку ни один контейнер не запущен, мы видим пустую строку.Попробуем более полезный вариант: docker ps -a

  $ docker ps -a
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
305297d7a235 busybox "uptime" 11 минут назад Завершился (0) 11 минут назад distracted_goldstine
ff0a5c3750b9 busybox "sh" 12 минут назад Завершился (0) 12 минут назад elated_ramanujan
14e5bd11d164 hello-world "/ hello" 2 минуты назад Завершился (0) 2 минуты назад thirsty_euclid  

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

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

  $ docker run -it busybox sh
/
bin dev и т. д. home proc root sys tmp usr var
/
 05:45:21 до 5:58, 0 пользователей, средняя загрузка: 0,00, 0,01, 0,04  

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

Опасная зона : Если вы любите приключения, вы можете попробовать rm -rf bin в контейнере. Убедитесь, что вы запускаете эту команду в контейнере, а , а не на своем ноутбуке / настольном компьютере. Это приведет к тому, что любые другие команды, такие как ls , uptime , не будут работать. Как только все перестанет работать, вы можете выйти из контейнера (введите exit и нажмите Enter), а затем снова запустить его с помощью команды docker run -it busybox sh .Поскольку Docker каждый раз создает новый контейнер, все должно снова заработать.

На этом завершается вихревой тур по мощной команде docker run , которая, скорее всего, будет той командой, которую вы будете использовать чаще всего. Имеет смысл потратить некоторое время на то, чтобы освоиться с этим. Чтобы узнать больше о run , используйте docker run --help , чтобы увидеть список всех поддерживаемых им флагов. По мере продвижения мы увидим еще несколько вариантов docker run .

Прежде чем двигаться дальше, давайте быстро поговорим об удалении контейнеров. Выше мы видели, что мы все еще можем видеть остатки контейнера даже после выхода, запустив docker ps -a . В этом руководстве вы будете запускать docker run несколько раз, и оставление бродячих контейнеров займет место на диске. Следовательно, как правило, я очищаю контейнеры после того, как закончу с ними. Для этого вы можете запустить команду docker rm . Просто скопируйте идентификаторы контейнеров сверху и вставьте их вместе с командой.

  $ докер rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9  

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

  $ docker rm $ (docker ps -a -q -f status = exited)  

Эта команда удаляет все контейнеры со статусом , завершился . Если вам интересно, флаг -q возвращает только числовые идентификаторы, а -f фильтрует вывод на основе предоставленных условий.И последнее, что будет полезно, — это флаг --rm , который можно передать в docker run , который автоматически удаляет контейнер при выходе из него. Для однократных запусков докеров очень полезен флаг --rm .

В более поздних версиях Docker для достижения того же эффекта можно использовать команду docker container prune .

  $ докер контейнер для чернослива
ПРЕДУПРЕЖДЕНИЕ! Это удалит все остановленные контейнеры.
Вы уверены что хотите продолжить? [да / нет] г
Удаленные контейнеры:
4a7f7eebae0f63178aff7eb0aa39f0627a203ab2df258c1a00b456cf20063
f98f9c2aa1eaf727e4ec9c0283bcaa4762fbdba7f26191f26c97f640

Общая мелиорированная площадь: 212 B

Наконец, вы также можете удалить изображения, которые вам больше не нужны, запустив docker rmi .

Терминология

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

  • Изображения — Чертежи нашего приложения, которые составляют основу контейнеров. В демонстрации выше мы использовали команду docker pull для загрузки образа busybox .
  • Контейнеры — создаются из образов Docker и запускают собственное приложение.Мы создаем контейнер, используя docker run , который мы сделали, используя загруженный нами образ busybox. Список запущенных контейнеров можно увидеть с помощью команды docker ps .
  • Docker Daemon — Фоновая служба, работающая на хосте, которая управляет построением, запуском и распространением контейнеров Docker. Демон — это процесс, который выполняется в операционной системе, с которой общаются клиенты.
  • Клиент Docker — Инструмент командной строки, позволяющий пользователю взаимодействовать с демоном.В более общем плане могут быть и другие формы клиентов, такие как Kitematic, которые предоставляют пользователям графический интерфейс.
  • Docker Hub — Реестр образов Docker. Вы можете рассматривать реестр как каталог всех доступных образов Docker. При необходимости можно разместить собственные реестры Docker и использовать их для получения образов.

Веб-приложения с Docker

Отлично! Итак, теперь мы посмотрели на docker run , поигрались с контейнером Docker, а также поняли некоторую терминологию.Вооружившись всеми этими знаниями, мы готовы приступить к реальной работе, то есть к развертыванию веб-приложений с помощью Docker!

Статические сайты

Начнем с маленьких шагов. Первое, что мы собираемся рассмотреть, это то, как мы можем запустить абсолютно простой статический веб-сайт. Мы собираемся получить образ Docker из Docker Hub, запустить контейнер и посмотреть, насколько легко запустить веб-сервер.

Начнем. Образ, который мы собираемся использовать, представляет собой одностраничный веб-сайт, который я уже создал для этой демонстрации и размещен в реестре — prakhar1989 / static-site .Мы можем загрузить и запустить образ прямо за один раз, используя docker run . Как отмечалось выше, флаг --rm автоматически удаляет контейнер при выходе.

  $ docker run --rm prakhar1989 / static-site  

Поскольку образ не существует локально, клиент сначала извлекает образ из реестра, а затем запускает образ. Если все пойдет хорошо, вы должны увидеть в своем терминале сообщение Nginx is running ... . Хорошо, теперь, когда сервер запущен, как увидеть веб-сайт? На каком порту он работает? И что еще более важно, как получить доступ к контейнеру непосредственно с нашего хост-компьютера? Нажмите Ctrl + C, чтобы остановить контейнер.

Что ж, в этом случае клиент не предоставляет никаких портов, поэтому нам нужно повторно запустить команду docker run для публикации портов. Пока мы это делаем, мы также должны найти способ, чтобы наш терминал не был привязан к работающему контейнеру. Таким образом, вы можете закрыть свой терминал и оставить контейнер работающим. Это называется режимом с отключенным режимом .

  $ docker run -d -P --name static-site prakhar1989 / static-site
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810  

В приведенной выше команде -d отсоединит наш терминал, -P опубликует все открытые порты в случайные порты и, наконец, --name соответствует имени, которое мы хотим дать.Теперь мы можем увидеть порты, выполнив команду docker port [CONTAINER] command

  $ docker порт static-site
80 / TCP -> 0.0.0.0:32769
443 / TCP -> 0.0.0.0:32768  

Вы можете открыть http: // localhost: 32769 в своем браузере.

Примечание. Если вы используете docker-toolbox, вам может потребоваться использовать docker-machine ip default для получения IP.

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

  $ docker run -p 8888: 80 prakhar1989 / static-site
Nginx работает ...  

Чтобы остановить отдельный контейнер, запустите docker stop , указав идентификатор контейнера. В этом случае мы можем использовать имя static-site , которое мы использовали для запуска контейнера.

  $ docker stop static-site
статический сайт  

Я уверен, вы согласны, что это было очень просто. Чтобы развернуть это на реальном сервере, вам просто нужно установить Docker и выполнить указанную выше команду Docker.Теперь, когда вы увидели, как запустить веб-сервер внутри образа Docker, вам должно быть интересно — как мне создать свой собственный образ Docker? Это вопрос, который мы рассмотрим в следующем разделе.

Образы Docker

Мы уже рассматривали образы и раньше, но в этом разделе мы углубимся в то, что такое образы Docker, и создадим свой собственный образ! Наконец, мы также будем использовать этот образ для локального запуска нашего приложения и, наконец, развернуть его на AWS, чтобы поделиться им с нашими друзьями! В восторге? Большой! Давайте начнем.

Docker-образов являются основой контейнеров. В предыдущем примере мы вытащили образ Busybox из реестра и попросили клиент Docker запустить контейнер , основанный на на этом образе. Чтобы просмотреть список образов, доступных локально, используйте команду docker images .

  $ образы докеров
РЕПОЗИТОРНЫЙ ТЕГ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАН ВИРТУАЛЬНЫЙ РАЗМЕР
prakhar1989 / catnip latest c7ffb5626a50 2 часа назад 697.9 МБ
prakhar1989 / static-site latest b270625a1631 21 часов назад 133.9 МБ
python 3-onbuild cf4002b2c383 5 дней назад 688,8 МБ
martin / docker-cleanup-volume последнее b42990daaca2 7 недель назад 22,14 МБ
ubuntu latest e9ae3c220b23 7 недель назад 187,9 МБ
busybox latest c51f86c28340 9 недель назад 1.109 МБ
hello-world последнее 0a6ba66e537a 11 недель назад 960 B  

Выше приведен список образов, которые я извлек из реестра, а также образы, которые я создал сам (мы вскоре увидим, как это сделать). TAG относится к конкретному снимку изображения, а IMAGE ID является соответствующим уникальным идентификатором для этого изображения.

Для простоты вы можете думать об образе, похожем на репозиторий git — образы могут быть зафиксированы с изменениями и иметь несколько версий.Если вы не укажете конкретный номер версии, клиент по умолчанию использует , последняя версия . Например, вы можете вытащить определенную версию ubuntu image

  $ docker pull ubuntu: 18.04  

Чтобы получить новый образ Docker, вы можете либо получить его из реестра (например, Docker Hub), либо создать свой собственный. В Docker Hub доступны десятки тысяч образов. Вы также можете искать изображения прямо из командной строки с помощью docker search .

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

  • Базовые образы — это образы, у которых нет родительского образа, обычно образы с такой ОС, как ubuntu, busybox или debian.

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

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

  • Официальные образы — это образы, которые официально обслуживаются и поддерживаются людьми в Docker. Обычно это одно слово. В приведенном выше списке изображений изображения python , ubuntu , busybox и hello-world являются официальными изображениями.

  • Пользовательские изображения — это изображения, созданные и опубликованные такими пользователями, как вы и я. Они основаны на базовых образах и добавляют дополнительную функциональность.Обычно они имеют формат имя-пользователя / изображения .

Наше первое изображение

Теперь, когда мы лучше понимаем изображения, пришло время создать наши собственные. Нашей целью в этом разделе будет создание образа, который помещает в песочницу простое приложение Flask. Для целей этого семинара я уже создал забавное маленькое приложение Flask, которое отображает случайную кошку .gif каждый раз при загрузке — потому что вы знаете, кто не любит кошек? Если вы еще этого не сделали, продолжайте и клонируйте репозиторий локально, например:

  $ git clone https: // github.com / prakhar1989 / docker-curriculum.git
$ cd docker-curriculum / flask-app  

Это должно быть клонировано на машине, на которой вы выполняете команды докера, и , а не внутри контейнера докера.

Теперь следующий шаг — создать изображение с помощью этого веб-приложения. Как упоминалось выше, все пользовательские изображения основаны на базовом изображении. Поскольку наше приложение написано на Python, базовым образом, который мы собираемся использовать, будет Python 3.

Dockerfile

Dockerfile — это простой текстовый файл, содержащий список команд, которые клиент Docker вызывает при создании образа.Это простой способ автоматизировать процесс создания изображений. Самое приятное то, что команды, которые вы пишете в Dockerfile, на почти на идентичны их эквивалентным командам Linux. Это означает, что вам действительно не нужно изучать новый синтаксис для создания собственных файлов докеров.

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

Начнем с определения нашего базового образа. Для этого используйте ключевое слово FROM

  ИЗ питона: 3  

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

 
РАБОЧИЙ КАТАЛОГ / usr / src / app


КОПИРОВАТЬ. .  

Теперь, когда у нас есть файлы, мы можем установить зависимости.

 
RUN pip install --no-cache-dir -r requirements.txt  

Следующее, что нам нужно указать, — это номер порта, который необходимо предоставить. Поскольку наше приложение Flask работает на порту 5000 , мы укажем именно это.

  EXPOSE 5000  

Последний шаг — написать команду для запуска приложения, которая выглядит просто — python ./app.py . Для этого мы используем команду CMD —

  CMD ["python", "./app.py"]  

Основная цель CMD — сообщить контейнеру, какую команду он должен выполнять при запуске.Итак, наш Dockerfile готов. Вот как это выглядит —

  ОТ питона: 3


РАБОЧИЙ КАТАЛОГ / usr / src / app


КОПИРОВАТЬ. .


ЗАПУСТИТЬ pip install --no-cache-dir -r requirements.txt


EXPOSE 5000


CMD ["питон", "./app.py"]  

Теперь, когда у нас есть Dockerfile , мы можем создать наш образ. Команда docker build выполняет тяжелую работу по созданию образа Docker из файла Dockerfile .

В разделе ниже показаны результаты выполнения того же самого.Прежде чем запускать команду самостоятельно (не забывайте точку), обязательно замените мое имя пользователя на свое. Это имя пользователя должно быть тем же, которое вы создали при регистрации в Docker Hub. Если вы еще этого не сделали, пожалуйста, создайте учетную запись. Команда docker build довольно проста — она ​​принимает необязательное имя тега с -t и расположение каталога, содержащего Dockerfile .

  $ docker build -t yourusername / catnip.Отправка контекста сборки демону Docker 8,704 КБ
Шаг 1: ИЗ python: 3

Шаг 1. СКОПИРУЙТЕ файл requirements.txt / usr / src / app /
 ---> Использование кеша
Шаг 1: ЗАПУСТИТЕ pip install --no-cache-dir -r requirements.txt
 ---> Использование кеша
Шаг 1: КОПИРОВАТЬ. / USR / SRC / приложение
 ---> 1d61f639ef9e
Снятие промежуточного контейнера 4de6ddf5528c
Шаг 2: ЭКСПОЗИРУЙТЕ 5000
 ---> Запуск в 12cfcf6d67ee
 ---> f423c2f179d1
Снятие промежуточного контейнера 12cfcf6d67ee
Шаг 3: CMD python ./app.py
 ---> Запуск в f01401a5ace9
 ---> 13e87ed1fbc2
Снятие промежуточного контейнера f01401a5ace9
Успешно построено 13e87ed1fbc2  

Если у вас нет образа python: 3 , клиент сначала извлечет образ, а затем создаст его.Следовательно, ваш результат выполнения команды будет отличаться от моего. Если все прошло удачно, ваш образ должен быть готов! Запустите docker images и посмотрите, отображается ли ваше изображение.

Последний шаг в этом разделе — запустить образ и посмотреть, действительно ли он работает (заменив мое имя пользователя на ваше).

  $ docker run -p 8888: 5000 имя пользователя / кошачья мята
 * Запуск по http://0.0.0.0:5000/ (для выхода нажмите CTRL + C)  

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

Поздравляем! Вы успешно создали свой первый образ докера.

Докер на AWS

Что хорошего в приложении, которым нельзя поделиться с друзьями? Итак, в этом разделе мы увидим, как мы можем развернуть наше замечательное приложение в облаке, чтобы мы могли поделиться им с нашими друзьями! Мы собираемся использовать AWS Elastic Beanstalk, чтобы запустить наше приложение за несколько кликов. Мы также увидим, насколько легко сделать наше приложение масштабируемым и управляемым с помощью Beanstalk!

Docker push

Первое, что нам нужно сделать перед развертыванием нашего приложения в AWS, — это опубликовать наш образ в реестре, к которому AWS может получить доступ.Есть много разных реестров Docker, которые вы можете использовать (вы даже можете разместить свой собственный). А пока воспользуемся Docker Hub для публикации образа.

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

  $ докер логин
Войдите в систему со своим идентификатором Docker, чтобы отправлять и получать изображения из Docker Hub. Если у вас нет Docker ID, перейдите на https://hub.docker.com, чтобы создать его.
Имя пользователя: yourusername
Пароль:
ПРЕДУПРЕЖДЕНИЕ! Ваш пароль будет храниться в незашифрованном виде в / Users / yourusername /.докер / config.json
Настройте помощник по учетным данным, чтобы удалить это предупреждение. Видеть
https://docs.docker.com/engine/reference/commandline/login/credential-store

Войти успешно  

Для публикации просто введите команду ниже, не забывая заменить имя тега изображения выше на свое. Важно иметь формат yourusername / image_name , чтобы клиент знал, где публиковать.

  $ docker push yourusername / catnip  

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

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

Теперь, когда ваш образ размещен в сети, любой, у кого установлен докер, может играть с вашим приложением, набрав всего одну команду.

  $ docker run -p 8888: 5000 yourusername / catnip  

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

Бобовый стебель

AWS Elastic Beanstalk (EB) — это PaaS (платформа как услуга), предлагаемая AWS.Если вы использовали Heroku, Google App Engine и т. Д., Вы почувствуете себя как дома. Как разработчик, вы просто говорите EB, как запускать ваше приложение, а он позаботится обо всем остальном, включая масштабирование, мониторинг и даже обновления. В апреле 2014 года EB добавила поддержку для запуска развертываний Docker с одним контейнером, что мы будем использовать для развертывания нашего приложения. Хотя EB имеет очень интуитивно понятный интерфейс командной строки, он требует некоторой настройки, и для простоты мы будем использовать веб-интерфейс для запуска нашего приложения.

Для продолжения вам потребуется действующая учетная запись AWS.Если вы еще этого не сделали, сделайте это сейчас — вам нужно будет ввести данные своей кредитной карты. Но не волнуйтесь, это бесплатно, и все, что мы делаем в этом уроке, также будет бесплатным! Давайте начнем.

Вот шаги:

  • Войдите в консоль AWS.
  • Щелкните «Эластичный бобовый стебель». Он будет в разделе вычислений в левом верхнем углу. Кроме того, вы можете получить доступ к консоли Elastic Beanstalk.
  • Нажмите «Создать новое приложение» в правом верхнем углу.
  • Дайте своему приложению запоминающееся (но уникальное) имя и предоставьте (необязательно) описание
  • На экране New Environment создайте новую среду и выберите Web Server Environment .
  • Введите информацию о среде, выбрав домен. Этим URL-адресом вы поделитесь со своими друзьями, поэтому убедитесь, что его легко запомнить.
  • В разделе базовой конфигурации. Выберите Docker из предопределенной платформы .
  • Теперь нам нужно загрузить код нашего приложения. Но поскольку наше приложение упаковано в контейнер Docker, нам просто нужно сообщить EB о нашем контейнере. Откройте файл Dockerrun.aws.json , расположенный в папке flask-app , и отредактируйте Name образа на имя вашего образа.Не волнуйтесь, я вскоре объясню содержимое файла. Когда вы закончите, установите переключатель «Загрузить свой код», выберите этот файл и нажмите «Загрузить».
  • Теперь нажмите «Создать среду». На последнем экране, который вы увидите, будет несколько счетчиков, указывающих, что ваша среда настраивается. Обычно первая настройка занимает около 5 минут.

Пока мы ждем, давайте быстро посмотрим, что содержится в файле Dockerrun.aws.json . Этот файл в основном представляет собой специальный файл AWS, который сообщает EB о конфигурации нашего приложения и докера.

  {
  "AWSEBDockerrunVersion": "1",
  "Изображение": {
    «Имя»: «prakhar1989 / кошачья мята»,
    «Обновление»: «правда»
  },
  «Порты»: [
    {
      «КонтейнерПорт»: 5000, г.
      «HostPort»: 8000
    }
  ],
  «Ведение журнала»: «/ var / log / nginx»
}  

Файл должен быть понятным, но вы всегда можете обратиться к официальной документации для получения дополнительной информации. Мы предоставляем имя образа, который должен использовать EB, а также порт, который должен открывать контейнер.

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

Откройте URL-адрес в своем браузере, и вы увидите приложение во всей красе. Не стесняйтесь отправлять по электронной почте / IM / Snapchat эту ссылку своим друзьям и семье, чтобы они тоже могли насладиться несколькими гифками с кошками.

Очистка

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

Поздравляем! Вы развернули свое первое приложение Docker! Это может показаться большим количеством шагов, но с помощью инструмента командной строки для EB вы можете почти имитировать функциональность Heroku за несколько нажатий клавиш! Надеюсь, вы согласны с тем, что Docker избавляет от многих проблем, связанных с созданием и развертыванием приложений в облаке. Я бы посоветовал вам прочитать документацию AWS по одноконтейнерным средам Docker, чтобы понять, какие функции существуют.

В следующей (и последней) части руководства мы немного повысим ставки и развернем приложение, которое более точно имитирует реальный мир; приложение с постоянным уровнем внутреннего хранилища.Давайте прямо к делу!


Многоконтейнерные среды

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

Те из вас, у кого есть опыт использования сервисов в производственной среде, знают, что в наши дни приложения обычно не так просты.Почти всегда задействована база данных (или любое другое постоянное хранилище). Такие системы, как Redis и Memcached, стали по стандарту большинства архитектур веб-приложений. Следовательно, в этом разделе мы собираемся потратить некоторое время на изучение того, как Dockerize приложения, которые зависят от запуска различных сервисов.

В частности, мы увидим, как мы можем запускать и управлять многоконтейнерными средами Docker и управлять ими. Вы спросите, почему именно мульти-контейнер? Что ж, одним из ключевых моментов Docker является то, как он обеспечивает изоляцию.Идея объединения процесса с его зависимостями в песочнице (называемой контейнерами) делает это таким мощным.

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

SF Food Trucks

Приложение, которое мы собираемся Dockerize, называется SF Food Trucks. Моя цель при создании этого приложения состояла в том, чтобы иметь что-то полезное (в том смысле, что оно напоминает реальное приложение), полагающееся хотя бы на одну службу, но не слишком сложное для целей этого руководства.Это то, что я придумал.

Серверная часть приложения написана на Python (Flask) и для поиска использует Elasticsearch. Как и все остальное в этом руководстве, весь исходный код доступен на Github. Мы будем использовать это приложение в качестве кандидата, чтобы узнать, как создавать, запускать и развертывать многоконтейнерную среду.

Сначала давайте клонируем репозиторий локально.

  $ git clone https://github.com/prakhar1989/FoodTrucks
$ cd FoodTrucks
$ tree -L 2
.
├── Dockerfile
├── README.мкр
├── aws-compose.yml
├── docker-compose.yml
├── flask-app
│ ├── app.py
│ ├── package-lock.json
│ ├── package.json
│ ├── requirements.txt
│ ├── статический
│ ├── шаблоны
│ └── webpack.config.js
├── setup-aws-ecs.sh
├── setup-docker.sh
├── shot.png
└── утилиты
    ├── generate_geojson.py
    └── trucks.geojson  

Папка flask-app содержит приложение Python, а папка utils содержит некоторые утилиты для загрузки данных в Elasticsearch.Каталог также содержит некоторые файлы YAML и Dockerfile, каждый из которых мы рассмотрим более подробно по мере прохождения этого руководства. Если вам интересно, не стесняйтесь взглянуть на файлы.

Теперь, когда вы взволнованы (надеюсь), давайте подумаем о том, как мы можем сделать приложение Dockerize. Мы видим, что приложение состоит из внутреннего сервера Flask и службы Elasticsearch. Естественным способом разделить это приложение было бы наличие двух контейнеров: один запускает процесс Flask, а другой - процесс Elasticsearch (ES).Таким образом, если наше приложение станет популярным, мы сможем масштабировать его, добавляя больше контейнеров в зависимости от того, где находится узкое место.

Отлично, нам нужно два контейнера. Это не должно быть сложно, правда? Мы уже создали собственный контейнер Flask в предыдущем разделе. Что касается Elasticsearch, давайте посмотрим, сможем ли мы что-нибудь найти на хабе.

  $ поиск докеров elasticsearch
НАЗВАНИЕ ОПИСАНИЕ ЗВЕЗДЫ ОФИЦИАЛЬНЫЙ АВТОМАТ
elasticsearch Elasticsearch - это мощный инструмент с открытым исходным кодом... 697 [ОК]
itzg / elasticsearch Предоставляет легко настраиваемый Elasticsea ... 17 [OK]
tutum / elasticsearch Образ Elasticsearch - прослушивает порт 9200. 15 [OK]
barnybug / elasticsearch Последняя версия Elasticsearch 1.7.2 и предыдущая версия ... 15 [OK]
digitalwonderland / elasticsearch Последняя версия Elasticsearch с Marvel и Kibana 12 [OK]
monsantoco / elasticsearch Образ Docker для ElasticSearch 9 [OK]  

Неудивительно, что существует официально поддерживаемый образ для Elasticsearch.Чтобы запустить ES, мы можем просто использовать docker run и мгновенно запустить локально одноузловой контейнер ES.

Примечание. Elastic, компания, стоящая за Elasticsearch, ведет собственный реестр продуктов Elastic. Если вы планируете использовать Elasticsearch, рекомендуется использовать образы из этого реестра.

Давайте сначала потянем изображение

  $ docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2  

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

  $ docker run -d --name es -p 9200: 9200 -p 9300: 9300 -e "discovery.type = single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2
277451c15ec183dd939e80298ea4bcf55050328a39b04124b387d668e3ed3943  

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

Как видно выше, мы используем --name es , чтобы дать нашему контейнеру имя, которое упрощает использование в последующих командах.После запуска контейнера мы можем просмотреть журналы, запустив журналы контейнера докеров с именем (или идентификатором) контейнера для проверки журналов. Если Elasticsearch успешно запустился, вы должны увидеть журналы, подобные приведенным ниже.

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

  $ док-контейнер ls
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
277451c15ec1 докер.elastic.co/elasticsearch/elasticsearch:6.3.2 "/ usr / local / bin / dock…" 2 минуты назад вверх на 2 минуты 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp es

$ docker контейнерные журналы es
[2018-07-29T05: 49: 09,304] [INFO] [o.e.n.Node] [] инициализация ...
[2018-07-29T05: 49: 09,385] [INFO] [oeeNodeEnvironment] [L1VMyzt] с использованием [1] путей к данным, монтирования [[/ (overlay)]], net usable_space [54,1gb], net total_space [62,7gb ], типы [оверлей]
[2018-07-29T05: 49: 09,385] [ИНФОРМАЦИЯ] [o.e.e.NodeEnvironment] [L1VMyzt] размер кучи [990,7 МБ], сжатые указатели обычных объектов [true]
[2018-07-29T05: 49: 11,979] [INFO] [o.e.p.PluginsService] [L1VMyzt] загруженный модуль [x-pack-security]
[2018-07-29T05: 49: 11,980] [INFO] [o.e.p.PluginsService] [L1VMyzt] загруженный модуль [x-pack-sql]
[2018-07-29T05: 49: 11,980] [INFO] [o.e.p.PluginsService] [L1VMyzt] загруженный модуль [x-pack-upgrade]
[2018-07-29T05: 49: 11,980] [INFO] [o.e.p.PluginsService] [L1VMyzt] загруженный модуль [x-pack-watcher]
[2018-07-29T05: 49: 11,981] [ИНФОРМАЦИЯ] [o.e.p.PluginsService] [L1VMyzt] загруженный плагин [ingest-geoip]
[2018-07-29T05: 49: 11,981] [INFO] [o.e.p.PluginsService] [L1VMyzt] загруженный плагин [ingest-user-agent]
[2018-07-29T05: 49: 17,659] [INFO] [o.e.d.DiscoveryModule] [L1VMyzt] с использованием типа обнаружения [одноузловой]
[2018-07-29T05: 49: 18,962] [INFO] [o.e.n.Node] [L1VMyzt] инициализирован
[2018-07-29T05: 49: 18,963] [INFO] [o.e.n.Node] [L1VMyzt] запускается ...
[2018-07-29T05: 49: 19,218] [INFO] [o.e.t.TransportService] [L1VMyzt] publish_address {172.17.0.2: 9300}, bound_addresses {0.0.0.0:9300}
[2018-07-29T05: 49: 19,302] [ИНФОРМАЦИЯ] [o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [L1VMyzt] publish_address {172.17.0.2:9200}, bound_addresses {0.0.0.0:9200}
[2018-07-29T05: 49: 19,303] [INFO] [o.e.n.Node] [L1VMyzt] началось
[2018-07-29T05: 49: 19,439] [WARN] [o.e.x.s.a.s.m.NativeRoleMappingStore] [L1VMyzt] Не удалось очистить кеш для миров [[]]
[2018-07-29T05: 49: 19,542] [INFO] [например, GatewayService] [L1VMyzt] восстановил [0] индексов в cluster_state  

Теперь попробуем проверить, можно ли отправить запрос в контейнер Elasticsearch.Мы используем порт 9200 для отправки запроса cURL в контейнер.

  $ curl 0.0.0.0:9200
{
  "name": "ijJDAOm",
  "имя_кластера": "докер-кластер",
  "cluster_uuid": "a_nSV3XmTCqpzYYzb-LhNw",
  "версия": {
    "number": "6.3.2",
    "build_flavor": "по умолчанию",
    "build_type": "tar",
    "build_hash": "053779d",
    "build_date": "2018-07-20T05: 20: 23.451332Z",
    "build_snapshot": ложь,
    "lucene_version": "7.3.1",
    "minimum_wire_compatibility_version": "5.6.0 ",
    "minimum_index_compatibility_version": "5.0.0"
  },
  "слоган": "Знаешь, для поиска"
}  

Sweet! Выглядит хорошо! Пока мы на этом, давайте также запустим наш контейнер Flask. Но прежде чем мы дойдем до этого, нам понадобится Dockerfile . В последнем разделе мы использовали образ python: 3 в качестве базового изображения. Однако на этот раз, помимо установки зависимостей Python через pip , мы хотим, чтобы наше приложение также генерировало наш миниатюрный файл Javascript для производства.Для этого нам потребуется Nodejs. Поскольку нам нужен пользовательский шаг сборки, мы начнем с базового образа ubuntu , чтобы создать наш Dockerfile с нуля.

Примечание: если вы обнаружите, что существующий образ не соответствует вашим потребностям, не стесняйтесь начать с другого базового образа и настроить его самостоятельно. Для большинства образов в Docker Hub вы сможете найти соответствующий Dockerfile на Github. Чтение существующих файлов Docker - один из лучших способов научиться создавать собственные.

Наш Dockerfile для приложения Flask выглядит так, как показано ниже -

 
ОТ ubuntu: 18.04

ТЕХНИЧЕСКИЙ ОБСЛУЖИВАНИЕ Прахар Шривастав 


ЗАПУСТИТЬ apt-get -yqq update
ЗАПУСТИТЬ apt-get -yqq установить python3-pip python3-dev curl gnupg
ВЫПОЛНИТЬ curl -sL https://deb.nodesource.com/setup_10.x | трепать
ЗАПУСТИТЬ apt-get install -yq nodejs


ДОБАВИТЬ приложение flask-app / opt / flask-app
WORKDIR / opt / flask-app


ЗАПУСТИТЬ npm install
ЗАПУСТИТЬ npm запустить сборку
ЗАПУСТИТЬ pip3 install -r requirements.txt


EXPOSE 5000


CMD ["python3", "./app.py "]  

Здесь довольно много нового, так что давайте быстро пройдемся по этому файлу. Мы начинаем с базового образа Ubuntu LTS и используем диспетчер пакетов apt-get для установки зависимостей, а именно Python и Node. Флаг yqq используется для подавления вывода и предполагает «Да» на все запросы.

Затем мы используем команду ADD , чтобы скопировать наше приложение в новый том в контейнере - / opt / flask-app . Здесь будет находиться наш код.Мы также устанавливаем это как наш рабочий каталог, так что следующие команды будут выполняться в контексте этого местоположения. Теперь, когда наши общесистемные зависимости установлены, мы приступаем к установке зависимостей для конкретных приложений. Прежде всего, мы приступаем к работе с Node, устанавливая пакеты из npm и выполняя команду сборки, как определено в нашем файле package.json . Мы завершаем работу над файлом, устанавливая пакеты Python, открывая порт и определяя запуск CMD , как мы это делали в предыдущем разделе.

Наконец, мы можем создать образ и запустить контейнер (замените prakhar1989 своим именем пользователя ниже).

  $ docker build -t prakhar1989 / foodtrucks-web.  

При первом запуске это займет некоторое время, поскольку клиент Docker загрузит образ ubuntu, выполнит все команды и подготовит ваш образ. Повторный запуск docker build после любых последующих изменений, внесенных в код приложения, будет практически мгновенным.Теперь попробуем запустить наше приложение.

  $ docker run -P --rm prakhar1989 / foodtrucks-web
Невозможно подключиться к ES. Повтор через 5 секунд ...
Невозможно подключиться к ES. Повтор через 5 секунд ...
Невозможно подключиться к ES. Повтор через 5 секунд ...
Нет повторов. Спасение ...  

Ой! Наше приложение flask не могло работать, так как оно не могло подключиться к Elasticsearch. Как мы рассказываем одному контейнеру о другом контейнере и заставляем их разговаривать друг с другом? Ответ кроется в следующем разделе.

Сеть Докеров

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

Хорошо, давайте запустим docker container ls (который совпадает с docker ps ) и посмотрим, что у нас получилось.

  $ док-контейнер ls
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
277451c15ec1 докер.elastic.co/elasticsearch/elasticsearch:6.3.2 "/ usr / local / bin / dock…" 17 минут назад вверх на 17 минут 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp es  

Итак, у нас есть один контейнер ES, работающий на порту 0.0.0.0:9200 , к которому мы можем получить прямой доступ. Если мы можем указать нашему приложению Flask подключиться к этому URL-адресу, оно должно иметь возможность подключаться и разговаривать с ES, верно? Давайте углубимся в наш код Python и посмотрим, как определяются детали подключения.

  es = Elasticsearch (host = 'es')  

Чтобы это сработало, нам нужно сообщить контейнеру Flask, что контейнер ES работает на 0.0.0.0 host (порт по умолчанию 9200 ), и это должно заставить его работать, верно? К сожалению, это неверно, поскольку IP 0.0.0.0 - это IP-адрес для доступа к контейнеру ES с хост-машины , то есть с моего Mac. Другой контейнер не сможет получить к нему доступ с того же IP-адреса. Хорошо, если не этот IP-адрес, то по какому IP-адресу должен быть доступен контейнер ES? Я рад, что вы задали этот вопрос.

Сейчас хорошее время, чтобы начать наше исследование сетей в Docker.Когда докер установлен, он автоматически создает три сети.

  $ докер сеть ls
ИМЯ СЕТЕВОГО ИДЕНТИФИКАЦИИ ДРАЙВЕРА ОБЪЕМ
c2c695315b3a мост мост местный
a875bec5d6fd host host local
ead0e804a67b нет null местный  

Мост Сеть - это сеть, в которой по умолчанию запускаются контейнеры. Это означает, что когда я запускал контейнер ES, он работал в этой сети моста.Чтобы убедиться в этом, давайте проверим сеть.

  $ docker network осмотреть мост
[
    {
        «Название»: «мост»,
        «Id»: «c2c695315b3aaf8fc30530bb3c6b8f6692cedd5cc7579663f0550dfdd21c9a26»,
        «Создано»: «2018-07-28T20: 32: 39.405687265Z»,
        "Область": "местный",
        «Водитель»: «мост»,
        «EnableIPv6»: ложь,
        "IPAM": {
            "Драйвер": "по умолчанию",
            «Параметры»: ноль,
            "Конфиг": [
                {
                    «Подсеть»: «172.17.0.0 / 16 ",
                    «Шлюз»: «172.17.0.1»
                }
            ]
        },
        «Внутренний»: ложь,
        "Присоединяемый": ложь,
        "Ingress": ложь,
        "ConfigFrom": {
            "Сеть": ""
        },
        "ConfigOnly": ложь,
        "Контейнеры": {
            "277451c15ec183dd939e80298ea4bcf55050328a39b04124b387d668e3ed3943": {
                «Имя»: «es»,
                "EndpointID": "5c417a2fc6b13d8ec97b76bbd54aaf3ee2d48f328c3f7279ee335174fbb4d6bb",
                "MacAddress": "02: 42: ac: 11: 00: 02",
                «IPv4Address»: «172.17.0.2 / 16 ",
                "IPv6Address": ""
            }
        },
        "Параметры": {
            "com.docker.network.bridge.default_bridge": "истина",
            "com.docker.network.bridge.enable_icc": "правда",
            "com.docker.network.bridge.enable_ip_masquerade": "правда",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Ярлыки": {}
    }
]  

Вы можете видеть, что наш контейнер 277451c15ec1 указан в разделе Контейнеры выходных данных.Мы также видим IP-адрес, выделенный этому контейнеру - 172.17.0.2 . Это тот IP-адрес, который мы ищем? Давайте узнаем, запустив наш контейнер фляги и попробовав получить доступ к этому IP.

  $ docker run -it --rm prakhar1989 / foodtrucks-web bash
корень @ 35180ccc206a: / opt / flask-app
{
  "name": "Джейн Фостер",
  "имя_кластера": "elasticsearch",
  "версия": {
    "number": "2.1.1",
    "build_hash": "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp": "2015-12-15T13: 05: 55Z",
    "build_snapshot": ложь,
    "lucene_version": "5.3,1 дюйма
  },
  "слоган": "Знаешь, для поиска"
}
корень @ 35180ccc206a: / opt / flask-app  

Теперь это должно быть для вас довольно просто. Запускаем контейнер в интерактивном режиме с процессом bash . --rm - удобный флаг для выполнения одноразовых команд, поскольку контейнер очищается, когда его работа завершается. Мы пробуем curl , но сначала нам нужно его установить. Как только мы это сделаем, мы увидим, что действительно можем поговорить с ES по телефону 172.17.0.2: 9200 . Потрясающие!

Хотя мы придумали способ заставить контейнеры взаимодействовать друг с другом, у этого подхода все еще есть две проблемы -

  1. Как мы сообщаем контейнеру Flask, что имя хоста es означает 172.17.0.2 или какой-то другой IP-адрес, поскольку IP-адрес может измениться?

  2. Поскольку bridge сеть используется всеми контейнерами по умолчанию, этот метод небезопасен . Как изолировать нашу сеть?

Хорошая новость в том, что у Docker есть отличный ответ на наши вопросы.Это позволяет нам определять наши собственные сети, сохраняя их изолированными с помощью команды docker network .

Давайте сначала создадим нашу собственную сеть.

  $ docker network создать foodtrucks-net
0815b2a3bb7a6608e850d05553cc0bda98187c4528d94621438f31d97a6fea3c

$ docker network ls
ИМЯ СЕТЕВОГО ИДЕНТИФИКАЦИИ ДРАЙВЕРА ОБЪЕМ
c2c695315b3a мост мост местный
0815b2a3bb7a фудтраки-сеть мост местный
a875bec5d6fd host host local
ead0e804a67b нет null местный  

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

Теперь, когда у нас есть сеть, мы можем запускать наши контейнеры внутри этой сети, используя флаг --net . Давайте сделаем это - но сначала, чтобы запустить новый контейнер с тем же именем, мы остановим и удалим наш контейнер ES, который работает в сети моста (по умолчанию).

  $ docker container stop es
es

$ docker container rm es
es

$ docker run -d --name es --net foodtrucks-net -p 9200: 9200 -p 9300: 9300 -e "discovery.type = single-node" docker.elastic.co / elasticsearch / elasticsearch: 6.3.2
13d6415f73c8d88bddb1f236f584b63dbaf2c3051f09863a3f1ba219edba3673

$ docker network проверить foodtrucks-net
[
    {
        «Название»: «foodtrucks-net»,
        «Id»: «0815b2a3bb7a6608e850d05553cc0bda98187c4528d94621438f31d97a6fea3c»,
        «Создано»: «2018-07-30T00: 01: 29.1500984Z»,
        "Область": "местный",
        «Водитель»: «мост»,
        «EnableIPv6»: ложь,
        "IPAM": {
            "Драйвер": "по умолчанию",
            "Параметры": {},
            "Конфиг": [
                {
                    «Подсеть»: «172.18.0.0 / 16 ",
                    «Шлюз»: «172.18.0.1»
                }
            ]
        },
        «Внутренний»: ложь,
        "Присоединяемый": ложь,
        "Ingress": ложь,
        "ConfigFrom": {
            "Сеть": ""
        },
        "ConfigOnly": ложь,
        "Контейнеры": {
            "13d6415f73c8d88bddb1f236f584b63dbaf2c3051f09863a3f1ba219edba3673": {
                «Имя»: «es»,
                "EndpointID": "29ba2d33f9713e57eb6b38db41d656e4ee2c53e4a2f7cf636bdca0ec59cd3aa7",
                "MacAddress": "02: 42: ac: 12: 00: 02",
                «IPv4Address»: «172.18.0.2 / 16 ",
                "IPv6Address": ""
            }
        },
        "Параметры": {},
        "Ярлыки": {}
    }
]  

Как видите, наш контейнер es теперь работает внутри мостовой сети foodtrucks-net . Теперь давайте посмотрим, что происходит при запуске в нашей сети foodtrucks-net .

  $ docker run -it --rm --net foodtrucks-net prakhar1989 / foodtrucks-web bash
корень @ 9d2722cf282c: / opt / flask-app
{
  "name": "wWALl9M",
  "имя_кластера": "докер-кластер",
  "cluster_uuid": "BA36XuOiRPaghPNBLBHleQ",
  "версия": {
    «число»: «6.3,2 ",
    "build_flavor": "по умолчанию",
    "build_type": "tar",
    "build_hash": "053779d",
    "build_date": "2018-07-20T05: 20: 23.451332Z",
    "build_snapshot": ложь,
    "lucene_version": "7.3.1",
    "minimum_wire_compatibility_version": "5.6.0",
    "minimum_index_compatibility_version": "5.0.0"
  },
  "слоган": "Знаешь, для поиска"
}
корень @ 53af252b771a: / opt / flask-app
app.py node_modules package.json requirements.txt статические шаблоны webpack.config.js
корень @ 53af252b771a: / opt / flask-app
Индекс не найден...
Загрузка данных в elasticsearch ...
Всего загружено грузовиков: 733
 * Запуск по http://0.0.0.0:5000/ (нажмите CTRL + C, чтобы выйти)
корень @ 53af252b771a: / opt / flask-app  

Wohoo! Это работает! В пользовательских сетях, таких как foodtrucks-net, контейнеры могут связываться не только по IP-адресу, но также могут преобразовывать имя контейнера в IP-адрес. Эта возможность называется автоматическим обнаружением службы . Большой! Запустим наш контейнер Flask прямо сейчас -

  $ docker run -d --net foodtrucks-net -p 5000: 5000 --name foodtrucks-web prakhar1989 / foodtrucks-web
852fc74de2954bb72471b858dce64d764181dca0cf7693fed201d76da33df794

$ docker container ls
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАЕТ СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
852fc74de295 prakhar1989 / foodtrucks-web "python3./app.py "Около минуты назад Вверх Около минуты 0.0.0.0:5000->5000/tcp foodtrucks-web
13d6415f73c8 docker.elastic.co/elasticsearch/elasticsearch:6.3.2 "/ usr / local / bin / dock…" 17 минут назад Вверх 17 минут 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300 / tcp es

$ curl -I 0.0.0.0:5000
HTTP / 1.0 200 ОК
Тип содержимого: текст / html; charset = utf-8
Длина содержимого: 3697
Сервер: Werkzeug / 0.11.2 Python / 2.7.6
Дата: вс, 10 января 2016 г., 23:58:53 GMT  

Перейдите по адресу http: // 0.0.0.0: 5000 и посмотрите свое великолепное приложение вживую! Хотя это могло показаться большим трудом, на самом деле мы просто набрали 4 команды, чтобы перейти от нуля к работе. Я собрал команды в сценарии bash.

  #! / Bin / bash


сборка докеров -t prakhar1989 / foodtrucks-web.


сеть докеров создать foodtrucks-net


docker run -d --name es --net foodtrucks-net -p 9200: 9200 -p 9300: 9300 -e "discovery.type = single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2


docker run -d --net foodtrucks-net -p 5000: 5000 --name foodtrucks-web prakhar1989 / foodtrucks-web  

Теперь представьте, что вы распространяете свое приложение другу или работаете на сервере с установленным докером.Вы можете запустить все приложение с помощью одной команды!

  $ git clone https://github.com/prakhar1989/FoodTrucks
$ cd FoodTrucks
$ ./setup-docker.sh  

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

Docker Compose

До сих пор мы тратили все свое время на изучение клиента Docker. Однако в экосистеме Docker есть множество других инструментов с открытым исходным кодом, которые очень хорошо работают с Docker.Некоторые из них -

  1. Docker Machine - Создайте хосты Docker на вашем компьютере, у облачных провайдеров и внутри вашего собственного центра обработки данных.
  2. Docker Compose - инструмент для определения и запуска многоконтейнерных приложений Docker.
  3. Docker Swarm - собственное решение кластеризации для Docker
  4. Kubernetes - Kubernetes - это система с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнерными приложениями.

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

История создания Docker Compose довольно интересна. Примерно в январе 2014 года компания OrchardUp запустила инструмент под названием Fig. Идея Fig заключалась в том, чтобы заставить изолированные среды разработки работать с Docker. Проект был очень хорошо принят Hacker News - я, как ни странно, помню, как читал о нем, но не совсем понял.

Первый комментарий на форуме действительно хорошо объясняет, что такое Fig.

Итак, на данный момент Docker и занимается именно запуском процессов.Теперь Docker предлагает довольно богатый API для запуска процессов: общие тома (каталоги) между контейнерами (т. Е. Запущенные образы), порт пересылки от хоста к контейнеру, отображение журналов и т. Д. Но это все: Docker на данный момент остается на уровне процесса.

Хотя он предоставляет возможности для оркестровки нескольких контейнеров для создания единого «приложения», он не обращается к управлению такой группой контейнеров как единым целым. И здесь на помощь приходят такие инструменты, как Fig: речь идет о группе контейнеров как о едином объекте.Подумайте «запустить приложение» (т.е. «запустить оркестрованный кластер контейнеров») вместо «запустить контейнер».

Оказывается, многие люди, использующие докер, согласны с этим мнением. Постепенно и неуклонно по мере того, как Fig стал популярным, Docker Inc. обратила на это внимание, приобрела компанию и переименовала Fig в Docker Compose.

Итак, для чего используется Compose ? Compose - это инструмент, который используется для простого определения и запуска многоконтейнерных приложений Docker. Он предоставляет файл конфигурации под названием docker-compose.yml , который можно использовать для вызова приложения и набора служб, от которых оно зависит, с помощью всего одной команды. Compose работает во всех средах: производственная, промежуточная, разработка, тестирование, а также рабочие процессы CI, хотя Compose идеально подходит для сред разработки и тестирования.

Давайте посмотрим, сможем ли мы создать файл docker-compose.yml для нашего приложения SF-Foodtrucks и оценить, оправдывает ли Docker Compose свое обещание.

Однако первым шагом является установка Docker Compose.Если вы используете Windows или Mac, Docker Compose уже установлен, поскольку он входит в панель инструментов Docker. Пользователи Linux могут легко получить доступ к Docker Compose, следуя инструкциям в документации. Поскольку Compose написан на Python, вы также можете просто выполнить pip install docker-compose . Проверьте свою установку с помощью -

  $ docker-compose --version
docker-compose версия 1.21.2, сборка a133471  

Теперь, когда он установлен, мы можем перейти к следующему шагу i.е. файл Docker Compose docker-compose.yml . Синтаксис YAML довольно прост, и репозиторий уже содержит файл docker-compose, который мы будем использовать.

  версия: "3"
Сервисы:
  es:
    изображение: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    имя_контейнера: es
    среда:
      - discovery.type = одноузловой
    порты:
      - 9200: 9200
    объемы:
      - esdata1: / usr / share / elasticsearch / data
  Интернет:
    изображение: prakhar1989 / foodtrucks-web
    команда: приложение python3.ру
    зависит от:
      - es
    порты:
      - 5000: 5000
    объемы:
      - ./flask-app:/opt/flask-app
объемы:
  esdata1:
    водитель: местный  

Позвольте мне объяснить, что означает файл выше. На родительском уровне мы определяем названия наших сервисов - es и web . Параметр image требуется всегда, и для каждой службы, которую мы хотим, чтобы Docker запускал, мы можем добавить дополнительные параметры. Для es мы просто ссылаемся на образ elasticsearch , доступный в реестре Elastic.Для нашего приложения Flask мы ссылаемся на изображение, которое мы создали в начале этого раздела.

Другие параметры, такие как команда и порты , предоставляют дополнительную информацию о контейнере. Параметр volume указывает точку монтирования в нашем контейнере web , где будет находиться код. Это совершенно необязательно и полезно, если вам нужен доступ к журналам и т. Д. Позже мы увидим, как это может быть полезно во время разработки. Обратитесь к онлайн-ссылке, чтобы узнать больше о параметрах, которые поддерживает этот файл.Мы также добавляем тома для контейнера es , чтобы данные, которые мы загружаем, сохранялись между перезапусками. Мы также указываем depends_on , который сообщает докеру, что нужно запустить контейнер es перед web . Вы можете узнать больше об этом в docker compose docs.

Примечание. Вы должны находиться внутри каталога с файлом docker-compose.yml , чтобы выполнять большинство команд Compose.

Отлично! Теперь файл готов, давайте посмотрим docker-compose в действии.Но прежде чем мы начнем, нам нужно убедиться, что порты и имена свободны. Так что, если у вас запущены контейнеры Flask и ES, давайте отключим их.

  $ docker stop es foodtrucks-web
es
foodtrucks-сеть

$ docker rm es foodtrucks-сеть
es
foodtrucks-сеть  

Теперь мы можем запустить docker-compose . Перейдите в каталог фургонов с едой и запустите docker-compose up .

  $ docker-compose up
Создание сети foodtrucks_default с драйвером по умолчанию
Создание foodtrucks_es_1
Создание foodtrucks_web_1
Присоединение к foodtrucks_es_1, foodtrucks_web_1
es_1 | [2016-01-11 03: 43: 50,300] [ИНФОРМАЦИЯ] [узел] [Комета] версия [2.1.1], pid [1], build [40e2c53 / 2015-12-15T13: 05: 55Z]
es_1 | [2016-01-11 03: 43: 50,307] [INFO] [узел] [Comet] инициализация ...
es_1 | [2016-01-11 03: 43: 50,366] [ИНФОРМАЦИЯ] [плагины] [Комета] загружены [], сайты []
es_1 | [2016-01-11 03: 43: 50,421] [INFO] [env] [Comet] с использованием [1] путей к данным, монтирует [[/ usr / share / elasticsearch / data (/ dev / sda1)]], net usable_space [16gb], net total_space [18,1gb], спины? [возможно], типы [ext4]
es_1 | [2016-01-11 03: 43: 52,626] [INFO] [узел] [Comet] инициализирован
es_1 | [2016-01-11 03: 43: 52,632] [ИНФОРМАЦИЯ] [узел] [Комета] запускается...
es_1 | [2016-01-11 03: 43: 52,703] [WARN] [common.network] [Comet] опубликовать адрес: {0.0.0.0} - это групповой адрес, возвращающийся к первому без петлевого тестирования: {172.17.0.2}
es_1 | [2016-01-11 03: 43: 52,704] [INFO] [транспорт] [Comet] publish_address {172.17.0.2:9300}, bound_addresses {[::]: 9300}
es_1 | [2016-01-11 03: 43: 52,721] [ИНФОРМАЦИЯ] [открытие] [Комета] elasticsearch / cEk4s7pdQ-evRc9MqS2wqw
es_1 | [2016-01-11 03: 43: 55,785] [ИНФОРМАЦИЯ] [cluster.service] [Comet] new_master {Comet} {cEk4s7pdQ-evRc9MqS2wqw} {172.17.0.2} {172.17.0.2:9300}, причина: zen-disco-join (selected_as_master, [0] присоединений получено)
es_1 | [2016-01-11 03: 43: 55,818] [WARN] [common.network] [Comet] адрес публикации: {0.0.0.0} - это групповой адрес, возвращающийся к первому без петлевого тестирования: {172.17.0.2}
es_1 | [2016-01-11 03: 43: 55,819] [INFO] [http] [Comet] publish_address {172.17.0.2:9200}, bound_addresses {[::]: 9200}
es_1 | [2016-01-11 03: 43: 55,819] [INFO] [узел] [Comet] запущен
es_1 | [2016-01-11 03: 43: 55,826] [INFO] [gateway] [Comet] восстановили [0] индексов в cluster_state
es_1 | [2016-01-11 03: 44: 01,825] [ИНФОРМАЦИЯ] [кластер.метаданные] [Комета] [sfdata] создание индекса, причина [auto (index api)], шаблоны [], сегменты [5] / [1], сопоставления [грузовик]
es_1 | [2016-01-11 03: 44: 02,373] [ИНФОРМАЦИЯ] [cluster.metadata] [Comet] [sfdata] update_mapping [truck]
es_1 | [2016-01-11 03: 44: 02,510] [ИНФОРМАЦИЯ] [cluster.metadata] [Comet] [sfdata] update_mapping [грузовик]
es_1 | [2016-01-11 03: 44: 02,593] [ИНФОРМАЦИЯ] [cluster.metadata] [Comet] [sfdata] update_mapping [truck]
es_1 | [2016-01-11 03: 44: 02,708] [ИНФОРМАЦИЯ] [cluster.metadata] [Comet] [sfdata] update_mapping [truck]
es_1 | [2016-01-11 03: 44: 03,047] [ИНФОРМАЦИЯ] [кластер.метаданные] [Комета] [sfdata] update_mapping [грузовик]
web_1 | * Запуск по http://0.0.0.0:5000/ (для выхода нажмите CTRL + C)  

Зайдите на IP-адрес, чтобы увидеть свое приложение вживую. Это было потрясающе, не правда ли? Всего несколько строк конфигурации, и у нас есть два контейнера Docker, успешно работающих в унисон. Остановим службы и перезапустим их в автономном режиме.

  web_1 | * Запуск по http://0.0.0.0:5000/ (нажмите CTRL + C, чтобы выйти)
Убиваем foodtrucks_web_1 ... готово
Убийство foodtrucks_es_1... Выполнено

$ docker-compose up -d
Создание es ... готово
Создание foodtrucks_web_1 ... готово

$ docker-compose ps
      Название команды Состояние портов
-------------------------------------------------- ------------------------------------------
es / usr / local / bin / docker-entr ... До 0.0.0.0:9200->9200/tcp, 9300 / tcp
foodtrucks_web_1 python3 app.py Up 0.0.0.0:5000->5000/tcp  

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

Прежде всего, остановим работу служб. Мы всегда можем вернуть их обратно с помощью одной команды. Тома данных сохранятся, поэтому можно снова запустить кластер с теми же данными с помощью docker-compose up. Чтобы уничтожить кластер и тома данных, просто введите docker-compose down -v .

  $ docker-compose down -v
Остановка foodtrucks_web_1 ... выполнено
Остановка es ... сделано
Удаление foodtrucks_web_1 ... выполнено
Удаление es ... сделано
Удаление сети foodtrucks_default
Снятие тома foodtrucks_esdata1  

Пока мы это делаем, мы также удалим сеть foodtrucks , которую мы создали в прошлый раз.

  $ докер сеть rm foodtrucks-net
$ docker network ls
ИМЯ СЕТЕВОГО ИДЕНТИФИКАЦИИ ДРАЙВЕРА ОБЪЕМ
c2c695315b3a мост мост местный
a875bec5d6fd host host local
ead0e804a67b нет null местный  

Отлично! Теперь, когда у нас есть чистый лист, давайте повторно запустим наши службы и посмотрим, сотворит ли Compose свое волшебство.

  $ docker-compose up -d
Воссоздание foodtrucks_es_1
Воссоздание foodtrucks_web_1

$ docker container ls
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
f50bb33a3242 prakhar1989 / foodtrucks-web "python3 app.py" 14 секунд назад Вверх на 13 секунд 0.0.0.0:5000->5000/tcp foodtrucks_web_1
e299ceeb4caa elasticsearch "/docker-entrypoint.s" 14 секунд назад Up 14 секунд 9200 / tcp, 9300 / tcp foodtrucks_es_1  

Пока все хорошо.Пора посмотреть, были ли созданы какие-нибудь сети.

  $ докер сеть ls
ИМЯ СЕТИ ИМЯ ДРАЙВЕР
c2c695315b3a мост мост местный
f3b80f381ed3 foodtrucks_default мост местный
a875bec5d6fd host host local
ead0e804a67b нет null местный  

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

  $ докер пс
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
8c6bb7e818ec docker.elastic.co/elasticsearch/elasticsearch:6.3.2 "/ usr / local / bin / dock…" Около минуты назад вверх Около минуты 0.0.0.0: 9200-> 9200 / tcp, 9300 / tcp es
7640cec7feb7 prakhar1989 / foodtrucks-web "python3 app.py" Около минуты назад Вверх Около минуты 0.0.0.0:5000->5000/tcp foodtrucks_web_1

$ docker network проверить foodtrucks_default
[
    {
        "Name": "foodtrucks_default",
        «Id»: «f3b80f381ed3e03b3d5e605e42c4a576e32d38ba24399e963d7dad848b3b4fe7»,
        «Создано»: «2018-07-30T03: 36: 06.0384826Z»,
        "Область": "местный",
        «Водитель»: «мост»,
        «EnableIPv6»: ложь,
        "IPAM": {
            "Драйвер": "по умолчанию",
            «Параметры»: ноль,
            "Конфиг": [
                {
                    «Подсеть»: «172.19.0.0 / 16 ",
                    «Шлюз»: «172.19.0.1»
                }
            ]
        },
        «Внутренний»: ложь,
        "Присоединяемый": правда,
        "Ingress": ложь,
        "ConfigFrom": {
            "Сеть": ""
        },
        "ConfigOnly": ложь,
        "Контейнеры": {
            "7640cec7feb7f5615eaac376271a93fb8bab2ce54c7257256bf16716e05c65a5": {
                "Имя": "foodtrucks_web_1",
                "EndpointID": "b1aa3e735402abafea3edfbba605eb4617f81d94f1b5f8fcc566a874660a0266",
                "MacAddress": "02: 42: ac: 13: 00: 02",
                «IPv4Address»: «172.19.0.2 / 16 ",
                "IPv6Address": ""
            },
            "8c6bb7e818ec1f88c37f375c18f00beb030b31f4b10aee5a0952aad753314b57": {
                «Имя»: «es»,
                "EndpointID": "649b3567d38e5e6f03fa6c004a4302508c14a5f2ac086ee6dcf13ddef936de7b",
                "MacAddress": "02: 42: ac: 13: 00: 03",
                «IPv4Address»: «172.19.0.3/16»,
                "IPv6Address": ""
            }
        },
        "Параметры": {},
        "Ярлыки": {
            "com.docker.compose.сеть ":" по умолчанию ",
            "com.docker.compose.project": "foodtrucks",
            "com.docker.compose.version": "1.21.2"
        }
    }
]  

Рабочий процесс разработки

Прежде чем мы перейдем к следующему разделу, я хотел бы еще кое-что рассказать о docker-compose. Как было сказано ранее, docker-compose действительно отлично подходит для разработки и тестирования. Итак, давайте посмотрим, как мы можем настроить compose, чтобы облегчить нам жизнь во время разработки.

В этом руководстве мы работали с готовыми образами докеров.Хотя мы создавали образы с нуля, мы еще не касались кода приложений и в основном ограничились редактированием файлов Docker и конфигураций YAML. Вам, должно быть, интересно, как выглядит рабочий процесс во время разработки? Следует ли создавать образы Docker для каждого изменения, затем публиковать их, а затем запускать, чтобы проверить, работают ли изменения должным образом? Я уверен, что это звучит очень утомительно. Там должен быть лучший способ. В этом разделе мы собираемся изучить это.

Давайте посмотрим, как мы можем внести изменения в только что запущенное приложение Foodtrucks. Убедитесь, что у вас запущено приложение,

  $ док-контейнер ls
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
5450ebedd03c prakhar1989 / foodtrucks-web "python3 app.py" 9 секунд назад Вверх на 6 секунд 0.0.0.0:5000->5000/tcp foodtrucks_web_1
05d408b25dfe докер.elastic.co/elasticsearch/elasticsearch:6.3.2 "/ usr / local / bin / dock…" 10 часов назад Вверх 10 часов 0.0.0.0:9200->9200/tcp, 9300 / tcp es  

Теперь давайте посмотрим, сможем ли мы изменить это приложение, чтобы отображать Hello world! Сообщение при запросе на маршрут / hello . В настоящее время приложение отвечает 404.

  $ curl -I 0.0.0.0:5000/hello
HTTP / 1.0 404 НЕ НАЙДЕН
Тип содержимого: текст / html
Длина содержимого: 233
Сервер: Werkzeug / 0.11.2 Python / 2.7.15rc1
Дата: Пн, 30 июля 2018 г. 15:34:38 ​​GMT  

Почему это происходит? Поскольку наше приложение является Flask, мы можем найти ответы на app.py (ссылка). Во Flask маршруты определяются с помощью синтаксиса @ app.route. В файле вы увидите, что у нас определены только три маршрута - /, / debug и / search . Маршрут / отображает основное приложение, маршрут отладки используется для возврата некоторой отладочной информации и, наконец, поиск используется приложением для запроса elasticsearch.

  $ curl 0.0.0.0:5000/debug
{
  "msg": "желтый открытый sfdata Ibkx7WYjSt-g8NZXOEtTMg 5 1 618 0 1,3 МБ 1,3 МБ \ n",
  "статус": "успех"
}  

Учитывая этот контекст, как нам добавить новый маршрут для hello ? Ты угадал! Давайте откроем flask-app / app.py в нашем любимом редакторе и внесем следующие изменения

  @ app.route ('/')
def index ():
  вернуть render_template ("index.html")


@ app.route ('/ привет')
def привет ():
  ответьте "привет, мир!"  

А теперь попробуем сделать запрос еще раз

  $ завиток -I 0.0.0.0: 5000 / привет
HTTP / 1.0 404 НЕ НАЙДЕН
Тип содержимого: текст / html
Длина содержимого: 233
Сервер: Werkzeug / 0.11.2 Python / 2.7.15rc1
Дата: Пн, 30 июля 2018 г. 15:34:38 ​​GMT  

О нет! Это не сработало! Что мы сделали не так? Хотя мы внесли изменения в app.py , файл находится на нашей машине (или на хост-машине), но поскольку Docker запускает наши контейнеры на основе образа prakhar1989 / foodtrucks-web , он не знает об этом изменении. Чтобы проверить это, давайте попробуем следующее -

  $ docker-compose запустить web bash
Запуск es... Выполнено
корень @ 581e351c82b0: / opt / flask-app
app.py package-lock.json шаблоны requirements.txt
node_modules package.json статический webpack.config.js
корень @ 581e351c82b0: / opt / flask-app
корень @ 581e351c82b0: / opt / flask-app  

Здесь мы пытаемся проверить, что наших изменений нет в app.py , который выполняется в контейнере. Мы делаем это, выполняя команду docker-compose run , которая похожа на своего двоюродного брата docker run , но принимает дополнительные аргументы для службы (в нашем случае это web ).Как только мы запускаем bash , оболочка открывается в / opt / flask-app , как указано в нашем Dockerfile. По команде grep мы видим, что наших изменений нет в файле.

Давайте посмотрим, как мы можем это исправить. Во-первых, нам нужно указать docker compose не использовать изображение, а вместо этого использовать файлы локально. Мы также установим режим отладки на true , чтобы Flask знал, что нужно перезагрузить сервер при изменении app.py . Замените часть web файла docker-compose.yml файл так:

  версия: "3"
Сервисы:
  es:
    изображение: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    имя_контейнера: es
    среда:
      - discovery.type = одноузловой
    порты:
      - 9200: 9200
    объемы:
      - esdata1: / usr / share / elasticsearch / data
  Интернет:
    строить: .
    команда: python3 app.py
    среда:
      - DEBUG = True
    зависит от:
      - es
    порты:
      - «5000: 5000»
    объемы:
      - ./flask-app:/opt/flask-app
объемы:
  esdata1:
    водитель: местный  

С этим изменением (diff) давайте остановим и запустим контейнеры.

  $ docker-compose down -v
Остановка foodtrucks_web_1 ... выполнено
Остановка es ... сделано
Удаление foodtrucks_web_1 ... выполнено
Удаление es ... сделано
Удаление сети foodtrucks_default
Удаление тома foodtrucks_esdata1

$ docker-compose up -d
Создание сети foodtrucks_default с драйвером по умолчанию
Создание тома foodtrucks_esdata1 с локальным драйвером
Создание es ... готово
Создание foodtrucks_web_1 ... выполнено  

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

  $ curl 0.0.0.0:5000/hello
привет мир  

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

На этом мы завершаем обзор Docker Compose. С помощью Docker Compose вы также можете приостанавливать свои службы, запускать одноразовую команду для контейнера и даже масштабировать количество контейнеров. Я также рекомендую вам ознакомиться с несколькими другими вариантами использования Docker compose. Надеюсь, мне удалось показать вам, насколько легко управлять многоконтейнерными средами с помощью Compose.В последнем разделе мы собираемся развернуть наше приложение на AWS!

AWS Elastic Container Service

В последнем разделе мы использовали docker-compose для локального запуска нашего приложения с помощью одной команды: docker-compose up . Теперь, когда у нас есть работающее приложение, мы хотим поделиться им со всем миром, привлечь пользователей, заработать кучу денег и купить большой дом в Майами. Выполнение последних трех выходит за рамки учебного пособия, поэтому вместо этого мы потратим время на выяснение того, как мы можем развернуть наши многоконтейнерные приложения в облаке с помощью AWS.

Если вы дочитали до этого места, то практически уверены, что Docker — довольно крутая технология. И вы не одиноки. Увидев стремительный рост Docker, почти все поставщики облачных услуг начали работать над добавлением поддержки для развертывания приложений Docker на своей платформе. На сегодняшний день вы можете развертывать контейнеры на Google Cloud Platform, AWS, Azure и многих других. У нас уже есть учебник по развертыванию приложений с одним контейнером с помощью Elastic Beanstalk, и в этом разделе мы рассмотрим Elastic Container Service (или ECS) от AWS.

AWS ECS — это масштабируемая и сверхгибкая служба управления контейнерами, которая поддерживает контейнеры Docker. Он позволяет управлять кластером Docker поверх экземпляров EC2 через простой в использовании API. В то время как Beanstalk имеет разумные значения по умолчанию, ECS позволяет полностью настроить среду в соответствии с вашими потребностями. На мой взгляд, это делает ECS довольно сложной задачей для начала работы.

К счастью для нас, у ECS есть удобный инструмент командной строки, который понимает файлы Docker Compose и автоматически подготавливает кластер к ECS! Поскольку у нас уже есть действующий файл docker-compose.yml , установка и запуск на AWS не потребуют больших усилий. Итак, приступим!

Первым шагом является установка интерфейса командной строки. Инструкции по установке CLI на Mac и Linux очень четко объяснены в официальных документах. Идите вперед, установите CLI, и когда вы закончите, проверьте установку, запустив

  $ ecs-cli --версия
ecs-cli версия 1.18.1 (7e9df84)  

Далее мы будем работать над настройкой интерфейса командной строки, чтобы мы могли общаться с ECS.Мы будем следовать инструкциям, подробно описанным в официальном руководстве по документации AWS ECS. В случае возникновения недоразумений, смело обращайтесь к этому руководству.

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

  $ ecs-cli configure profile --profile-name ecs-foodtrucks --access-key $ AWS_ACCESS_KEY_ID --secret-key $ AWS_SECRET_ACCESS_KEY  

Затем нам нужно получить пару ключей, которую мы будем использовать для входа в экземпляры.Перейдите в консоль EC2 и создайте новую пару ключей. Загрузите пару ключей и храните ее в надежном месте. Еще одна вещь, на которую следует обратить внимание, прежде чем уходить с этого экрана, — это название региона. В моем случае я назвал свой ключ — ecs и установил свой регион как us-east-1 . Это то, что я предполагаю до конца этого пошагового руководства.

Следующим шагом является настройка интерфейса командной строки.

  $ ecs-cli configure --region us-east-1 --cluster foodtrucks
ИНФОРМАЦИЯ [0000] Сохраненная конфигурация интерфейса командной строки ECS для кластера (foodtrucks)  

Мы предоставляем команде configure имя региона, в котором должен находиться наш кластер, и имя кластера.Убедитесь, что вы предоставили то же имя региона , которое вы использовали при создании пары ключей. Если вы раньше не настраивали интерфейс командной строки AWS на своем компьютере, вы можете использовать официальное руководство, в котором все подробно объясняется, как все работает.

Следующий шаг позволяет CLI создать шаблон CloudFormation.

  $ ecs-cli up --keypair ecs --capability-iam --size 1 --instance-type t2.medium
ИНФОРМАЦИЯ [0000] Использование рекомендованного AMI Amazon Linux 2 с агентом ECS 1.39.0 и Docker версии 18.09.9-ce
ИНФОРМАЦИЯ [0000] Созданный кластер cluster = foodtrucks
ИНФОРМАЦИЯ [0001] Ожидание создания ресурсов кластера.
ИНФОРМАЦИЯ [0001] Статус стека облачной информации stackStatus = CREATE_IN_PROGRESS
ИНФОРМАЦИЯ [0062] Статус стека облачной информации stackStatus = CREATE_IN_PROGRESS
ИНФОРМАЦИЯ [0122] Статус стека облачной информации stackStatus = CREATE_IN_PROGRESS
ИНФОРМАЦИЯ [0182] Статус стека облачной информации stackStatus = CREATE_IN_PROGRESS
ИНФОРМАЦИЯ [0242] Статус стека облачной информации stackStatus = CREATE_IN_PROGRESS
VPC создан: vpc-0bbed85363a6
Создана группа безопасности: sg-0cf767fb4d01a3f99
Подсеть создана: subnet-05de1db2cb1a50ab8
Подсеть создана: subnet-01e1e8bc95d49d0fd
Кластер создан. 

Здесь мы указываем имя пары ключей, которую мы загрузили изначально ( ecs в моем случае), количество экземпляров, которые мы хотим использовать ( - размер ), и тип экземпляров, на которых мы хотим запускать контейнеры. . Флаг --capability-iam сообщает CLI, что мы подтверждаем, что эта команда может создавать ресурсы IAM.

На последнем и последнем шаге мы будем использовать наш файл docker-compose.yml . Нам нужно будет внести несколько незначительных изменений, поэтому вместо изменения оригинала давайте сделаем его копию.Содержимое этого файла (после внесения изменений) выглядит (ниже) -

  версия: '2'
Сервисы:
  es:
    изображение: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    cpu_shares: 100
    mem_limit: 3621440000
    среда:
      - discovery.type = одноузловой
      - bootstrap.memory_lock = true
      - "ES_JAVA_OPTS = -Xms512m -Xmx512m"
    Ведение журнала:
      драйвер: awslogs
      параметры:
        awslogs-group: фудтраки
        awslogs-region: us-east-1
        префикс-потока-awslogs: es
  Интернет:
    изображение: prakhar1989 / foodtrucks-web
    cpu_shares: 100
    mem_limit: 262144000
    порты:
      - «80: 5000»
    ссылки:
      - es
    Ведение журнала:
      драйвер: awslogs
      параметры:
        awslogs-group: фудтраки
        awslogs-region: us-east-1
        префикс-потока-awslogs: веб- 

Единственные изменения, которые мы внесли по сравнению с исходным файлом docker-compose.yml предоставляют значения mem_limit (в байтах) и cpu_shares для каждого контейнера и добавляют некоторую конфигурацию журналирования. Это позволяет нам просматривать журналы, созданные нашими контейнерами, в AWS Cloudwatch. Обратите внимание, что, поскольку ElasticSearch обычно занимает больше памяти, мы предоставили ограничение памяти около 3,4 ГБ. Еще одна вещь, которую нам нужно сделать, прежде чем мы перейдем к следующему шагу, - это опубликовать наш образ в Docker Hub.

  $ docker push prakhar1989 / foodtrucks-web  

Отлично! Теперь давайте запустим последнюю команду, которая развернет наше приложение на ECS!

  $ cd aws-ecs
$ ecs-cli создать
ИНФОРМАЦИЯ [0000] Использование определения задачи ECS TaskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0000] Пусковой контейнер... container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / es
ИНФОРМАЦИЯ [0000] Запуск контейнера ... container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / web
ИНФОРМАЦИЯ [0000] Описание состояния контейнера ECS container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / web desireStatus = RUNNING lastStatus = PENDING taskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0000] Описание состояния контейнера ECS container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / es desireStatus = RUNNING lastStatus = PENDING taskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0036] Описание состояния контейнера ECS container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / es желаемыйStatus = RUNNING lastStatus = PENDING taskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0048] Описание состояния контейнера ECS container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / web desireStatus = RUNNING lastStatus = PENDING taskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0048] Описание состояния контейнера ECS container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / es желаемыйStatus = RUNNING lastStatus = PENDING taskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0060] Запущенный контейнер... container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / web desireStatus = RUNNING lastStatus = RUNNING taskDefinition = ecscompose-foodtrucks: 2
ИНФОРМАЦИЯ [0060] Запущенный контейнер ... container = 845e2368-170d-44a7-bf9f-84c7fcd9ae29 / es desireStatus = RUNNING lastStatus = RUNNING taskDefinition = ecscompose-foodtrucks: 2  

Не случайно, что приведенный выше вызов похож на тот, который мы использовали с Docker Compose . Если все прошло хорошо, вы должны увидеть желаемый статус = РАБОТАЕТ lastStatus = РАБОТАЕТ в качестве последней строки.

Отлично! Наше приложение работает, но как мы можем получить к нему доступ?

  ecs-cli пс
Имя Состояние Порты Задача Определение
845e2368-170d-44a7-bf9f-84c7fcd9ae29 / web RUNNING 54.86.14.14:80->5000/tcp ecscompose-foodtrucks: 2
845e2368-170d-44a7-bf9f-84c7fcd9ae29 / es РАБОТАЮЩИЕ ecscompose-foodtrucks: 2  

Идите вперед и откройте http://54.86.14.14 в своем браузере, и вы увидите Food Trucks во всей его черно-желтой красе! Раз уж мы затронули тему, давайте посмотрим, как выглядит наша консоль AWS ECS.

Выше мы видим, что наш кластер ECS под названием «foodtrucks» был создан и теперь выполняет 1 задачу с 2 экземплярами контейнеров. Потратьте некоторое время на просмотр этой консоли, чтобы ознакомиться со всеми опциями, которые здесь есть.

Очистка

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

  $ ecs-cli down --force
ИНФОРМАЦИЯ [0001] Ожидание удаления ресурсов кластера ...
ИНФОРМАЦИЯ [0001] Статус стека облачной информации stackStatus = DELETE_IN_PROGRESS
ИНФОРМАЦИЯ [0062] Статус стека облачной информации stackStatus = DELETE_IN_PROGRESS
ИНФОРМАЦИЯ [0124] Статус стека облачной информации stackStatus = DELETE_IN_PROGRESS
ИНФОРМАЦИЯ [0155] Удаленный кластер cluster = foodtrucks  

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


Заключение

Вот и все! После долгого, исчерпывающего, но увлекательного урока вы теперь готовы штурмовать контейнерный мир! Если вы следовали до самого конца, то вам определенно стоит гордиться собой. Вы узнали, как настроить Docker, запустить свои собственные контейнеры, поиграть со статическими и динамическими веб-сайтами, и, что самое важное, получили практический опыт развертывания приложений в облаке!

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

Следующие шаги

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

Ниже приведены несколько дополнительных ресурсов, которые будут полезны. Для вашего следующего проекта я настоятельно рекомендую вам использовать Docker. Помните - практика ведет к совершенству!

Дополнительные ресурсы

Давай, молодой падаван!

Оставить отзыв

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

Отправьте свои мысли прямо мне или просто создайте проблему. Я тоже в Твиттере, так что если это ваша сделка, не стесняйтесь кричать там!

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


Дома из морских контейнеров: стоимость, дизайн и все остальное, что нужно знать

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

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

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

Этот дом из морских контейнеров с одной спальней и одной ванной демонстрирует элегантный дизайн в Ливингстоне, штат Монтана. Фото Windy Haus / @ windy_haus
Что такое судовой контейнерный дом?

Морской контейнерный дом - это любое жилище, построенное из морского контейнера, но получаемые в результате конструкции могут быть самыми разнообразными. Транспортные контейнеры обычно бывают двух размеров: 20 на 8 футов или 40 на 8 футов. Меньший из двух составляет около 160 квадратных футов жилой площади, а больший контейнер дает вам 320 квадратных футов. Также существует два типа высоты: обычная (8.5 футов высотой) или высокий кубический контейнер, обеспечивающий около фута дополнительного вертикального жилого пространства. Некоторые дома из морских контейнеров останавливаются здесь, используя эти компактные пространства как отдельные крошечные дома или офисы.

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

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

Скульптор Дэвид Мах подошел к своему первому зданию с художественной точки зрения, собрав 36 ярко-красных транспортных контейнеров в искусно сложенный беспорядок. Монтажные мастерские
Откуда берутся транспортные контейнеры и как их купить?

Если вы купите пустой новый транспортный контейнер, скорее всего, он будет от производителей в Китае; китайская компания CIMC производит около 82 процентов стальных морских контейнеров в мире.Подержанные транспортные контейнеры - более экологичный и экономичный вариант, но вам необходимо тщательно проверять их состояние. Обратите внимание на разные сертификаты. Некоторые из них сертифицированы для отправки товаров за границу, а более строгие сертификаты указывают на то, что контейнеры являются ветро- и водонепроницаемыми.

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

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

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

Какое разрешение необходимо для строительства морского контейнерного дома?

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

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

Этот контейнерный дом стоимостью 135 тысяч долларов позволяет его владельцам жить без ипотеки. Фото Кармен Троессер
Каковы недостатки строительства из морских контейнеров?

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

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

Архитектор и дизайнер Бен Уеда перепрофилировал три транспортных контейнера в простой и свежий комплекс Joshua Tree. Фото Брэндона Акино / Goal Zero
Являются ли дома из морских контейнеров более экологичными, чем традиционные дома?

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

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

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

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

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

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

Стоимость покупки самого контейнера может варьироваться от 1400 долларов за небольшие контейнеры до 6000 долларов за новый 40-футовый контейнер большего размера.Новые контейнеры будут стоить дороже, чем старые.

Транспортный контейнер поставляется с плоской металлической крышей, внешними стенами и металлическим каркасом, который можно использовать в качестве фундамента - эти элементы часто называют экономией средств. Но вам все равно придется потратиться на транспортировку контейнера к вам, изоляцию и внутреннюю отделку.

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

Если вам нужен уже построенный дом из морских контейнеров, они могут быть доступны по цене от 33 000 долларов за самые маленькие, самые базовые единицы.

Компания Alternative Living Spaces, создатели этого дома-контейнера, позволяет клиентам выбирать все, от цвета краски до отделки. Предоставлено альтернативным жилым пространством
Быстрее ли строить дома из морских контейнеров?

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

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

советов по экономии для контейнерных домов

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

В недавней статье мы обсуждали самые дешевые дома из когда-либо построенных морских контейнеров.

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

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

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

Планируйте, планируйте и еще раз планируйте

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

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

В планировании есть два ключевых элемента.

  1. Определите свой бюджет. Решите, сколько денег вам нужно потратить на постройку здания.
  2. Решите, что именно вы хотите построить. Сколько комнат будет в вашем доме? Сколько историй в нем будет? Будете ли вы строить из новых или подержанных транспортных контейнеров?

Не совершайте простых ошибок

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

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

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

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

Какие контейнеры самые дешевые?

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

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

Нет жестких правил, когда дело доходит до того, какой тип покупать, но вот некоторые моменты, о которых стоит подумать.

  1. Покупайте подержанные транспортные контейнеры только в том случае, если вы видите их перед покупкой.
  2. Какой бы тип емкости вы ни купили (новую или б / у), убедитесь, что все они одной марки. Производители используют несколько разные допуски измерения при изготовлении контейнеров, поэтому строительство контейнеров разных марок иногда может быть проблематичным.
  3. Самые экономичные контейнеры - это одноразовые контейнеры. Это транспортные контейнеры, которые использовались только один раз.Это не контейнеры, которые годами находились в море!

Выбор, куда потратить деньги

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

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

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

Еще один способ сэкономить деньги с течением времени - это выбрать строительные материалы, не требующие особого ухода. Хороший пример - металлическая кровля. После установки они требуют очень небольшого обслуживания.

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

Отслеживайте каждый потраченный доллар

И когда мы говорим «каждый доллар», мы имеем в виду все до единой!

Мы часто слышим подобные истории от строителей: «Во время строительства деньги просто летели с моего банковского счета со всех сторон. Вскоре я понял, что у меня заканчиваются деньги ».

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

Составьте план. Придерживаться плана. Запишите все расходы, чтобы убедиться, что вы уложены в бюджет. Таким образом, вы сможете определить любые проблемные области и внести необходимые коррективы, чтобы не сбиться с пути.

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

Утилизировать местные материалы

Последний совет - попробуйте использовать утилизированные материалы. Вы будете поражены тем, что люди дарят бесплатно!

Как говорится, «для одного мусор, для другого - сокровище».А при повторном использовании этих строительных материалов вы получаете преимущество «более экологичного» строительства.

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

Сводка

Решение построить здание из транспортных контейнеров может быть отличным способом сэкономить деньги.

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

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

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

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

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

.

LEAVE A REPLY

Ваш адрес email не будет опубликован. Обязательные поля помечены *