GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

DockerコンテナにSSHで接続する方法[ステップバイステップ]

トラブルシューティングを行う必要がある場合、またはDockerコンテナーを簡単に確認する必要がある場合は、SSHが最適なオプションです。 SSHを使用すると、実行中のコンテナにすばやく接続して、何が起こっているかを確認できます。ただし、Dockerコンテナーに接続するには、最初にいくつかのセットアップが必要であり、いくつかの異なるオプションがあります。

このチュートリアルでは、 docker runを使用してDockerコンテナにSSHで接続する方法を学習します。 コマンドとDockerfile。

始めましょう!

前提条件

ステップバイステップでフォローしたい場合は、次のものがあることを確認してください。

  • Linuxホスト。このチュートリアルでは、Ubuntu18.04.5LTSを使用します。
  • LinuxホストにインストールされたDocker。このチュートリアルでは、Dockerv19.03.8を使用します。

docker runを使用してコンテナを起動してDockerコンテナにSSHで接続する

docker run commandは、新しいコンテナーが最初に起動したときにコマンドを実行するDockerコマンドです。 docker runを使用する 、以下の手順を使用して、コンテナへのインタラクティブなSSHセッションを起動できます。

このセクションを開始する前に、Dockerイメージがダウンロードされて利用可能であることを確認してください。このチュートリアルでは、DockerHubで利用可能な最新のUbuntuDockerイメージを使用します。

docker runを使用してDockerコンテナにSSHで接続するには :

1.ローカルマシンでターミナルを開きます。

2. docker runを実行します コマンド提供:

  • 名前 実行するコンテナの数( ubuntu_container_ssh
  • i コンテナへのインタラクティブSSHセッションを開くことを示すフラグ。 i コンテナが接続されていなくても、フラグはSSHセッションを閉じません。
  • t flagは、コマンドをインタラクティブに実行するためによく使用される疑似TTYを割り当てます。
  • コンテナを作成するためのベースイメージ( ubuntu
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu

この時点で、コンテナにSSHで接続され、必要なコマンドを実行できます。

3.次に、 touchなどのコマンドを実行します 指図。タッチコマンドは、 myfolderという名前の新しいフォルダを作成します tmp 以下に示すように、ディレクトリ。

touch /tmp/myfolder

これで、好きなコマンドを実行できます!

最後に、コマンドの実行が終了したら、 exitと入力します セッションを閉じます。

docker execを使用して実行中のDockerコンテナにSSHで接続する

前のセクションでは、新しいDockerコンテナを起動するときにSSHコマンドを実行する方法を学びました。しかし、すでに実行されているDockerコンテナーにSSHで接続する必要がある場合はどうでしょうか。 docker execを実行します コマンド。

docker exec commandは、実行中のコンテナー内にBashシェルを作成し、SSHコマンドをコンテナーに送信するための優れた方法です。

このセクションを開始する前に、Dockerイメージがダウンロードされて利用可能であることを確認してください。このチュートリアルでは、DockerHubで利用可能な最新のNGINXDockerイメージを使用します。

docker execを使用して実行中のDockerコンテナにSSHで接続するには :

1.ローカルマシンでターミナルを開きます。

2.次に、 docker runを実行します コンテナを起動するコマンド。必ず-dを指定してください コンテナをバックグラウンドで実行して、コンテナを削除するまで存続させるためのフラグ。以下のコマンドは、 nginx-testingというコンテナを起動します 。

sudo docker run --name nginx-testing -d nginx

3.ここで、docker psコマンドを実行して、コンテナーが実行されていることを確認します。 docker ps コマンドは、Dockerホストで実行されているすべての実行中のコンテナーを一覧表示します。

4.最後に、 docker execを実行します 、以下に示すように、 nginx-testingと呼ばれる実行中のコンテナにSSHで接続します 。以下のコードスニペット:

  • docker exec コマンドが実行されます( / bin / bash )コンテナにBashシェルを取得します。
  • -それ flagを使用すると、コンテナをインタラクティブモードで実行できます。つまり、コンテナの実行中にコンテナ内でコマンドを実行できます。
  • nginx-testing コンテナの名前です。
sudo docker exec -it nginx-testing /bin/bash

OpenSSHサーバーのセットアップとDockerfileとの接続

これまでのチュートリアルでは、SSHサーバーがすでにインストールされているコンテナに接続していることを前提としています。しかし、そうでない場合はどうなりますか?おそらく、使用しているイメージにOpenSSHがまだインストールされていないため、最初に構成する必要がありますか?

Dockerfileを使用すると、DockerコンテナーにSSHで接続するだけでなく、OpenSSHサーバーを最初からセットアップするために必要なすべてのタスクを構成できます。

ローカルターミナルがまだ開いていると仮定します:

1.オプションで、Dockerfileを保存するディレクトリを作成します。このチュートリアルでは、〜/ DockerFileContainerTestを使用します ディレクトリ。

2.お気に入りのテキストエディタを開き、以下のDockerfileをコピーして貼り付け、ファイルを Dockerfileとして保存します。 〜/ DockerFileContainerTest内 ディレクトリ。このDockerfileには、ベースイメージの上に新しいDockerイメージを構築し、OpenSSHをセットアップするためのすべてのコマンドと構成が含まれています。

DockerFile 以下に、コンテナを構築するためのさまざまな手順/手順を示します。

  • FROM ubuntu:16.04を定義します 使用するベースイメージ。
  • RUN –ベースイメージの上の新しいレイヤーでコマンドを実行します。
  • CMD – CMDを使用すると、コマンドを実行できます。コマンドをexecまたはシェル形式を使用して実行する方法は2つあります。
  • EXPOSE –コンテナーが実行時に指定されたネットワークポートでリッスンすることをDockerに通知します。コンテナはポット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.次に、 docker buildを実行します Dockerイメージを作成するコマンド。 t フラグは画像にタグを付けますsshd_container および Dockerが現在の作業ディレクトリから必要なすべてのファイルを選択できるようにします。

# Building the docker Image
sudo docker build -t sshd_tagged_image .

4.次に、 docker imagesを実行します 作成されたイメージを検査するコマンド。 リポジトリに注意してください 属性。この属性は、 -tで作成されたタグです。 前のステップでフラグを立てます。

5. docker runを実行します イメージからコンテナーを作成して実行し、Dockerにイメージをバックグラウンドで実行するように指示します( -d )、

以下のコマンドは、Dockerに test_sshd_containerというコンテナーを作成して実行するように指示します。 バックグラウンドで( -d )、 sshd_tagged_imageを使用 手順3で作成し、Dockerfileで定義されたすべてのポートをランダムポートとして公開するために新しく作成されたイメージ。

# Running the container using the newly built image
docker run -d -P --name test_sshd_container sshd_tagged_image

Docker runコマンドが正常に実行されると、コンテナIDが以下に生成されていることがわかります。

6. docker portを実行します Dockerホストとコンテナー間のSSH接続を確認します。 docker port コマンドリストは、コンテナのポートマッピングまたは特定のマッピングです。

sudo docker port test_sshd_container

22 / TCP→0.0.0.0:32769の出力が表示されます。 、これは、コンテナのポート22が外部ポート 32769にマップされていることを示します 。

7.次に、コンテナのIPアドレスを見つけます。これを行うには、 docker inspectを実行します 指図。 docker inspect コマンドはDocker情報を照会し、 formatを使用して結果をJSON配列でレンダリングします パラメータ。

formatが表示されます 以下のパラメータ引数はrangeを使用します NetworkSettingsをチェックインしてコンテナのIPアドレスを検索する属性 →ネットワークIPAddress

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_sshd_container

8.最後に、SSHで接続するIPアドレスを取得したので、コンテナーにSSHで接続してみてください。これで機能するはずです。

ssh [email protected] 

結論

ここで、いくつかの異なるアプローチを使用してDockerコンテナーにSSHで接続するいくつかの方法を知っていることを示します。これらのアプローチのいずれかを使用すると、コンテナのトラブルシューティングと管理ができるはずです。

この新たに発見された知識を基に、今すぐコンテナにSSHで接続する予定はありますか?


Docker
  1. LinuxでDockerコンテナを作成、一覧表示、削除する方法

  2. ホストディレクトリをDockerコンテナにマウントする方法

  3. Dockerコンテナ間でデータを共有する方法

  1. DockerコンテナにSSHで接続する方法

  2. Dockerコンテナを一覧表示する方法

  3. Docker コンテナーをバックアップおよび復元する方法

  1. Dockerコンテナを一覧表示/開始/停止する方法

  2. 実行中のDockerコンテナにSSHで接続してコマンドを実行する方法

  3. Docker コンテナを一時停止および再開する方法