投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2018年11月8日木曜日

【Linux CentOS 7】(ベースコンテナの作成)Dockerコンテナへssh接続する方法や、コンテナのイメージ化、削除、起動方法などについて【Docker-ce 18.06.1.ce】

(警告)
ここで作成しているDockerコンテナは、信頼のおけるローカルネットワークのみで動作するホストで運用するものとして構築している。
ホスト上のいずれかのネットワークインターフェイスがインターネットに直接接している場合、このコンテナの運用はセキュリティの観点から非常に危険なので動作させてはいけない。
(インターネットに直に接している場合、Dockerのデフォルトではiptablesを書き換えて外部からのアクセスを許してしまうことになってしまうため厳禁である。)


★Dockerのインストールは、次のページの手順に従った。

【Linux CentOS 7】Dockerをyumでインストールする手順と簡単な動作テスト【Docker-ce 18.06.1.ce】
https://akira-arets.blogspot.com/2018/08/centos7-install-docker-and-test.html


★またその他のDockerコンテナに関する情報を一覧にした。

【Linux CentOS 7】(ベースコンテナの作成)Dockerコンテナ(CentOS7公式)にsshd、rsyslog、Postfix、crondを導入した【Docker-ce 18.06.1.ce】

【Linux CentOS 7】(ベースコンテナの作成)Dockerコンテナにdnsmasqを導入しhostsファイルの仕組みを整える方法

【Linux CentOS 7】(ベースコンテナの作成)SSH接続可能なDockerコンテナでの日本用ロケールの有効化と検証(man,dateの日本語表示)【Docker-ce 18.06.1.ce】

【Linux CentOS 7】Dockerコンテナ(CentOS7)にデスクトップ環境(MATE)を構築してVNCでリモート接続できるようにした【Docker-ce 18.06.1.ce】


【Linux CentOS 7】Dockerコンテナにボリュームをマウントしデータを永続化させる方法/ボリュームのバックアップ方法【Docker-ce 18.06.1.ce】

【Linux CentOS 7】変更済みのDockerコンテナから別名でイメージを作成することでその加えた変更を維持する手順【Docker-ce 18.06.1.ce】

【Linux CentOS 7】Dockerイメージを圧縮ファイルに保存して別のホストにコピーし復元した【Docker-ce 18.06.1.ce】



■ centos7公式イメージからコンテナを実体化した。

DockerホストマシンのTCP 222番を、コンテナのTCP 22番に通すようにした。
また、privilegedを指定して、このコンテナ動作に特権を与えている。
コンテナはバックグラウンド動作で、/sbin/initを起動するように指定した。
このコンテナの名称として、cent7-ssh を付与した。

(インターネットに直に接している場合、Dockerのデフォルトではiptablesを書き換えて外部からのアクセスを許してしまうことになってしまうため厳禁である。)
# docker run --privileged -d -p 222:22 --name centos7-ssh centos:centos7 /sbin/init
e538ae438b0bb861b9be9d2fe0e3f8877b1297b2587026b869569d4eab0b2ceb
(注意)この段階ではまだSSHで使うポートを通しているだけであり、コンテナ内でSSHが動作していないためリモートアクセスは不可能である。


コンテナの動作を確認した。

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                 NAMES
e538ae438b0b        centos:centos7      "/sbin/init"        48 seconds ago      Up 46 seconds       0.0.0.0:222->22/tcp   centos7-ssh


■バックグラウンドで動作中のコンテナに接続した。

これは、コンテナの/bin/bashコマンドを実行すれば可能になる。

# docker exec -it centos7-ssh /bin/bash 
[root@e538ae438b0b /]#
プロンプトが表示されて、コンテナ内での作業が可能になった。



■上記の続きとして、コンテナ内で必要なパッケージの導入を行った。

以下は、コンテナ内での作業である。

○システムの更新
[root@e538ae438b0b /]# yum update -y
Updated:
  audit-libs.x86_64 0:2.8.1-3.el7_5.1    bind-license.noarch 32:9.9.4-61.el7_5.1   centos-release.x86_64 0:7-5.1804.5.el7.centos   dracut.x86_64 0:033-535.el7_5.1   
  kpartx.x86_64 0:0.4.9-119.el7_5.1      libblkid.x86_64 0:2.23.2-52.el7_5.1       libmount.x86_64 0:2.23.2-52.el7_5.1             libuuid.x86_64 0:2.23.2-52.el7_5.1
  nss.x86_64 0:3.36.0-7.el7_5            nss-sysinit.x86_64 0:3.36.0-7.el7_5       nss-tools.x86_64 0:3.36.0-7.el7_5               systemd.x86_64 0:219-57.el7_5.3   
  systemd-libs.x86_64 0:219-57.el7_5.3   tzdata.noarch 0:2018f-2.el7               util-linux.x86_64 0:2.23.2-52.el7_5.1       
Complete!

○sshサーバーの導入
[root@e538ae438b0b /]# yum install openssh-server
Installed:
  openssh-server.x86_64 0:7.4p1-16.el7                                                                                                                               
Dependency Installed:
  fipscheck.x86_64 0:1.4.1-6.el7         fipscheck-lib.x86_64 0:1.4.1-6.el7         openssh.x86_64 0:7.4p1-16.el7         tcp_wrappers-libs.x86_64 0:7.6-77.el7     
Complete!

○sshサービスの有効化
(コンテナ内のシステム再起動時に自動起動されるようにする)
[root@e538ae438b0b /]# systemctl enable sshd

○sshサービスの起動
[root@e538ae438b0b /]# systemctl start sshd

○状態の確認
[root@e538ae438b0b /]# systemctl status sshd
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-11-07 21:38:38 UTC; 9s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 286 (sshd)
   CGroup: /docker/e538ae438b0bb861b9be9d2fe0e3f8877b1297b2587026b869569d4eab0b2ceb/docker/e538ae438b0bb861b9be9d2fe0e3f8877b1297b2587026b869569d4eab0b2ceb/system.slice/sshd.service
           └─286 /usr/sbin/sshd -D
           ‣ 286 /usr/sbin/sshd -D
Nov 07 21:38:38 e538ae438b0b systemd[1]: Starting OpenSSH server daemon...
Nov 07 21:38:38 e538ae438b0b systemd[1]: Started OpenSSH server daemon.
これで、sshサービスが起動した。


○rootパスワードの設定を行った。
安全なローカルネットで実験しているので単純なパスワードにした。

[root@e538ae438b0b /]# passwd root
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT characters
Retype new password:
passwd: all authentication tokens updated successfully.

○ipコマンドを使うための準備
[root@e538ae438b0b /]# yum install iproute
Installed:
  iproute.x86_64 0:4.11.0-14.el7                                                                                                                                     
Dependency Installed:
  iptables.x86_64 0:1.4.21-24.1.el7_5      libmnl.x86_64 0:1.0.3-7.el7      libnetfilter_conntrack.x86_64 0:1.0.6-1.el7_3      libnfnetlink.x86_64 0:1.0.1-4.el7   
Complete!
○コンテナに付与されているIPアドレスを確認した。
[root@e538ae438b0b /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

コンテナに付与されているアドレスがDockerホストの存在する192.168.10.0/24ネットでないものになっている。
コンテナはホスト上に造られたDockerシステムによる閉じた仮想ネットワークに接続されているためである。
192.168.10.0/24ネット上のマシンからこのアドレスを直接指定して接続することはできない。

しかし、コンテナを実体化したときに、ホストマシンのTCP 222番をコンテナのTCP 22番に通す設定を行った。
だから、次のようにすれば、コンテナにSSH接続ができる。


以上でコンテナ内での作業は完了した。


■別のマシンから、上記コンテナにssh接続を試した。


(注意)
指定したIPアドレスはDocerホストのものであり、先程確認したコンテナに割り当てられたIPアドレスはない。
最初にこのコンテナをrunしたときに、ホストからコンテナへパススルーするポートを指定した。
Dockerホストのポート(TCP 222)をコンテナのポート(TCP 22)にパススルーしていることに気をつけること。

$ ssh -p 222 root@192.168.10.3
The authenticity of host '[192.168.10.3]:222 ([192.168.10.3]:222)' can't be established.
ECDSA key fingerprint is SHA256:
ECDSA key fingerprint is MD5:
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.10.3's password:
[root@e538ae438b0b ~]#
コンテナにログインできた。
上記のようにsshクライアントの表示では、Dockerホストマシン(192.168.10.3)のTCP 222番に接続したように見える。
しかし、上述したとおり、この接続は、コンテナのTCP 22番に通されている。


■コンテナのシャットダウン、イメージ作成、起動

○コンテナのシャットダウン

上記のsshクライアント接続、あるいは、Dockerホスト上でのコンテナコンソールで、poweroffコマンドを実行した。

[root@e538ae438b0b ~]# poweroff
Connection to 192.168.126.3 closed by remote host.
Connection to 192.168.126.3 closed.


以下は、Dockerホストでの作業である。

○コンテナの状態を確認

# docker ps -all
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMESe538ae438b0b        centos:centos7      "/sbin/init"        39 minutes ago      Exited (130) 55 seconds ago                       centos7-ssh

コンテナは終了していることがわかった。


○イメージを作成

コンテナは動作中のアプリケーションのようなものだから、
いつでも起動しなおせるようにイメージとして保存しておく。
イメージ名として、image-centos7-ssh を指定した。

# docker commit centos7-ssh image-centos7-ssh
sha256:26135a0ce09116896ca7c9fc6c21f32ec9558838b8ba6c4bb49fd6e967ceead2

# docker image list | grep ssh
image-centos7-ssh                  latest              26135a0ce091        58 seconds ago      347MB

○コンテナを再起動し、再接続

# docker start centos7-ssh
centos7-ssh

最初の手順と同じように、コンテナに再接続できた。

# docker exec -it centos7-ssh /bin/bash 
[root@e538ae438b0b /]#

○コンテナの削除

動作中のコンテナは削除不可能である。
# docker rm centos7-ssh
Error response from daemon: You cannot remove a running container e538ae438b0bb861b9be9d2fe0e3f8877b1297b2587026b869569d4eab0b2ceb. Stop the container before attempting removal or force remove
そこで、いったんコンテナをストップした。
# docker stop centos7-ssh
centos7-ssh
そして、コンテナの削除を行った。
# docker rm centos7-ssh
centos7-ssh

○保存しておいたイメージからコンテナを実体化

削除したコンテナはリストから消えるので、docker start できなくなる。
そこで、上述したように保存したイメージからコンテナを復元した。

(インターネットに直に接している場合、Dockerのデフォルトではiptablesを書き換えて外部からのアクセスを許してしまうことになってしまうため厳禁である。)
# docker run --privileged -d -p 222:22 --name centos7-ssh image-centos7-ssh /sbin/init
8f4f4f284f6defca6e28526b7d5b1b384ac24fbb27adb921efaebb254c796f7f

コンテナに接続した。
# docker exec -it centos7-ssh /bin/bash
[root@8f4f4f284f6d /]#

あるいは、別マシンから、上述したように構築済みのssh接続を行う。

$ ssh -p 222 root@192.168.10.3
[root@8f4f4f284f6d ~]#

以上



<参考>
・Dockerサーバ構築とSSHコンテナの作成
< http://s-tech-blog.blogspot.com/2018/05/dockerssh.html > 2018年11月8日

・CentOS7のDockerイメージ
< http://d.hatena.ne.jp/chocopurin/20160121/1453382799 > 2018年11月8日

・How can I find out if a port on a remote server is open as well as a service is listening on it?
< https://serverfault.com/questions/751506/how-can-i-find-out-if-a-port-on-a-remote-server-is-open-as-well-as-a-service-is > 2018年11月8日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad