Docker kontejnery jsou skvělým konceptem, jak propojovat svět distribucí. Jedná se o ideální nástroj pro práci se systémem CentOS na Fedoře, s Fedorou na Red Hat Enterprise Linuxu nebo naopak. Díky tomu nemusíme omezovat naši práci s Dockerem na Fedoře jen na obrazy postavené nad Fedora base obrazem. Naopak můžeme bez problémů vytvářet a spouštět obrazy postavené i nad zmíněnými systémy CentOS nebo RHEL.
Nicméně je třeba si uvědomit, že při práci s Docker kontejnery záleží především na obsahu a je velmi důležité obsahu věřit. Kontejnery samotné jsou sice ochraňovány (chcete-li izolovány od hostitelského stroje a samy od sebe navzájem) pomocí cgroups a SELinuxu, ale kontejnery s hostitelským systémem stále sdílí kernel. To znamená, že potenciální bezpečností díra v kernelu může dovolit útočníkovi dostat se z izolace a ovlivnit tak ostatní kontejnery, včetně hostitelského stroje.
Více informací o bezpečnosti kontejnerů můžete najít na Docker Security a Project Atomic article. Zkrátka, neměli byste spouštět neznámé kontejnery, a to už vůbec ne na produkčním stroji.
Docker obrazy postavené nad Fedorou
Všechny oficiální obrazy postavené nad Fedorou a udržované maintainery Fedory jsou k dispozici v oficiálním Fedora repozitáři na Docker hubu.
Základní obrazy ve jmenném prostoru fedora/ používají tag fedora:latest pro rawhide a fedora:22 tag pro konkrétní verzi obrazu.
Tzn. pro získání například Fedora 22 základního obrazu a spuštění Bashe v takovém kontejneru, spusťte:
$ sudo docker pull fedora:22 $ sudo docker run --rm -ti fedora:22 bash
Na Docker Hubu je k dispozici také několik obrazů postavených nad tímto základním Fedora obrazu, tzv. layered obrazy (vrstvené). Jejich zdroj je k dispozici ve Fedora Dockerfiles repozitáři a obrazy jsou k dispozici taktéž ve jmenném prostoru fedora/ na Docker Hubu.
Například pro získání databázového obrazu pro MariaDB, spusťte:
$ sudo docker pull fedora/mariadb $ sudo docker run fedora/mariadb
Seznam dostupných obrazů je možné najít na Docker Hubu pod jmenným prostorem fedora.
CentOS obrazy
Komunita okolo operačního systému CentOS je v případě Docker technologie také aktivní a vzhledem k zaměření tohoto systému na stabilní řešení, jsou i obrazu poskytované CentOS komunitou zárukou stabilního řešení. Seznam obrazů oficiálně poskytovaných CentOS komunitou můžete najít ve jmenném prostoru CentOS a základní obrazje k dispozici v oficiální knihovně na Docker Hubu.
Stáhnout CentOS 7 obraz a spustit v něm příkaz můžeme takto:
$ sudo docker pull centos:7 $ sudo docker run --rm -ti centos:7 bash
Stáhnout CentOS 6 obraz a spustit v něm příkaz můžeme potom obdobně:
$ sudo docker pull centos:6 $ sudo docker run --rm -ti centos:6 bash
Zároveň, jak je v Docker světě zvykem, je vždy k dispozici centos:latest tag pro nejnovější stavilní release.
Obrazy postavené nad Software Collections
Oficiální CentOS repozitář obsahuje mimo jiné i obrazy, které jsou funkčně totožné s obrazy poskytovanými Red Hat vývojáři ve jmenném prostoru rhscl/ (ty jsou ale dostupné ve vlastním registru registry.access.redhat.com).
Tyto obrazy jsou postavené na balících vytvořených pomocí technologie Software Collections. Některé z nich (starší verze jednotlivých démonů nebo platforem) jsou vydávány pod organizací (nebo checete-li jmenným prostorem) OpenShift. Novější verze démonů a platforem jsou potom k dispozici pod organizací CentOS.
Některé z nich (zejména obrazy postavené nad platfomami dynamických jazyků) používají pro přenos koncové aplikace a vytvoření koncového obrazu nástroj Source-To-Image.
Následuje seznam obrazů postavených nad balíky typu Software Collections:
Název obrazu | Popis |
---|---|
centos/httpd-24-centos7 | Apache HTTP 2.4 Server |
centos/mariadb-100-centos7 | MariaDB 10.0 SQL databázový server |
centos/mongodb-26-centos7 | MongoDB 2.6 NoSQL databázový server |
centos/mysql-56-centos7 | MySQL 5.6 SQL databázový server |
centos/postgresql-94-centos7 | PostgreSQL 9.4 SQL databázový server |
centos/nginx-16-centos7 | Nginx 1.6 server a reverzní proxy server |
centos/nodejs-010-centos7 | NodeJS 0.10 platforma pro balení a spouštění aplikací |
centos/passenger-40-centos7 | Phusion Passenger® 4.0 web server a aplikační server |
centos/perl-520-centos7 | Perl 5.20 platforma pro balení a spouštění aplikací |
centos/php-56-centos7 | PHP 5.6 platforma pro balení a spouštění aplikací |
centos/python-27-centos7 | Python 2.7 platforma pro balení a spouštění aplikací |
centos/python-34-centos7 | Python 3.4 platforma pro balení a spouštění aplikací |
centos/ror-41-centos7 | Ruby on Rails 4.1 platforma pro balení a spouštění aplikací |
centos/ruby-22-centos7 | Ruby 2.2 platforma pro balení a spouštění aplikací |
openshift/mysql-55-centos7 | MySQL 5.5 SQL databázový server |
openshift/postgresql-92-centos7 | PostgreSQL 9.4 SQL databázový server |
openshift/mongodb-24-centos7 | MongoDB 2.4 NoSQL databázový server |
openshift/ruby-20-centos7 | Ruby 2.0 platforma pro balení a spouštění aplikací |
openshift/python-33-centos7 | Python 3.3 platforma pro balení a spouštění aplikací |
openshift/nodejs-010-centos7 | NodeJS 0.10 platforma pro balení a spouštění aplikací |
openshift/perl-516-centos7 | Perl 5.16 platforma pro balení a spouštění aplikací |
Jak tyto obrazy použít, najdete v README souborech dostupných na githubu.
22. 2. 2016 at 11:45
Jak mohu pustit docker tak, aby uvnitr se uzivatel tvaril jako root a navenek jako ja (uid 1000)? Do dockeru pripojuji svuj vyvojovy adresar a kdyz to pustim normalne, bezi to jako root a mne to v adresari vytvari take rootem vlastnene soubory (*.pyc).
Kdyz to pustim jako -u 1000:1000, tak uz neni problem s modifikaci vyvojovych souboru, ale uzivatel zase nemuze zapisovat do adresary s logy. Sice ty adresare muzu vytvorit s danym uid:guid, ale pak je to dost neprenositelne…
Idealne to ma ve vnitr bezet cele jako root a modifikovat si to veci dle libosti, ale na namapovane volumy by to mel sahat s pravy uzivatele ktery to pustil.
22. 2. 2016 at 13:57
Docker 1.10 poprvé (v experimentálním módu) podporuje user namespaces, které by měly umožňovat právě toto — oddělit uživatele vevnitř kontejneru a na hostovi.
Starší verze nic takového vůbec neumožňují a je potřeba se spokojit se shodným uživatelem na hostovi a uvnitř kontejneru; jednotlivé use casy lze řešit například nastavením umask nebo vytvořit kontejner tak, že může běžet jako ne-root.
Zatím je na internetu jen málo ukázek, jak user namepsaces používat, něco málo například zde: https://integratedcode.us/2015/10/13/user-namespaces-have-arrived-in-docker/