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

Jak zkopírovat soubory pomocí Docker cp do vašeho kontejneru Docker

Pokud potřebujete zkopírovat soubory z hostitele Dockeru do svého kontejneru Docker, tento návod je pro vás.

V tomto tutoriálu se naučíte kopírovat soubory z hostitele Dockeru do kontejneru Docker pomocí různých přístupů.

Jdeme na to!

Předpoklady

Pokud chcete postupovat krok za krokem, ujistěte se, že máte následující:

  • Hostitel systému Linux. Tento tutoriál používá Ubuntu 18.04.5 LTS.
  • Docker nainstalovaný na hostiteli Linux. Tento tutoriál používá Docker v19.03.11. Verzi Dockeru můžete potvrdit spuštěním docker version .
  • Jakýkoli stažený a dostupný obrázek Dockeru. Tento výukový program používá nejnovější obraz NGINX Docker dostupný na Docker Hub.

Kopírování souborů pomocí docker cp Příkaz

Chcete-li spustit tento tutoriál, naučíte se kopírovat soubory z hostitele Docker do kontejnerů pomocí docker cp příkaz. docker cp příkaz zkopíruje soubory nebo složky mezi kontejnerem a místním souborovým systémem vašeho hostitele Docker a naopak.

Pojďme se na příkladu naučit používat příkaz Docker cp.

1. Otevřete terminál na místním počítači.

2. Vytvořte soubor s názvem mujsoubor.txt pomocí touch příkaz. Soubor myfile.txt bude zkopírován z hostitele dockeru do kontejneru.

touch myfile.txt

3. Spusťte docker run příkaz. Níže uvedené spuštění dockeru vytvoří nový kontejner na pozadí. Níže uvedený příkaz obsahuje tři parametry popsané níže:

  • d příznak, který spouští kontejner na pozadí a udržuje jej při životě, dokud není smazán.
  • p flag publikuje port kontejneru 80 k hostiteli na portu 80 .
  • nginx bude obrázek, který bude použit ke spuštění kontejneru.
sudo docker run -d -p 80:80 nginx

4. Ověřte, zda je kontejner Docker úspěšně vytvořen pomocí docker ps příkaz. Po spuštění docker ps příkazu, měli byste vidět novou hodnotu vygenerovanou pod atributem CONTAINER ID (v níže uvedeném případě ccae4670f030 ) pomocí obrázku NGINX, který potvrzuje, že byl kontejner úspěšně vytvořen.

sudo docker ps

Před spuštěním příkazu Docker cp je syntaxe příkazu Docker cp:

  • CONTAINER: SRC_PATH určuje zdrojovou cestu kontejneru.
  • DEST_PATH je cílová cesta na hostiteli.
  • CONTAINER: DEST_PATH je cílová cesta na kontejneru.

Kromě toho můžete také přidat options s níže uvedenými parametry v příkazu takto:

  • Pomocí archivu nebo – Zkopíruje všechna uživatelská oprávnění a oprávnění primární skupiny k souborům a složkám.
  • Použití L – Zadáním možnosti L umožníte zkopírovat jakýkoli symbolický odkaz ve zdrojové cestě do cílové cesty.
# Syntax to Copy from Container to Docker Host  
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# Syntax to Copy from Docker Host to Container  
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5. Dále spusťte docker cp příkaz. docker cp příkaz zkopíruje myfile.txt které jste dříve vytvořili do kontejnerů /usr/share adresář. ccae4670f030 je ID kontejneru, ke kterému je soubor myfile.txt bude zkopírován.

sudo docker cp myfile.txt ccae4670f030:/usr/share

6. Nakonec SSH do běžícího kontejneru spuštěním docker exec příkaz s /bin/bash , který se používá jako výchozí prostředí pro přihlášení uživatele do systému Linux.

  • i příznak označující, že chcete otevřít interaktivní relaci SSH pro kontejner. i flag neuzavře relaci SSH, i když kontejner není připojen.
  • t flag přiděluje pseudo-TTY, který se hodně používá k interaktivnímu spouštění příkazů.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

Níže uvidíte, že jste nyní připojeni k shellu kontejneru, když spustíte docker exec .

7. Po přihlášení do kontejneru ověřte, zda mujsoubor.txt byl zkopírován do kontejneru pomocí příkazu ls.

  • ls je příkaz pro výpis počítačových souborů v operačních systémech Unix a Unixu.
  • grep vyhledá všechny soubory nebo složky počínaje řetězcem my uvnitř usr/share adresář.

Kopírování souborů pomocí DockerFile

V předchozí části jste se naučili, jak zkopírovat soubory do kontejneru spuštěním příkazu Docker cp. Co když potřebujete zkopírovat více souborů najednou? Spouštění více příkazů se samozřejmě stává režií! Chcete-li vyřešit spouštění více příkazů cp, proč nezkusit zkopírovat soubory nebo složky do kontejnerů pomocí Dockerfile s COPY příkazy?

Nasazení kontejneru a kopírování souborů/složek pomocí Dockerfile vám umožní odstranit kroky ručního kopírování, které jste provedli v předchozí části. Dockerfile je textový dokument, který obsahuje všechny příkazy, které může uživatel zavolat na příkazovém řádku k sestavení obrázku.

Vytvořme Dockerfile, spusťte z něj kontejner a nakonec zkopírujte soubory.

1. Vytvořte složku s názvem ~/host-to-container-copy-demo, poté změňte (cd ) pracovní adresář do této složky. Tato složka bude obsahovat všechny soubory, které vytvoříte v této ukázce.

mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo

2. Nyní vytvořte dva textové soubory s názvem myfile1.tx ta mujsoubor2.txt , zkopírujte je a vložte do souborů a uložte je do ~/host-to-container-copy-demo adresář.

# myfile1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# myfile2.txt
Hello This is my second file !
This is file will be copied in /tmp directory from Docker host to Docker Container.

3. Vytvořte další soubor, zkopírujte/vložte níže uvedenou konfiguraci a uložte soubor jako Dockerfile uvnitř ~/host-to-container-copy-demo adresář. Po dokončení použije Docker tento soubor Docker ke spuštění všech příkazů nezbytných k vytvoření nového obrazu Dockeru nad jakýmkoli základním obrazem.

Soubor DockerFile níže obsahuje různé kroky/pokyny, které vytvoří nový kontejner:

  • FROM Instrukce FROM inicializuje novou fázi sestavení a nastaví Základní obraz pro následující instrukce.
  • COPY Příkaz COPY zkopíruje soubor z hostitelského počítače (hostitel Docker) do kontejneru.
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)
# Using the base image ubuntu: latest
FROM ubuntu:latest
# Copying myfile1.txt to the containers /usr/share directory
COPY myfile1.txt /usr/share
# Copying myfile2.txt to the containers /tmp directory
COPY myfile2.txt /tmp

4. Ověřte všechny požadované soubory pro vytvoření nového obrazu spuštěním tree příkaz. Měli byste vidět Dockerfile, myfile1.txt a myfile2.txt pod ~/host-to-container-copy-demo adresář.

5. Dále vytvořte obraz spuštěním docker build příkaz. t příznak se používá k označení obrázku updated_ubuntu_image s latest a. umožňuje dockeru vybrat všechny potřebné soubory z aktuálního pracovního adresáře.

sudo docker build -t updated_ubuntu_image:latest .

6. Nyní ověřte nově vytvořený obrázek updated_ubuntu_image spuštěním docker images příkaz. Všimněte si ÚLOŽIŠTĚ atribut. Tento atribut je značka vytvořená pomocí -t příznak v předchozím kroku.

sudo docker images

7. Nakonec spusťte kontejner dockeru pomocí nově vytvořeného obrazu spuštěním docker run příkaz. -it flag instruuje Docker, aby přidělil pseudoterminál připojený k standardnímu konektoru kontejneru. bash poskytuje výchozí shell pro přihlášení uživatele do systému Linux.

sudo docker run -it updated_ubuntu_image bash

Níže uvidíte, že se nyní nacházíte v prostředí Bash kontejneru Docker.

8. Dále ověřte, zda byly soubory úspěšně zkopírovány do kontejneru v adresářích /tmp a /usr/share spuštěním ls příkaz.

Připojení úložného svazku a přístup k souborům pomocí Docker Volume Příkaz

Doposud jste se naučili, jak kopírovat soubory z hostitele do kontejneru pomocí dvou různých přístupů pomocí docker cp příkaz a DockerFile . Tentokrát se naučíme, jak snadno sdílet systémy souborů mezi hostitelem a kontejnery pomocí docker volume příkaz.

Za předpokladu, že jste stále přihlášeni k terminálu:

1. Vytvořte svazek na hostiteli Docker spuštěním docker volume create příkaz. Níže uvedený příkaz vytvoří svazek s názvem my-vol . sudo docker volume create my-vol

sudo docker volume create my-vol

2. Ověřte, že byl svazek úspěšně vytvořen, spuštěním docker volume ls příkaz. Příkaz docker volume ls vypíše svazek. Po spuštění docker volume ls příkazu, uvidíte my-vol v atributu VOLUME NAME, který potvrzuje, že byl svazek úspěšně vytvořen.

sudo docker volume ls

3. Dále spusťte kontejner pomocí docker run příkaz.

  • Kontejner s názvem volume_testing používá nginx: latest obrázek.
  • d flag spouští kontejner na pozadí a udržuje jej při životě, dokud není smazán.
  • v flag připojí svazek my-vol vytvořené na hostiteli Docker do cíle kontejneru /app adresář.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest

4. Ověřte, zda je dříve vytvořený svazek my-vol správně připojen ke kontejneru pomocí docker inspect příkaz. Příkaz Docker inspect poskytuje informace o kontejneru. Po spuštění docker inspect příkaz zobrazí všechny podrobnosti o zadaném kontejneru (volume_testing ) podrobnosti, včetně podrobností o montáži, jak je uvedeno níže.

sudo docker inspect volume_testing

Níže snímek snímku potvrzuje, že svazek (my-vol ), který jste vytvořili na hostiteli, je úspěšně připojen pomocí /app kontejneru adresář.

Závěr

V tomto tutoriálu jste se naučili různé způsoby kopírování souborů nebo složek z hostitele Dockeru do kontejnerů, jako je použití příkazu Docker cp, příkazů Docker volume a Dockerfile.

Jaký přístup tedy použijete při kopírování dat z hostitele do kontejnerů Docker?


Docker
  1. Jak nainstalovat Jenkins pomocí Docker

  2. Jak nasadit kontejner nginx s Dockerem na Linode

  3. Jak spustit MySQL v kontejneru Docker

  1. Jak nainstalovat WordPress s Dockerem na Ubuntu

  2. Jak SSH do kontejneru Docker

  3. Jak přiřadit statickou IP ke kontejneru Docker

  1. Jak spustit Jenkins Container jako službu Systemd pomocí Dockeru

  2. Learning Docker:Jak vytvořit kontejner Docker

  3. Jak nainstalovat Nextcloud s Dockerem na váš Linux Server