Dockerでsshを使用してリモートでコンテナーを管理する

SSHサービスでイメージを作成するには、コンテナーを作成する2つの方法があります。

1. docker commitコマンドに基づいて作成します

{

 

原則:コンテナーのSSHを開き、コンテナーの22ポートをホストマシンの特定のポートにマップします。

 

docker commit:コンテナから新しいイメージを作成します。

構文:

docker commit [オプション]コンテナー[リポジトリ[:タグ]]

オプションの説明:

-a:送信された画像の作成者。

-c:Dockerfile命令を使用してイメージを作成します。

-m:提出時の説明文。

-p:コミット中にコンテナを一時停止します。

 

例:

最初のステップは、ubuntuイメージをプルしてコンテナーを作成することです

[root @ huangxv〜]#docker pull ubuntu:18.04

[root @ huangxv〜]#docker run -it ubuntu:18.04 bash

root @ 561327aa197b:/#

2番目のステップは、更新パッケージのキャッシュを確認することです

root @ 561327aa197b:/#apt-get update

それはタバコのカンフー、またはタバコのパックかもしれません...

3番目のステップは、sshサービスをインストールすることです

root @ 561327aa197b:/#apt-get install openssh-server

ここでプロンプトが表示されます...続行しますか? 

***プラグインをさらにインストールするかどうかは、これは単なるデモンストレーションなので、インストールしません。

sshが正常に起動するには、ディレクトリ/ var / run / sshdが存在している必要があります。

root @ 561327aa197b:/#mkdir -p / var / run / sshd

root @ 561327aa197b:/#/ usr / sbin / sshd -D&

 

コンテナーのsshポートを表示する

root @ 561327aa197b:/#netstat -tunlp

 

SSHサービスの安全なログイン構成を変更し、pamログイン制限を削除します。

root @ 561327aa197b:/#sed -ri 's / session required pam_loginuid.so/#session

            必要なpam_loginuid.so/g '/etc/pam.d/sshd

rootユーザーディレクトリに作成されます。sshディレクトリ、および公開鍵情報(通常は、ssh-keygen -t rsaコマンドで生成できるローカルホストユーザーディレクトリのssh / id_rsa.pubファイル)をauthorized_keysファイルにコピーします。

 

root @ 561327aa197b:/#mkdir root / .ssh

root @ 561327aa197b:/#vi /root/.ssh/authorized_keys

SSHサービスを自動的に開始する実行可能ファイルrun.shを作成し、実行可能権限を追加します。

 

root @ 561327aa197b:/#vi /run.sh

root @ 561327aa197b:/#chmod + x run.sh

run.shスクリプトの内容は次のとおりです。

 

        #!/ bin / bash

        / usr / sbin / sshd -D

最後に、コンテナを終了します。

 

root @ 561327aa197b:/#exit

出口

docker commitコマンドを使用して、終了したコンテナを新しいsshd:ubuntuイメージとして保存します。

 

$ docker commit fc1 sshd:ubuntu

        7aef2cd95fd0c712f022bcff6a4ddefccf20fd693da2b24b04ee1cd3ed3eb6fc

コンテナーを開始し、ポートマッピング10022-> 22を追加します。このうち、10022はホストホストのポート、22はコンテナのSSHサービスのリスニングポートです。

 

$ docker run -p 10022:22 -d sshd:ubuntu /run.sh

        3ad7182aa47f9ce670d933f943fdec946ab69742393ab2116bace72db82b4895

 

 

}

 

2. Dockerfileに基づいて作成

{

1。作業ディレクトリを作成

最初に、sshd_ubuntu作業ディレクトリを作成します。

 

        $ mkdir sshd_ubuntu

        $ ls

        sshd_ubuntu

その中で、Dockerfileとrun.shファイルを作成します。

 

        $ cd sshd_ubuntu /

        $ touch Dockerfile run.sh

        $ ls

        Dockerfile run.sh

2。run.shスクリプトとauthorized_keysファイルを記述します

スクリプトファイルrun.shの内容は、上記と一致しています。

 

        #!/ bin / bash

        / usr / sbin / sshd -D

ホストホストでSSHキーペアを生成し、authorized_keysファイルを作成します。

 

        $ ssh-keygen -t rsa

        ...

        $ cat〜/ .ssh / id_rsa.pub> authorized_keys

3。Dockerfileを書き込む

Dockerfileの内容とコメントは次のとおりです。上のdocker commitコマンドを使用してイメージを作成するプロセスを比較できます。

 

        #継承ミラーを設定

        ubuntuから:18.04

        #sshサービスをインストールする

        apt-get install -y openssh-serverを実行します。

        RUN mkdir -p / var / run / sshd

        実行mkdir -p /root/.ssh

        #Pamの制限をキャンセルする

        RUN sed -ri 's / session required pam_loginuid.so/#session required

              pam_loginuid.so/g '/etc/pam.d/sshd

 

        #構成ファイルを対応する場所にコピーし、スクリプトに実行権限を付与します

        ADD authorized_keys /root/.ssh/authorized_keys

        追加run.sh /run.sh

        RUN chmod 755 /run.sh

 

        #ポートを開く

        EXPOSE 22

 

        #自動起動コマンドを設定する

        CMD ["/run.sh"]

4。ミラーを作成

sshd_ubuntuディレクトリで、docker buildコマンドを使用してイメージを作成します。最後に「。」があることに注意してください。これは、現在のディレクトリのDockerfileが使用されていることを示しています。

 

        $ cd sshd_ubuntu

        $ docker build -t sshd:dockerfile。

Dockerfileを使用してカスタムイメージを作成する場合、Dockerは一時的に作成されたレイヤーを途中で自動的に削除し、操作の各ステップと書き込まれたDockerfileのコマンドとの対応にも注意する必要があることに注意する必要があります。

コマンドの実行後、「Successfully built ***」と表示された場合は、イメージが正常に作成されたことを意味します。ご覧のとおり、上記のコマンドで生成されたイメージIDは570c26a9de68です。

5。イメージをテストしてコンテナ
を実行する作成したsshd:dockerfileイメージを使用してコンテナを実行します。
ミラーを直接起動し、コンテナの22ポートをローカルの10122ポートにマッピングします。

ドッカーRUNは、-p 10122 $ -d:22 SSHDです:dockerfile
890c04ff8d769b604386ba4475253ae8c21fc92d60083759afa77573bf4e8af1
$ドッカーPS
CONTAINER IDポートSTATUS COMMAND NAMES作成したイメージ
890c04ff8d76 SSHD:。。dockerfile "/run.sh"アップを4秒前にメンバー3秒
0.0.0.0:10122->22/ tcp high_albattani
は、ホストhostで新しいターミナルを開き、新しく作成されたコンテナーに接続します。

$ ssh 192.168.1.200-p 10122
ホスト '[192.168.1.200]:10122([192.168.1.200]:10122)'の信頼性を
確立できません。
ECDSAキーフィンガープリントはd1:59:f1:09:3b:09:79:6d:19:16:f4:fd:39:1b:be:27です。
接続を続行してもよろしいですか(はい/いいえ)?yes
警告:既知のホストのリストに「[192.168.1.200]:10122」(ECDSA)を永久に追加しました。

root @ 890c04ff8d76:〜#
効果は前のセクションと同じで、イメージが正常に作成されます。

}

おすすめ

転載: www.cnblogs.com/hxlinux/p/12725857.html