Když potřebujete vyřešit problémy nebo rychle nahlédnout do kontejneru Docker, SSH je skvělá volba. SSH vám umožňuje rychle se připojit k běžícímu kontejneru a zjistit, co se děje. Připojení ke kontejneru Docker však nejprve vyžaduje určité nastavení a máte několik různých možností.
V tomto tutoriálu se naučíte, jak SSH do kontejnerů Docker pomocí docker run
příkaz a Dockerfile.
Začínáme!
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.8.
Spuštění kontejneru a SSH do kontejnerů Docker pomocí docker run
docker run
příkaz je příkaz Docker, který spustí příkaz, když se poprvé objeví nový kontejner. Pomocí docker run
, můžete spustit interaktivní relaci SSH do kontejneru pomocí níže uvedených kroků.
Než začnete s touto částí, ujistěte se, že máte stažený a dostupný obraz Dockeru. Tento tutoriál používá nejnovější obraz Ubuntu Docker dostupný na Docker Hub.
Chcete-li SSH do kontejnerů Docker pomocí docker run
:
1. Otevřete terminál na místním počítači.
2. Spusťte docker run
příkaz poskytující:
name
kontejneru, který se má spustit (ubuntu_container_ssh
)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ů.- Základní obrázek pro vytvoření kontejneru (
ubuntu
).
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu
V tomto okamžiku jste SSHed do kontejneru a můžete spouštět libovolné příkazy, které chcete.
3. Dále spusťte libovolný příkaz, například touch
příkaz. Dotykový příkaz vytvoří novou složku s názvem myfolder
v tmp adresář, jak je uvedeno níže.
touch /tmp/myfolder
Nyní můžete spouštět libovolné příkazy!
Nakonec, až skončíte se spouštěním příkazů, napište exit
pro ukončení relace.
SSH do Running Docker Containers pomocí docker exec
V předchozí části jste se naučili spouštět příkazy SSH při spouštění nového kontejneru Docker. Ale co když potřebujete SSH do kontejnerů Docker, které již běží? Spustíte docker exec
příkaz.
docker exec
příkaz vytváří prostředí Bash uvnitř běžícího kontejneru a je skvělým způsobem, jak do kontejneru odesílat příkazy SSH.
Než začnete s touto částí, ujistěte se, že máte stažený a dostupný obraz Dockeru. Tento tutoriál používá nejnovější obraz NGINX Docker dostupný na Docker Hub.
Chcete-li SSH do běžícího kontejneru Docker pomocí docker exec
:
1. Otevřete terminál na místním počítači.
2. Dále spusťte docker run
příkaz ke spuštění kontejneru. Nezapomeňte zadat -d
příznak pro spuštění kontejneru na pozadí, aby zůstal naživu, dokud jej neodstraníte. Níže uvedený příkaz spustí kontejner s názvem nginx-testing
.
sudo docker run --name nginx-testing -d nginx
3. Nyní spusťte příkaz docker ps, abyste ověřili, že kontejner běží. docker ps
příkaz zobrazí seznam všech spuštěných kontejnerů běžících na hostiteli Docker.
4. Nakonec spusťte docker exec
, jak je uvedeno níže, na SSH do běžícího kontejneru s názvem nginx-testing
. V níže uvedeném úryvku kódu:
docker exec
příkaz se spustí (/bin/bash
), abyste do kontejneru dostali shell Bash.-it
flag umožňuje spouštět kontejner v interaktivním režimu, to znamená, že můžete provádět příkazy uvnitř kontejneru, zatímco je stále spuštěn.nginx-testing
je název kontejneru.
sudo docker exec -it nginx-testing /bin/bash
Nastavení OpenSSH serveru a připojení pomocí Dockerfile
Až dosud výukový program předpokládal, že se připojujete ke kontejneru, který již má nainstalovaný server SSH. Ale co když ne? Možná obraz, který používáte, ještě nemá nainstalované OpenSSH a musíte jej nejprve nakonfigurovat?
Pomocí souboru Dockerfile můžete nakonfigurovat všechny úlohy nezbytné nejen pro SSH do kontejnerů Docker, ale také pro nastavení OpenSSH serveru od začátku.
Za předpokladu, že máte stále otevřený místní terminál:
1. Volitelně vytvořte adresář pro uložení souboru Dockerfile. Tento výukový program bude používat ~/DockerFileContainerTest adresář.
2. Otevřete svůj oblíbený textový editor, zkopírujte/vložte do něj níže uvedený soubor Dockerfile a uložte soubor jako Dockerfile uvnitř ~/DockerFileContainerTest adresář. Tento soubor Dockerfile obsahuje všechny příkazy a konfigurace pro vytvoření nového obrazu Dockeru nad jakýmkoli základním obrazem a nastavení OpenSSH.
Soubor DockerFile níže obsahuje různé kroky/pokyny, které vytvoří kontejner:
FROM
– Definujeubuntu:16.04
základní obrázek k použití.RUN
– Provádí příkazy v nové vrstvě v horní části základního obrazu.CMD
– CMD vám umožňuje spouštět příkazy. Existují dva způsoby, jak se příkazy spouštějí buď přes exec, nebo pomocí formátů shellu.
EXPOSE
– Informuje Docker, že kontejner za běhu naslouchá na zadaných síťových portech. Kontejner bude vystaven v květináči22
.
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:mypassword' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
3. Dále spusťte docker build
příkaz k vytvoření obrazu Docker. t
flag označí obrázek sshd_container
a.
umožňuje Dockeru vybrat všechny potřebné soubory z aktuálního pracovního adresáře.
# Building the docker Image
sudo docker build -t sshd_tagged_image .
4. Nyní spusťte docker images
příkaz ke kontrole vytvořeného obrázku. Všimněte si ÚLOŽIŠTĚ atribut. Tento atribut je značka vytvořená pomocí -t
příznak v předchozím kroku.
5. Spusťte docker run
vytvořit a spustit kontejner z obrázku, který Dockeru řekne, aby obrázek spustil na pozadí (-d
),
Níže uvedený příkaz dává Dockeru pokyn k vytvoření a spuštění kontejneru s názvem test_sshd_container
na pozadí (-d
), pomocí sshd_tagged_image
nově vytvořený obraz, který jste vytvořili v kroku 3, a publikovat všechny porty definované v Dockerfile jako náhodné porty.
# Running the container using the newly built image
docker run -d -P --name test_sshd_container sshd_tagged_image
Po úspěšném provedení příkazu spuštění Dockeru uvidíte, že níže je vygenerováno ID kontejneru.
6. Spusťte docker port
k ověření konektivity SSH mezi hostitelem Docker a kontejnerem. docker port
seznam příkazů je mapování portů nebo konkrétní mapování pro kontejner.
sudo docker port test_sshd_container
Měli byste vidět výstup 22/TCP → 0.0.0.0:32769
, což znamená, že port kontejneru 22 je namapován na externí port 32769
.
7. Dále najděte IP adresu kontejneru. Chcete-li to provést, spusťte docker inspect
příkaz. docker inspect
příkaz se dotazuje na informace Dockeru a vykresluje výsledky v poli JSON pomocí format
parametr.
Zobrazí se format
argument parametru níže používá range
Chcete-li zjistit IP adresu kontejneru, zkontrolujte NetworkSettings
→Networks
→ IPAddress
.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_sshd_container
8. Konečně, teď, když máte IP adresu pro SSH, zkuste SSH do kontejneru a mělo by to fungovat!
ssh [email protected]
Závěr
Nyní ukážete, že znáte několik způsobů, jak SSH do kontejneru Docker pomocí několika různých přístupů. Pomocí jednoho z těchto přístupů byste měli být schopni odstraňovat problémy a spravovat své kontejnery.
S těmito nově získanými znalostmi, jak nyní plánujete SSH do vašeho kontejneru?