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 kontejneru80
k hostiteli na portu80
.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ězcemmy
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í svazekmy-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?