ブリッジ接続でホストのネットワークに直接接続したDockerコンテナ環境を構築し、便利になったものの、やはりコンテナ環境は従来の仮想サーバ環境とは少々異なり癖があるもの。
本来あるべき使い方とは違うかとは思いますが、やはりSSHでログインできるようになった方が便利なのでSSHログイン可能なコンテナを作成してみます。
(ほとんど個人用の備忘録として記載します)
鍵の作成
ホストサーバからコンテナへのみ、鍵認証(パスフレーズなし)によるログインが可能なようにしたいと思います。SSH公開鍵認証用の鍵をホストサーバにて作成しておきます。
# ssh-keygen -t rsa
公開鍵(~/.ssh/id_rsa.pub)を作業用ディレクトリにコピーしておきます。
Dockerfileによるイメージのビルド
以下のようなDockerfile(./sshdenable)を準備します。
FROM centos:latest MAINTAINER Tomotaka Kizawa # Install RUN yum install -y openssh-server && yum clean all RUN yum update -y && yum clean all RUN systemctl enable sshd # Setup sshd ADD id_rsa.pub /root/.ssh/authorized_keys RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed -ri 's/^#RSAAuthentication yes/RSAAuthentication yes/' /etc/ssh/sshd_config RUN sed -ri 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
上記の公開鍵をDockerfileと同じディレクトリに設置し、以下のようにコンテナのビルドを実行します。
# docker build -f ./sshdenable -t centos:sshdenable --no-cache=true . Sending build context to Docker daemon 437.6 MB Step 1 : FROM centos:latest ---> 0584b3d2cf6d ~中略~ Successfully built 8b726ab1c9f3
解説
読んだ通りではありますが、以下のカスタマイズを行っています。
- openssh-serverパッケージをインストール&有効化
- 最新のパッケージに更新
- 公開鍵をコピー(埋め込み)
- 鍵認証を有効化し、パスワード認証を無効化
少し古い情報ではコンテナ内でsystemd管理によるデーモン管理を行う際にはfakesystemdへの入れ替えが必要との記載がありますが、現在では不要となっています。
作成したイメージからの起動
イメージを作成したので、次からは以下のように起動するだけで利用できる。
# docker run --privileged -d --name container3 --hostname container3 \ --net shared_nw --ip 192.168.X.XXX --restart=always centos:sshdenable /sbin/init
CentOS7のsystemd管理で各種デーモンの起動ができるよう、–privilegedオプションを付加しバックグラウンドで起動させている。
–privilegedオプションを付加した場合、コンテナは管理者モードで起動され各種ハードウェアリソースにアクセス可能になる。マルチテナントで利用する際には注意が必要である。
なお以下のページにはSELinux無効の場合には–privilegedオプションの代わりに–cap-add=SYS_ADMINに変えても動作すると記載があり確認中です。
なお以下のページにはSELinux無効の場合には–privilegedオプションの代わりに–cap-add=SYS_ADMINに変えても動作すると記載があり確認中です。
CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する - Qiita
はじめにCentOS 7ではinitデーモンがsystemdに変わったため、centos:centos7のDockerイメージを使用した場合、普通にコンテナを作ってその中でsystemctlを実行…
コメント