Docker

**Docker** — праграмнае забеспячэнне для аўтаматызацыі разгортвання і кіравання праграмамі ў асяроддзях з падтрымкай кантэйнерызацыі. Дазваляе «запакаваць» праграму з усім яе акружэннем і залежнасцямі(?) ў кантэйнер, які можа быць разгорнуты на любой Linux-сістэме з падтрымкай кантрольных груп у ядры, а таксама дае набор каманд для кіравання гэтымі кантэйнерамі. Першапачаткова Docker карыстаўся магчымасцямі LXC, а з 2015 года пачаў выкарыстоўваць уласную бібліятэку, якая абстрагуе віртуалізацыйныя магчымасці ядра Linux — **libcontainer**. Са з’яўленнем Open Container Initiative пачаўся пераход ад маналітнай да модульнай архітэктуры.

Распрацоўваецца і падтрымліваецца аднайменнай кампаніяй-стартапам, распаўсюджваецца ў двух рэдакцыях — грамадскай () па ліцэнзіі Apache 2.0 і для арганізацый () па прапрыетарнай ліцэнзіі. Напісаны на мове Go.

## Гісторыя 
Праект пачаты як унутраная ўласная распрацоўка кампаніі dotCloud, заснаванай Саламонам Хайксам (*Solomon Hykes*) у 2008 годзе з мэтай стварэння публічнай PaaS- платформы з падтрымкай розных моў праграмавання. Разам з Хайксам у першапачатковай распрацоўцы значны ўдзел прынялі інжынеры dotCloud Андрэа Лудзардзі (*Andrea Luzzardi*) і Франсуа-Ксаўе Бурле (*François-Xavier Bourlet*).

У сакавіку 2013 года код Docker быў апублікаваны пад ліцэнзіяй Apache 2.0. У чэрвені 2013 года генеральным дырэктарам у dotCloud запрошаны , які раней кіраваў фірмай  (распрацоўшчык тэхналогіі размеркаванага захоўвання GlusterFS і паглынутай за $136 млн Red Hat у 2011 годзе) . У кастрычніку 2013 года, каб падкрэсліць зрух фокусу да новай ключавой тэхналогіі, dotCloud была перайменавана ў Docker (пры гэтым PaaS-платформа захавана пад ранейшай назвай — dotCloud).

У кастрычніку 2013 года быў выпушчаны рэліз Havana тыражаваную IaaS-платформы OpenStack, у якім рэалізавана падтрымка Docker (як драйвер для OpenStack Nova). З лістапада 2013 года частковая падтрымка Docker уключана ў дыстрыбутыў Red Hat Enterprise Linux версіі 6.5 і поўная — у 20-ю версію дыстрыбутыва Fedora, раней былі дасягнуты пагадненні з Red Hat аб уключэнні з 2014 года Docker у тыражаваную PaaS-платформу OpenShi. У снежні 2013 года абвешчана аб падтрымцы разгортвання Docker-кантэйнераў у асяроддзі  .

З 2014 года вядзецца праца па ўключэнні падтрымкі Docker у асяроддзе кіравання фрэймворка размеркаваных праграм Hadoop. Па выніках тэсціравання варыянтаў платформы віртуалізацыі для Hadoop, праведзенага ў маі 2014 года, Docker паказаў на асноўных аперацыях (па масавым стварэнні, перазапуску і знішчэнні віртуальных вузлоў) істотна больш высокую прадукцыйнасць, чым KVM. На тэсце масавага стварэння віртуальных вылічальных вузлоў прырост спажывання працэсарных рэсурсаў у Docker зафіксаваны ў 26 разоў ніжэйшы, чым у KVM, а прырост спажывання рэсурсаў аператыўнай памяці — утрая ніжэйшы.

З 2017 года дадаткова да рэдакцыі, што свабодна распаўсюджваецца пад ліцэнзіяй Apache 2.0, выпускаецца рэдакцыя для арганізацый, якая прадаецца па цэнах ад $750 да $2 тыс. у год на вузел у залежнасці ад даступных функцый]]
Праграмнае забеспячэнне функцыянуе ў асяроддзі Linux з ядром, якое падтрымлівае кантрольныя групы і ізаляцыю прастор імёнаў (*namespaces*). Існуюць зборкі толькі для платформаў x86-64 і ARM. Пачынаючы з версіі 1.6 2015 года магчыма выкарыстанне ў аперацыйных сістэмах сямейства Windows.

Для эканоміі прасторы захоўвання праект выкарыстоўвае файлавую сістэму Aufs з падтрымкай тэхналогіі каскадна-аб’яднанага манціравання: кантэйнеры выкарыстоўваюць вобраз базавай аперацыйнай сістэмы, а змены запісваюцца ў асобную вобласць. Таксама падтрымліваецца размяшчэнне кантэйнераў у файлавай сістэме Btrfs з уключаным рэжымам капіявання пры запісе.

У склад праграмных сродкаў уваходзіць дэман — сервер кантэйнераў (запускаецца камандай docker -d), кліенцкія сродкі, якія дазваляюць з інтэрфейсу каманднага радка кіраваць вобразамі і кантэйнерамі, а таксама API, якое дазваляе ў стылі REST кіраваць кантэйнерамі праграмна.

Дэман забяспечвае поўную ізаляцыю запускаемых у вузле кантэйнераў на ўзроўні файлавай сістэмы (у кожнага кантэйнера ўласная каранёвая файлавая сістэма), на ўзроўні працэсаў (працэсы маюць доступ толькі да ўласнай файлавай сістэмы кантэйнера, а рэсурсы падзеленыя сродкамі libcontainer), на ўзроўні сеткі (кожны кантэйнер мае доступ толькі да прывязанай да яго сеткавай прасторы імёнаў і адпаведным віртуальным сеткавым інтэрфейсам).

Набор кліенцкіх сродкаў дазваляе запускаць працэсы ў новых кантэйнерах (docker run), спыняць і запускаць кантэйнеры (docker stop і docker start), прыпыняць і аднаўляць працэсы ў кантэйнерах (docker pause і docker unpause). Серыя каманд дазваляе ажыццяўляць маніторынг запушчаных працэсаў (docker ps па аналогіі з ps у Unix-сістэмах, docker top па аналогіі з top і іншыя). Новыя вобразы магчыма ствараць з адмысловага сцэнарнага файла (docker build, файл сцэнарыя носіць назву Dockerfile), магчыма запісаць усе змены, зробленыя ў кантэйнеры, у новы вобраз (docker commit). Усе каманды могуць працаваць як з docker-дэманам лакальнай сістэмы, так і з любым серверам Docker, даступным па сетцы. Акрамя таго, у інтэрфейсе каманднага радка ўбудаваны магчымасці па ўзаемадзеянні з публічным рэпазіторыям Docker Hub, у якім размешчаны папярэдне сабраныя вобразы праграм. Каманда docker search дазваляе ажыццявіць пошук вобразаў сярод размешчаных у ім, вобразы можна спампоўваць у лакальную сістэму (docker pull), магчыма таксама адправіць лакальна сабраныя вобразы ў Docker Hub (docker push).

Таксама Docker мае пакетны менеджар Docker Compose, які дазваляе апісваць і запускаць шматкантэйнерныя праграмы; канфігурацыйныя файлы для яго апісваюцца на мове YAML.

## Спасылкі 
* Праект Docker на GitHub

Катэгорыя:Праграмнае забеспячэнне для Linux
Катэгорыя:Праграмы для кантэйнерызацыі