GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak vytvořit obrázek dockeru z běžícího kontejneru

Docker kontejnery jsou obecně pomíjivé instance aplikací, které postrádají vnitřní stav. Toto je osvědčený způsob, jak s nimi zacházet, který vám umožní kdykoli zastavit nebo restartovat kontejnery.

Někdy jsou však úpravy souborového systému kontejneru nevyhnutelné. Možná zkoušíte software a chcete snímek, ke kterému se později vrátíte. Dalším případem použití mohou být situace, kdy software uvnitř kontejneru přestal fungovat a chcete si uložit repliku, kterou můžete v budoucnu ladit.

Zde je návod, jak vytvořit nový obrázek Docker z existujícího kontejneru. Poté budete moci začít další kontejner z toho obrazu, který bude naplněn souborovým systémem z prvního.

Potvrzení kontejnerů

docker commit příkaz se používá k odebrání kontejneru a vytvoření nového obrázku z něj. Funguje se zastavenými nebo běžícími kontejnery.

Základní syntaxe je následující:

docker commit example-container example-image:latest

Tím se vytvoří obrázek z kontejneru s názvem example-container . Pokud chcete, můžete kontejner identifikovat také podle ID. Obě informace jsou dostupné z výstupu docker ps který uvádí všechny kontejnery na vašem hostiteli.

Výslednému obrázku je přiřazen tag daný jako druhý parametr příkazu. Toto je example-image:latest ve výše uvedeném příkladu. Stejně jako při běžné operaci označování obrázků nový obrázek nahradí referenci značky, pokud již existuje.

Nyní můžete použít svůj obraz k obnovení souborového systému z example-container do nové instance kontejneru:

docker run -d example-image:latest

Obsah souborového systému bude odpovídat example-container kontejneru v době docker commit Byl proveden příkaz Existuje jedno důležité upozornění:obsah připojených svazků nebude zahrnut, takže jejich místa připojení budou ve vytvořeném obrazu kontejneru prázdná. Chcete-li spustit nový kontejner s nedotčenými daty objemu, použijte -v příznak pro opětovné připojení svazků z prvního kontejneru, když spustíte druhou instanci pomocí docker run .

Dalším pozoruhodným problémem je, jak Docker zpracovává potvrzení běžících kontejnerů. Z velké části by to mělo fungovat bez problémů, ale výchozím nastavením je pozastavení cílového kontejneru před vytvořením odevzdání. Všechny procesy v kontejneru budou pozastaveny a poté obnoveny po dokončení vytváření obrázku. To zlepšuje konzistenci dat v novém obrazu, ale kontejner je dočasně nedostupný. Toto chování můžete zakázat přidáním --pause false s vaším docker commit příkaz.

Přidávání zpráv pro potvrzení

docker commit příkaz podporuje zprávy odevzdání podobným způsobem jako software pro správu verzí, jako je Git. Přidání zprávy při vytváření obrázku z kontejneru vám umožní zdokumentovat, co se změnilo, a důvod vašeho odevzdání.

Použijte --message nebo -m příznak pro použití zprávy odevzdání:

docker commit -m "Example commit" example-container example-image:latest

Můžete také přidat informace o autorství pomocí vyhrazené vlajky. Zadejte řetězec ve společném First Name <[email protected]> formátovat na --author nebo -a vlajka. Bude uložena spolu se zprávou odevzdání.

docker commit -a "Example Author <[email protected]>" -m "Example commit" example-container example-image:latest

Při použití docker history se zobrazují zprávy potvrzení příkaz pro zobrazení vrstev v obrázku. Zobrazí se v COMMENT sloupec zcela vpravo.

Dalším způsobem přístupu k těmto informacím je použití docker inspect v tandemu s grep extrahovat hodnoty autorství a komentářů z reprezentace JSON obrázku:

docker inspect <image-id> | grep 'Created|Author|Comment'

Zobrazí se data spojená s nejvyšší vrstvou v obrázku.

Změna pokynů pro Dockerfile

Potvrzení obrázku vám dává možnost zmutovat některé jeho instrukce Dockerfile. V novém obrázku můžete přepsat následující hodnoty:

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

Pro nastavení instrukce použijte --change nebo -c příznak:

docker commit --change 'ENTRYPOINT ["sh"]' example-container example-image:latest

Příznak můžete opakovat tolikrát, kolikrát je potřeba, abyste použili všechny zamýšlené změny.

Podporovány jsou pouze instrukce, které ovlivňují nejvyšší vrstvu souborového systému. Potvrzený obrázek nelze plynule rozšířit o nové vrstvy pomocí pokynů, jako je RUN a COPY . Můžete však vzít výsledek potvrzení a napsat nový soubor Docker, který v případě potřeby přidá nový obsah:

# Created via `docker commit`
FROM example-image:latest
RUN apt install example-package

Pokud změníte instrukce Dockerfile v době odevzdání, stojí za to přidat zprávu odevzdání, která vysvětluje, co upravujete a proč. To pomůže komukoli dalšímu s přístupem k obrázku pochopit jakékoli rozdíly v chování ve srovnání s kontejnerem, ze kterého byl vytvořen.

Přehled

Docker obrazy jsou obvykle sestaveny z Dockerfiles a používají se ke spuštění jednorázových kontejnerů. Změny stavu souborového systému kontejneru se provádějí přebudováním bitové kopie, zničením stávajícího kontejneru a spuštěním nového. V ideálním světě kontejnery nemají žádný vnitřní stav, ale v praxi to není vždy pravda.

Potvrzení kontejneru vám poskytuje způsob, jak v budoucnu obnovit jeho aktuální souborový systém. Závazky jsou užitečné pro vytváření replik problematických kontejnerů, takže můžete ladit v samostatném prostředí a zároveň si zachovat přístup k dříve vygenerovaným protokolům a dočasným souborům.

Přestože se odevzdání kontejneru často podobá snímkům virtuálních počítačů, není to úplně totéž. Virtuální počítače řídí virtuální hardware a stav tohoto hardwaru bude přítomen ve snímku. Docker kontejnery jsou jen sadou procesů běžících na hostiteli; potvrzení je nový obrázek Dockeru, který představuje systém souborů kontejneru ale nutně postrádá jakákoli data o stavu procesů, kernelu a vašem hardwaru.


Docker
  1. Jak vytvářet, zobrazovat a mazat kontejnery Docker v systému Linux

  2. Extrahovat soubor z obrázku Dockeru?

  3. Jak spustit příkaz na spuštěném kontejneru Docker

  1. Jak se odpojit od dockerového kontejneru bez zastavení

  2. Jak vytvořit vlastní obrázek z kontejneru Docker

  3. Jak vytvořit Docker Image z kontejneru a Dockerfile

  1. Jak vytvořit MySQL Docker Container pro testování

  2. Jak získat přístup k síťovému jmennému prostoru Docker Container z hostitele

  3. Který operační systém běží v mém kontejneru Docker?