Web App for ContainersでコンテナにSSHする

★★★ Live配信告知 ★★★ぜひお申込みください!
◆◇世界一わかりみの深いクラウドネイティブ on Azure◆◇
8/4(木) 19:00~ 第17回:コンテナをサーバーレスでラクラク実行 〜 Azure Container InstancesとDocker CLIで実現 〜 今回は、コンテナをサーバーレスで実行するテクノロジとDocker CLIとの連携を紹介します。
◆◇PS Live◆◇
8/5(金) 12:00~ 第18回:アウトプットはイイぞ 〜サイオステクノロジーLT大会〜 エンジニア初級者向けから、個人ネタまで、エンジニア脳を体感できるプログラムです。

こんにちは、サイオステクノロジー武井(Twitter:@noriyukitakei)です。今回はWeb App for Containersで稼働しているコンテナのシェルに入る方法を試してみます。ほぼ私の備忘録です。

最もメジャーな方法は、コンテナの中にSSHデーモンを立てる方法です。

MS公式のドキュメントに書いてありますので、それをベースにやってみます。

https://docs.microsoft.com/ja-jp/azure/app-service/tutorial-custom-container?pivots=container-linux#connect-to-the-container-using-ssh

そして、よく使うであろうDebianを前提とします。こちらもDockerの公式ドキュメントに書いてあります。

https://docs.docker.jp/engine/examples/running_ssh_service.html

ということで以下のDockerfileを作りました。SSHデーモンの構築の部分だけ一部抜粋してます。

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:Docker!' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 2222 8080

MS公式ドキュメントからは読み取れないのですが、Web App for ContainersのコンテナにSSHするためには、以下の要件があります。

  • SSHのポート番号が2222であること
  • ユーザー名とパスワードは、root / Docker!であること

そしてちなみにですが、debianのbusterでsshdをインストールすると、Dockerの公式マニュアルとは異なり、/etc/ssh/sshd_configが#PermitRootLogin prohibit-passwordとなっている(Dockerの公式マニュアルではPermitRootLogin prohibit-password)ので、そのあたり書き換えなければなりません。

このDockerfileをもとにコンテナ作れば、Web App for Containersの管理画面からSSHできます。なにかとSSHできたほうが便利です。

ということで簡単でしたが、現場からは以上です。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*