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

Jak SSH do kontejnerů Docker [Krok za krokem]

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 Definuje ubuntu: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áči 22 .
# 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 NetworkSettingsNetworksIPAddress .

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?


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

  2. Jak sdílet data mezi kontejnery Docker

  3. Jak vypsat Docker kontejnery

  1. Jak SSH do kontejneru Docker

  2. Jak připojit hostitelský adresář do kontejneru Docker

  3. Jak zálohovat a obnovovat kontejnery Docker

  1. Jak vypsat / spustit / zastavit kontejnery Docker

  2. Jak vložit SSH do běžícího kontejneru Docker a spustit příkazy

  3. Jak pozastavit a obnovit kontejnery Docker