Docker | |
---|---|
![]() | |
Тып | свабоднае і адкрытае праграмнае забеспячэнне[d], механізм віртуалізацыі[d] і фармат апісання кантэйнераў[d] |
Аўтар | Саламон Хайкс[d] |
Распрацоўшчык | Docker, Inc.[d] |
Напісана на | Go[2] |
Аперацыйная сістэма | Linux[3], Windows[4], macOS[5] і UNIX-падобная аперацыйная сістэма |
Першы выпуск | 13 сакавіка 2013 |
Апошняя версія |
|
Ліцэнзія | прапрыетарная ліцэнзія[d] і Apache Software License 2.0[d][6][7] |
Сайт |
docker.com (англ.) docker.com/ja-jp/ (яп.) |
![]() |
Docker — праграмнае забеспячэнне для аўтаматызацыі разгортвання і кіравання праграмамі ў асяроддзях з падтрымкай кантэйнерызацыі. Дазваляе «запакаваць» праграму з усім яе акружэннем і залежнасцямі(?) ў кантэйнер, які можа быць разгорнуты на любой Linux-сістэме з падтрымкай кантрольных груп у ядры, а таксама дае набор каманд для кіравання гэтымі кантэйнерамі. Першапачаткова Docker карыстаўся магчымасцямі LXC, а з 2015 года пачаў выкарыстоўваць уласную бібліятэку, якая абстрагуе віртуалізацыйныя магчымасці ядра Linux — libcontainer. Са з’яўленнем Open Container Initiative пачаўся пераход ад маналітнай да модульнай архітэктуры.
Распрацоўваецца і падтрымліваецца аднайменнай кампаніяй-стартапам, распаўсюджваецца ў двух рэдакцыях — грамадскай (Community Edition) па ліцэнзіі Apache 2.0 і для арганізацый (Enterprise Edition) па прапрыетарнай ліцэнзіі[8]. Напісаны на мове Go.
Праект пачаты як унутраная ўласная распрацоўка кампаніі dotCloud, заснаванай Саламонам Хайксам (Solomon Hykes) у 2008 годзе з мэтай стварэння публічнай PaaS- платформы з падтрымкай розных моў праграмавання. Разам з Хайксам у першапачатковай распрацоўцы значны ўдзел прынялі інжынеры dotCloud Андрэа Лудзардзі (Andrea Luzzardi) і Франсуа-Ксаўе Бурле (François-Xavier Bourlet).
У сакавіку 2013 года код Docker быў апублікаваны пад ліцэнзіяй Apache 2.0[9]. У чэрвені 2013 года генеральным дырэктарам у dotCloud запрошаны Бэн Голуб , які раней кіраваў фірмай Gluster (распрацоўшчык тэхналогіі размеркаванага захоўвання GlusterFS і паглынутай за $136 млн Red Hat у 2011 годзе) [10]. У кастрычніку 2013 года, каб падкрэсліць зрух фокусу да новай ключавой тэхналогіі, dotCloud была перайменавана ў Docker (пры гэтым PaaS-платформа захавана пад ранейшай назвай — dotCloud).
У кастрычніку 2013 года быў выпушчаны рэліз Havana тыражаваную IaaS-платформы OpenStack, у якім рэалізавана падтрымка Docker (як драйвер для OpenStack Nova). З лістапада 2013 года частковая падтрымка Docker уключана ў дыстрыбутыў Red Hat Enterprise Linux версіі 6.5[11] і поўная — у 20-ю версію дыстрыбутыва Fedora, раней былі дасягнуты пагадненні з Red Hat аб уключэнні з 2014 года Docker у тыражаваную PaaS-платформу OpenShi[12]. У снежні 2013 года абвешчана аб падтрымцы разгортвання Docker-кантэйнераў у асяроддзі Google Compute Engine [13].
З 2014 года вядзецца праца па ўключэнні падтрымкі Docker у асяроддзе кіравання фрэймворка размеркаваных праграм Hadoop. Па выніках тэсціравання варыянтаў платформы віртуалізацыі для Hadoop, праведзенага ў маі 2014 года, Docker паказаў на асноўных аперацыях (па масавым стварэнні, перазапуску і знішчэнні віртуальных вузлоў) істотна больш высокую прадукцыйнасць, чым KVM. На тэсце масавага стварэння віртуальных вылічальных вузлоў прырост спажывання працэсарных рэсурсаў у Docker зафіксаваны ў 26 разоў ніжэйшы, чым у KVM, а прырост спажывання рэсурсаў аператыўнай памяці — утрая ніжэйшы[14].
З 2017 года дадаткова да рэдакцыі, што свабодна распаўсюджваецца пад ліцэнзіяй Apache 2.0, выпускаецца рэдакцыя для арганізацый, якая прадаецца па цэнах ад $750 да $2 тыс. у год на вузел у залежнасці ад даступных функцый[8].
Праграмнае забеспячэнне функцыянуе ў асяроддзі Linux з ядром, якое падтрымлівае кантрольныя групы і ізаляцыю прастор імёнаў (namespaces). Існуюць зборкі толькі для платформаў x86-64 і ARM[16]. Пачынаючы з версіі 1.6 2015 года магчыма выкарыстанне ў аперацыйных сістэмах сямейства Windows[17].
Для эканоміі прасторы захоўвання праект выкарыстоўвае файлавую сістэму 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 дазваляе ажыццявіць пошук вобразаў сярод размешчаных у ім[18], вобразы можна спампоўваць у лакальную сістэму (docker pull), магчыма таксама адправіць лакальна сабраныя вобразы ў Docker Hub (docker push).
Таксама Docker мае пакетны менеджар Docker Compose, які дазваляе апісваць і запускаць шматкантэйнерныя праграмы; канфігурацыйныя файлы для яго апісваюцца на мове YAML.