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:〜#
効果は前のセクションと同じで、イメージが正常に作成されます。
}