投げ銭

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

LINK


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

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

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

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

2018年8月25日土曜日

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

<お知らせ>(2021年3月10日 更新)
新しい方法によるMATEデスクトップコンテナの構築手順を作成しました。
特権動作が不要だとわかりました。また日本語表示も可能になりました。
よろしければご覧ください。
 


<お知らせ>(2021年3月10日 更新)
前回のお知らせでは、VNC Serverが起動できなくなった旨を記載しておりますが、
2021年2月くらいに同じ手順で試した所、問題なく起動できることがわかりました。
VNC SERVERにおいてCentOS7システムとの間で生じていた問題が修正されたのだと思います。vnc起動スクリプトの内容に変更がありました。

ところで、上記お知らせに記載の通り、特権不要でMATEデスクトップの日本語環境の動作を確認できました。よろしければご覧ください。


<お知らせ>(2020年4月26日 更新)
この記事に載っている方法では、2020年4月26日現在で最新のCentOS 7では、正常にVNC Serverを起動できなくなりました。
あるいは以前正常動作していても、システムのアップデートで起動できなくなってしまうようです。

その場合、次のエラーが発生します。
does not belong to service, and PID file is not owned by root. Refusing

下記に、同様の問題についてレポートがされています。

・VNC Server Error: New main PID <PID> does not belong to service , 2019/10/17
< https://superuser.com/questions/1490985/vnc-server-error-new-main-pid-pid-does-not-belong-to-service > 2020年4月26日

・OL 7.7 systemd: New main PID xxxx does not belong to service... , 2019/08/17
< https://community.oracle.com/thread/4286364 > 2020年4月26日

・Bug 1583159 - Sample service file vncserver@.service is out of date with systemd changes , 2018/06/16
< https://bugzilla.redhat.com/show_bug.cgi?id=1583159 > 2020年4月26日



(警告)
ここで作成しているDockerコンテナは、信頼のおけるローカルネットワークのみで動作するホストで運用するものとして構築している。

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



DockerコンテナとしてCentOS7を走らせて、そこにデスクトップ環境を構築し、
外部マシンからネットワーク経由でリモートアクセスすることができた。

完成状態をイメージとして保管しておけば、いつでも綺麗な状態のデスクトップ環境を維持することができるはずだ。


■centos7イメージからコンテナを起動して、必要なパッケージを入れ込む

○ centos:centos7 イメージからコンテナを起動した。

5992ポートを、コンテナの5902ポートへ転送を行うようにした。
また、権限を与える必要があり、--privileged を設定している。
さらに、バックグラウンドで動作させるために、-d を指定している。

(インターネットに直に接している場合、Dockerのデフォルトではiptablesを書き換えて外部からのアクセスを許してしまうことになってしまうため厳禁である。)
# docker run --privileged -d -p 5992:5902 --name centos-mate centos:centos7 /sbin/init                                                             
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Status: Downloaded newer image for centos:centos7
cac12a3edabced1611ce19cecebe605a971c068b1bf9987c30fbf1bab881c176

○ docker ps の確認

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
cac12a3edabc        centos:centos7      "/sbin/init"        45 minutes ago      Up 45 minutes       0.0.0.0:5992->5902/tcp   centos-mate


○ コンテナにログイン

[root@localhost ~]# docker exec -it centos-mate /bin/bash                     
[root@cac12a3edabc /]#

以下では、コンテナ内での作業になっている。

○アップデート

[root@cac12a3edabc /]# yum update -y
Updated:
  audit-libs.x86_64 0:2.8.1-3.el7_5.1     centos-release.x86_64 0:7-5.1804.4.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    systemd.x86_64 0:219-57.el7_5.1   
  systemd-libs.x86_64 0:219-57.el7_5.1    util-linux.x86_64 0:2.23.2-52.el7_5.1         

Complete!


○ X Window system 、デスクトップ環境 MATE、tigervnc-serverのインストール

回線やマシンの速度によっては非常に時間を要する。

[root@cac12a3edabc /]# yum groupinstall "X Window system"
Complete!
[root@cac12a3edabc /]# yum install epel-release
Complete!
[root@cac12a3edabc /]# yum groupinstall "MATE Desktop"
Complete!
[root@cac12a3edabc /]# yum install tigervnc-server
Complete!

○ コンテナのステータス(インストール前)
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
cac12a3edabc        centos-mate         0.00%               3.105MiB / 1.953GiB   0.16%               21.2MB / 353kB      14.4MB / 28.4MB     7

overlay           16G  2.3G   14G   15% /var/lib/docker/overlay2/6d8375eaf83cbba0c89279e2327fc1818ff5fcd2e56d64559dd91fd1b9b71877/merged
○ コンテナのステータス(インストール後)
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
cac12a3edabc        centos-mate         0.00%               4.43MiB / 1.953GiB   0.22%               826MB / 9.48MB      131MB / 461MB       8

overlay           16G  3.9G   12G   25% /var/lib/docker/overlay2/6d8375eaf83cbba0c89279e2327fc1818ff5fcd2e56d64559dd91fd1b9b71877/merged
インストールに伴って、データ量が増えていることが確認できた。



■(Dockerホスト上での作業)
ここで一旦、コンテナをイメージ化した。

○ 一旦このコンテナ内部からpoweroffコマンドでシャットダウンする。

[root@cac12a3edabc /]# poweroff


○ このコンテナが終了状態になったことを確認

docker ps -a


○ イメージ化を行う。

# docker commit cac12a3edabc centos-mate-installed
sha256:cf002071d9ac55431719165bdbd4a8426ae4a3c56cd67c28cc843da9c290a675
少々時間を要した。


■(Dockerホスト上での作業)
上記で作成したイメージからコンテナを実行し、設定作業継続

○ 作成したイメージからコンテナの起動

さきほど作成したイメージから、新しいコンテナを生成している。
(さきほどのコンテナは終了状態になっているままなので、不要であれば消しておく。)

(インターネットに直に接している場合、Dockerのデフォルトではiptablesを書き換えて外部からのアクセスを許してしまうことになってしまうため厳禁である。)
# docker run -m 3g --privileged -d -p 5992:5902 --name centos-mate-ready-to-run centos-mate-installed /sbin/init

(注意)-m 3g を指定して、メモリの最大サイズを3Gバイトにまで拡張しておくこと。
さもなければ、後に下記のようなエラーが発生して、vncserverを起動できなかった。
もちろん、ホスト上で空メモリが必要である。
# systemctl start vncserver@:2.service
Job for vncserver@:2.service failed because a configured resource limit was exceeded. See "systemctl status vncserver@:2.service" and "journalctl -xe" for details.

○ コンテナに接続

# docker exec -it centos-mate-ready-to-run /bin/bash
[root@fb18eead8af0 /]#

○ 実験のために、ファイアヲールを解除

(注意)
下記(1〜4)では、selinuxが無効になっていること、そして、実験のためにファイアーヲールを無効化している。
(安全な環境でなければ以下の設定はしてはいけない!)

1、selinuxがDisabledになっていることを確認

[root@fb18eead8af0 /]# getenforce
Disabled
2、firewalldをストップ

[root@fb18eead8af0 /]# systemctl stop firewalld

コンテナ起動の際に、firewalldが起動しないようにする。

[root@fb18eead8af0 /]# systemctl disable firewalld

3、iptablesをクリア

[root@fb18eead8af0 /]# iptables -F

4、パケットフィルタの状態の確認

INPUTやFORWAEDが、全てパスするようになった。

[root@fb18eead8af0 /]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination       
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination       
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

○テストユーザーの作成

ユーザ追加
[root@fb18eead8af0 /]# useradd user1

Linuxパスワードの設定
(なくてもリモートアクセスは可能だが、デスクトップ画面がロックすると解除できなくなる。)
[root@fb18eead8af0 /]# passwd user1

user1に切り替え
[root@fb18eead8af0 /]# su user1

vncリモート接続用のパスワードの設定
[user1@fb18eead8af0 /]$ vncpasswd 
Password: ←VNC接続用のパスワードを設定
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
[user1@fb18eead8af0 /]$ exit
[root@fb18eead8af0 /]#

○ Tiger-vnc-serverの設定

設定ファイルのコピーを行った。
vncserver@:2.service の「2」という数は、TCPポート5902に対応している。

[root@fb18eead8af0 /]# cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:2.service


設定ファイルの編集を行った。
[root@fb18eead8af0 /]# vi /lib/systemd/system/vncserver@:2.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
次のようにして、<USER>部分に先程作成したテストユーザー名を入力する。
ExecStart=/usr/sbin/runuser -l user1 -c "/usr/bin/vncserver %i"
PIDFile=/home/user1/.vnc/%H%i.pid

リロード

[root@fb18eead8af0 /]# systemctl daemon-reload


必要があれば、enableにしておく。(vncが自動起動するようになる)

[root@fb18eead8af0 /]# systemctl enable vncserver@:2.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:2.service to /usr/lib/systemd/system/vncserver@:2.service.

一度だけ、vncserverを起動してから終了する。
これによって、ユーザー(user1)ディレクトリにファイルが生成される。

[root@fb18eead8af0 /]# systemctl start vncserver@:2.service
[root@fb18eead8af0 /]# systemctl stop vncserver@:2.service


ユーザー(user1)に関して設定を行う。

[root@fb18eead8af0 /]# su user1
[user1@fb18eead8af0 /]$ vi /home/user1/.vnc/xstartup
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
#exec /etc/X11/xinit/xinitrc
exec mate-session &
exec /etc/X11/xinit/xinitrc をコメントアウトするのを忘れないこと。

[user1@fb18eead8af0 /]$ exit
[root@fb18eead8af0 /]#


■VNCSERVERを起動してリモートから開く

いよいよ起動して、リモートアクセスを試す。

○ Tiger-vnc-serverを起動

[root@fb18eead8af0 /]# systemctl start vncserver@:2.service

ここで、メモリ使用量が120MB程度上昇した。182.1MiB / 3GiB


○ 別マシンのVNCSERVERクライアント(Tiger vnc viewer)からアクセス

上記で設定してきた通り、次のTCPポートへ接続する。
DockerホストマシンのIPアドレス:5992
これによって、コンテナ起動オプションの通り、コンテナの5902ポートへ転送される。


下記のように、MATEデスクトップ環境をリモートマシンのVNC Viewerから利用できた。



○ホスト上のプロセス

ところで、firefoxを起動した後、ホストでtopを起動すると、次のようになった。

top - 14:34:06 up  1:27,  1 user,  load average: 1.25, 0.59, 0.30
Tasks: 159 total,   3 running, 156 sleeping,   0 stopped,   0 zombie
%Cpu(s): 38.6 us,  8.5 sy,  0.0 ni, 52.0 id,  0.0 wa,  0.0 hi,  0.5 si,  0.4 st
KiB Mem :  4142136 total,  1406240 free,   571912 used,  2163984 buff/cache
KiB Swap:  1952764 total,  1952764 free,        0 used.  3245720 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   
 4613 user1     20   0 2099552 199736  63204 S  56.8  4.8   0:04.00 firefox   
 4681 user1     20   0 1612412  72452  38288 R  16.6  1.7   0:00.74 Web Content
 4091 user1     20   0  226176  46912  13104 S  16.3  1.1   0:33.31 Xvnc       
 4735 user1     20   0 1562372  44384  22976 S   7.3  1.1   0:00.22 Web Content
 4162 user1     20   0  452484  16800  10524 S   1.0  0.4   0:01.69 marco     
  944 root      20   0  515892  65240  24288 S   0.3  1.6   0:41.23 dockerd   
 4103 user1     20   0   58332   1852    996 S   0.3  0.0   0:00.14 dbus-daemon
 4245 user1     20   0  290768  16644   6868 S   0.3  0.4   0:00.16 applet.py 
 4693 root      20   0  161984   2256   1528 R   0.3  0.1   0:00.01 top
省略


■ このコンテナの終了、イメージ化、再び起動する方法について

次の方法でうまくできた。

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

[root@fb18eead8af0 /]# poweroff
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.

○ コンテナが終了状態になっていることを確認

# docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                       PORTS               NAMES
fb18eead8af0        centos-mate-installed   "/sbin/init"        24 hours ago        Exited (130) 6 seconds ago                       centos-mate-ready-to-run

○ イメージ化

既に述べた方法で再びイメージ化した。

docker commit fb18eead8af0 centos-mate-user1

ところで、ここで生成したイメージから、あたらしいコンテナを起動するには、下記のようにする。
複数のコンテナを運用する場合、外部ポートが重ならないようにすること。
下記の例では、5992でなく、5982を外部ポートとして設定している。
二つのコンテナを動作させて、それぞれVNCでリモート接続し、異なるデスクトップを利用できた。
(ただし、今は行わない。)
(例)
(インターネットに直に接している場合、Dockerのデフォルトではiptablesを書き換えて外部からのアクセスを許してしまうことになってしまうため厳禁である。)# docker run -m 3g --privileged -d -p 5982:5902 --name centos-mate-user1-c01 centos-mate-user1 /sbin/init


○ 終了したコンテナを再び起動

# docker start fb18eead8af0
fb18eead8af0

# docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                              NAMESfb18eead8af0        centos-mate-installed   "/sbin/init"        24 hours ago        Up 10 minutes       5901/tcp, 0.0.0.0:5992->5902/tcp   centos-mate-ready-to-run


○ コンテナに接続

[root@localhost ~]# docker exec -it fb18eead8af0 /bin/bash
[root@fb18eead8af0 /]#

○ コンテナ内でVNCSERVERサービスを始動

ファイアーヲールがオフになっていることを確認すること!
(前述の方法で、オフにしておく。ただし、安全な環境でのみそうすること。)

[root@fb18eead8af0 /]# systemctl start vncserver@:2.service

これで、再びリモートアクセスが可能になった。


○後々にVNCSERVERが正常に起動できなくなった場合

VNCSERVERを正常に終了せずにコンテナを再起動させた場合、
systemctl start vncserver@:2.service でエラーが出てサービスの始動に失敗した。

その場合、tmpフォルダ内に作成されているファイルを削除することで、
再び正常にVNCSERVERサービスを始動させ、リモートアクセスできるようになった。

[root@fb18eead8af0 /]# ls /tmp/.X11-unix/X2
/tmp/.X11-unix/X2
[root@fb18eead8af0 /]# rm /tmp/.X11-unix/X2
rm: remove socket ‘/tmp/.X11-unix/X2’? y
[root@fb18eead8af0 /]# systemctl start vncserver@:2.service
[root@fb18eead8af0 /]#


以上


新品価格
¥3,240から
(2018/8/25 03:57時点)

<参考>

・超簡単! CentOS 7上のDockerでCentOS 7を立ち上げる
< https://mseeeen.msen.jp/activate-docker-and-start-centos7/ > 2018年8月25日

・Dockerの基本操作メモ
< https://qiita.com/zaburo/items/97819a1910859a6f2ef9 > 2018年8月25日

・Docker privileged オプションについて
< https://qiita.com/muddydixon/items/d2982ab0846002bf3ea8 > 2018年8月25日

・docker run で/sbin/init を起動時に与えるコマンドとする設定の意味
< https://teratail.com/questions/83479 > 2018年8月25日

・Install CentOS 7 Desktop in Windows using Docker
< https://stackoverflow.com/questions/46997398/install-centos-7-desktop-in-windows-using-docker > 2018年8月25日

・DockerでLinuxデスクトップを使ってみる
< https://int128.hatenablog.com/entry/2014/11/27/233933 > 2018年8月25日

・CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する
< https://qiita.com/yunano/items/9637ee21a71eba197345 > 2018年8月25日

・privileged container which is running init process inside a container kills all TTY sessions on host #106
< https://github.com/docker/for-linux/issues/106 > 2018年8月25日

・[docker] コンテナを一括削除
< https://qiita.com/ozhaan/items/9e2090da22ffd6c7ad2a > 2018年8月25日

・Dockerコマンドメモ
< https://qiita.com/curseoff/items/a9e64ad01d673abb6866 > 2018年8月25日


2018年8月24日金曜日

【Linux CentOS 7】Dockerをyumでインストールする手順と簡単な動作テスト【Docker-ce 18.06.1.ce】


□システムのバージョンの表示

CentOS 7 minimalを導入して、updateを行ったものである。

# uname -a
Linux localhost.localdomain 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


■ Dockerリポジトリの導入

○ 必要なパッケージの追加

yum install yum-utils device-mapper-persistent-data lvm2

Installed:
  device-mapper-persistent-data.x86_64 0:0.7.3-3.el7                         
  lvm2.x86_64 7:2.02.177-4.el7                                               
  yum-utils.noarch 0:1.1.31-46.el7_5                                         
Dependency Installed:
  device-mapper-event.x86_64 7:1.02.146-4.el7                                 
  device-mapper-event-libs.x86_64 7:1.02.146-4.el7                           
  libaio.x86_64 0:0.3.109-13.el7                                             
  libxml2-python.x86_64 0:2.9.1-6.el7_2.3                                     
  lvm2-libs.x86_64 7:2.02.177-4.el7                                           
  python-chardet.noarch 0:2.2.1-1.el7_1                                       
  python-kitchen.noarch 0:1.1.1-5.el7                                         
Complete!

○ Dockerリポジトリ(ステーブル)の設定

(エッジ、テスト版リポジトリの導入については参考サイトへ)

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

○ 利用可能なDockerのバージョンの一覧

# yum list docker-ce --showduplicates | sort -r
利用可能なパッケージ
読み込んだプラグイン:fastestmirror
docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
Loading mirror speeds from cached hostfile
 * updates: ftp.riken.jp
 * extras: ftp.riken.jp
 * base: ftp.riken.jp

○インストールされるバージョンの確認

# yum info docker-ce                                          
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
利用可能なパッケージ
名前                : docker-ce
アーキテクチャー    : x86_64
バージョン          : 18.06.1.ce
リリース            : 3.el7
容量                : 41 M
リポジトリー        : docker-ce-stable/x86_64
要約                : The open-source application container engine
URL                 : https://www.docker.com
ライセンス          : ASL 2.0
説明                : Docker is an open source project to build, ship and run
                    : any application as a lightweight container.
                    :
                    : Docker containers are both hardware-agnostic and
                    : platform-agnostic. This means they can run anywhere, from
                    : your laptop to the largest cloud compute instance and
                    : everything in between - and they don't require you to use
                    : a particular language, framework or packaging system. That
                    : makes them great building blocks for deploying and scaling
                    : web apps, databases, and backend services without
                    : depending on a particular stack or provider.

○インストール

# yum install docker-ce
インストール:
  docker-ce.x86_64 0:18.06.1.ce-3.el7                                         
依存性関連をインストールしました:
  audit-libs-python.x86_64 0:2.8.1-3.el7_5.1                                 
  checkpolicy.x86_64 0:2.5-6.el7                                             
  container-selinux.noarch 2:2.68-1.el7                                       
  libcgroup.x86_64 0:0.41-15.el7                                             
  libsemanage-python.x86_64 0:2.5-11.el7                                     
  libtool-ltdl.x86_64 0:2.4.2-22.el7_3                                       
  policycoreutils-python.x86_64 0:2.5-22.el7                                 
  python-IPy.noarch 0:0.75-6.el7                                             
  setools-libs.x86_64 0:3.3.8-2.el7                                           
完了しました!


■動作テスト

○Dockerエンジンの起動

# systemctl start docker

もし、エラーが出て起動しない場合は、システムを再起動すると良かった


○サンプルイメージを取得してコンテナを動作

Docker Hubがホストするhello-worldというイメージからコンテナを作成し、
コンテナを動作させようとしている。
イメージがローカルにまだなければ、Docker Hubから自動的に取得される。
(動作手順は、下記、1〜4に記載されている。)

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

■動作テスト 2

また、さらに上記のコメントには、Ubuntuイメージから作成したコンテナを動作させて、
試しにそのbashを呼び出してみよと教えてくれているので、その通りやってみた。

コンテナ実行後、下記のように、コンテナ内のbashが表示するプロンプトに含まれる文字列は、
この場合(公式 Ubuntuイメージ)ではコンテナのIDと同一ものだった。

# docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
c64513b74145: Pull complete 
01b8b12bad90: Pull complete 
c5d85cf7a05f: Pull complete 
b6b268720157: Pull complete 
e12192999ff1: Pull complete 
Digest: sha256:aade50db36e1ed96716662cfe748789e154c213a711931c66746c42ce34aa296
Status: Downloaded newer image for ubuntu:latest
root@e0f42e71cf38:/#

root@e0f42e71cf38:/# uname -a
Linux e0f42e71cf38 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
root@e0f42e71cf38:/# free -m
              total        used        free      shared  buff/cache   available
Mem:           1999         194        1256           8         548        1642
Swap:          1906           0        1906
root@e0f42e71cf38:/# pwd
/
root@e0f42e71cf38:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@e0f42e71cf38:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          16G  1.4G   15G   9% /
tmpfs            64M     0   64M   0% /dev
tmpfs          1000M     0 1000M   0% /sys/fs/cgroup
/dev/vda5        16G  1.4G   15G   9% /etc/hosts
shm              64M     0   64M   0% /dev/shm
tmpfs          1000M     0 1000M   0% /proc/acpi
tmpfs          1000M     0 1000M   0% /proc/scsi
tmpfs          1000M     0 1000M   0% /sys/firmware
root@e0f42e71cf38:/#


○コンテナ動作中のホストのディレクトリの状態

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/vda5         16G  1.4G   15G    9% /
devtmpfs         990M     0  990M    0% /dev
tmpfs           1000M     0 1000M    0% /dev/shm
tmpfs           1000M  8.7M  992M    1% /run
tmpfs           1000M     0 1000M    0% /sys/fs/cgroup
/dev/vda2        2.0G   33M  2.0G    2% /tmp
/dev/vda1        473M  139M  335M   30% /boot
tmpfs            200M     0  200M    0% /run/user/0
overlay           16G  1.4G   15G    9% /var/lib/docker/overlay2/fc8817131b983e1c3c9984e0802c9a2b1fea1ee4fa9fdffa0d76dc9577265f37/merged
shm               64M     0   64M    0% /var/lib/docker/containers/e0f42e71cf384b40de5d0bc9323e3b65cf01d4bc06418b94c4ad680b5dc53be9/mounts/shm

○動作中のコンテナ一覧

動作中のコンテナのIDなどを確認できる。

# docker stats
CONTAINER ID        NAME                 CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
e0f42e71cf38        optimistic_almeida   0.00%               400KiB / 1.953GiB   0.02%               648B / 0B           0B / 0B             1
○IDで指定してコンテナを終了

上記で調べたIDを用いた。

# docker stop e0f42e71cf38
e0f42e71cf38
○イメージの差分であるオーバーレイヤーとしてマウントされたディレクトリの内容を表示

.bash_historyファイルが更新されたことがわかる。

# ls /var/lib/docker/overlay2/fc8817131b983e1c3c9984e0802c9a2b1fea1ee4fa9fdffa0d76dc9577265f37/*/* -al
/var/lib/docker/overlay2/fc8817131b983e1c3c9984e0802c9a2b1fea1ee4fa9fdffa0d76dc9577265f37/diff/root:
合計 4
drwx------ 2 root root 27  8月 23 01:23 .
drwxr-xr-x 3 root root 18  8月 22 13:37 ..
-rw------- 1 root root 72  8月 23 01:23 .bash_history
/var/lib/docker/overlay2/fc8817131b983e1c3c9984e0802c9a2b1fea1ee4fa9fdffa0d76dc9577265f37/work/work:
合計 0
d--------- 2 root root  6  8月 23 01:23 .
drwx------ 3 root root 18  8月 22 13:37 ..

○ Ubuntuコンテナを動作させる前のメモリの使用量と動作後の使用量の比較

<前>
              total        used        free      shared  buff/cache   available
Mem:           2.0G        148M        1.3G        8.6M        478M        1.6G
Swap:          1.9G          0B        1.9G

<動作中>
              total        used        free      shared  buff/cache   available
Mem:           1999         168        1257           8         573        1643
Swap:          1906           0        1906



<参考>
・Get Docker CE for CentOS
< https://docs.docker.com/install/linux/docker-ce/centos/ > 2018年8月23日

・Gracefully Stopping Docker Containers
< https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/ > 2018年8月23日

・Why docker has ability to run different linux distribution? [closed]
< https://stackoverflow.com/questions/25444099/why-docker-has-ability-to-run-different-linux-distribution?noredirect=1&lq=1 > 2018年8月23日

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


Dockerコンテナに加えた変更は、そのコンテナを終了して次回オリジナルのイメージから起動しても復元されない。
内容変更済みのコンテナは、終了する前に、別名でイメージ化することで維持することが可能である。

その手順を下記に記している。


■centosイメージをDocker Hubから取得してコンテナを起動

イメージ(centos)からコンテナを作成し、
コンテナ内のbashコマンドを実行するように指定したので、そのコマンドプロンプトが表示された。

[root@localhost ~]# docker run -it centos bash
[root@97e4da7f0251 /]#

以降、このコンテナ内に、例としてパッケージの導入することで変更を加えていく。


■起動したコンテナにおいて何かパッケージをインストール

○試しに、ifconfig コマンドを実行

初期状態では、ifconfigコマンドは存在しないため、not found となった。

[root@97e4da7f0251 /]# ifconfig
bash: ifconfig: command not found

○ifconfig コマンドを含む net-toolsパッケージをインストール

[root@97e4da7f0251 /]# yum install net-tools
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
base                                                     | 3.6 kB     00:00   
extras                                                   | 3.4 kB     00:00   
updates                                                  | 3.4 kB     00:00   
(1/4): extras/7/x86_64/primary_db                          | 186 kB   00:00   
(2/4): base/7/x86_64/group_gz                              | 166 kB   00:00   
(3/4): updates/7/x86_64/primary_db                         | 5.2 MB   00:00   
(4/4): base/7/x86_64/primary_db                            | 5.9 MB   00:01   
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.22.20131004git.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package         Arch         Version                          Repository  Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.22.20131004git.el7         base       305 k
Transaction Summary
================================================================================
Install  1 Package
Total download size: 305 k
Installed size: 917 k
Is this ok [y/d/N]:
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/net-tools-2.0-0.22.20131004git.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for net-tools-2.0-0.22.20131004git.el7.x86_64.rpm is not installed
net-tools-2.0-0.22.20131004git.el7.x86_64.rpm              | 305 kB   00:00   
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-5.1804.1.el7.centos.x86_64 (@Updates)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : net-tools-2.0-0.22.20131004git.el7.x86_64                    1/1
  Verifying  : net-tools-2.0-0.22.20131004git.el7.x86_64                    1/1
Installed:
  net-tools.x86_64 0:2.0-0.22.20131004git.el7                                 
Complete!

○パッケージの導入が終わったので、ifconfigコマンドを再び実行

今度は、コマンドが実行できるようになった。

[root@97e4da7f0251 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 4470  bytes 13690881 (13.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3750  bytes 257994 (251.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

これで、コンテナに変更が加わった。


■変更を加えたコンテナを別のイメージとして保存

 上記では、コンテナに何かパッケージをインストールしてコンテナに変更を加えた。
しかし、そのままこのコンテナを終了し、再度イメージからコンテナを起動しても、変更は復元されない
 復元するには、パッケージやファイルなど変更したコンテナを終了する前にイメージ化する必要がある


○ 現存するimageの一覧

centos というイメージがオリジナルである。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              5182e96772bf        2 weeks ago         200MB

○ 動作中のコンテナのIDの確認

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
97e4da7f0251        centos              "bash"              2 hours ago         Up 2 hours                              gifted_fermi

○ 上記コンテナを新しい名前でイメージ化

この変更済みコンテナ(97e4da7f0251)から、イメージを別名(centos-test)で新規作成する。

# docker commit 97e4da7f0251 centos-test
sha256:b48aa8f6e884845571ec780e5583ae59a3165604641685a8beb6c43e4bf12a06

○ imageの一覧

作成した新規イメージを確認できる。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos-test         latest              b48aa8f6e884        8 seconds ago       293MB
centos              latest              5182e96772bf        2 weeks ago         200MB


■保存したイメージからコンテナを起動

# docker run -it centos-test bash

ifconfigコマンドが利用できる状態である。

[root@b3b25c971605 /]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 648 (648.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
念の為、パッケージの状態を確認した。
下記の通り、インストール済みになっている。

[root@b3b25c971605 /]# yum info net-tools
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Installed Packages
Name        : net-tools
Arch        : x86_64
Version     : 2.0
Release     : 0.22.20131004git.el7
Size        : 917 k
Repo        : installed
From repo   : base
Summary     : Basic networking tools
URL         : http://sourceforge.net/projects/net-tools/
License     : GPLv2+
Description : The net-tools package contains basic networking tools,
            : including ifconfig, netstat, route, and others.
            : Most of them are obsolete. For replacement check iproute package.

以上



<参考>
・I lose my data when the container exits
< https://stackoverflow.com/questions/19585028/i-lose-my-data-when-the-container-exits > 2018年8月24日

・Difference between save and export in Docker
< https://tuhrig.de/difference-between-save-and-export-in-docker/ > 2018年8月24日

・docker commit
< https://docs.docker.com/engine/reference/commandline/commit/ > 2018年8月24日

・How to commit changes to a docker image
< https://www.techrepublic.com/article/how-to-commit-changes-to-a-docker-image/ > 2018年8月24日

2018年8月12日日曜日

【YAMAHA RTXシリーズ】RTX1200をRTX1210に置き換える際のコンフィグの移し替えやファームアップデートについて【Linux CentOS 7】

RTX1200をRTX1210に置き換える。
その際のコンフィグファイルの移し替え、ファームウェアのアップデートを行った。
いずれも、tftpコマンドを用いた。
使用したマシンは、Linux(CentOS 7)である。

(注意)
RTX1210のシリアル番号が、次のページに載っているものは、ファームウェアのアップデートに注意が必要である。
詳細は次のページを参考にする。
https://network.yamaha.com/support/rtx1210_boot/



□telnetと、tftpをインストール

# yum install telnet

# yum install tftp
インストール:
  tftp.x86_64 0:5.2-22.el7                                                   
完了しました!
$ tftp --help
Usage: tftp [-4][-6][-v][-V][-l][-m mode][-w size] [-R port:port] [host [port]] [-c command]


■RTX1200にtftpで接続してコンフィグデータを取得しファイルに保存

○RTX1200が、tftp接続を受け入れるように設定

予め、RTX1200にtelnet接続して、tftp host any コマンドを入力しておく。


○コンフィグデータの取得

接続先は、192.168.1.1 で、
作成するファイルの名前は、rtx1200-192.168.1.1.txt とする。

$ tftp 192.168.1.1 -c get config/PASSWORD rtx1200-192.168.1.1.txt


○エラーのチェック

念の為、転送時のエラーによるテキストの破損がないか確認するため、
もう一度、取得コマンドを発行しコンフィグデータを取得し、別ファイルを生成して、
diffコマンドで比較しておく。

tftp 192.168.1.1 -c get config/PASSWORD rtx1200-192.168.1.1-2.txt
$ diff rtx1200-192.168.1.1.txt rtx1200-192.168.1.1-2.txt 
6c6
< # Reporting Date: Aug xx xx:02:36 2018
---
> # Reporting Date: Aug xx xx:07:36 2018
上記のように、生成時間だけが異なっているので、おそらくエラーはないと確認できた。


○保存したファイルの表示

$ cat rtx1200-192.168.1.1.txt

# RTX1200 Rev.10.01.65 (Tue Oct 13 12:23:48 2015)
# MAC Address :
# Memory 128Mbytes, 3LAN, 1BRI
# main:  RTX1200
#
# Reporting Date:
# If you want to clear ALL configuration to default,
#  remove `#' of next line.
#clear configuration

#
# System configuration
#

(省略)


# If you want to save configuration to Nonvolatile memory,
#  remove `#' of next line.
#save


■tftpであRTX1210にファームウェアを書き込む

○ファームウェアをダウンロード

次のページから、対応するファームウェア(bin)と、md5チェックサム(md5)をダウンロードした。
http://www.rtpro.yamaha.co.jp/RT/firmware/index.php

これら、binファイルと、md5ファイルは同じディレクトリに置いた。


○ファームウェアのチェックサムを確認

md5ファイルには、対象ファイル名とそのチェックサムについて記述があり、
md5sumコマンドが自動的にそのファイルをチェックする。

$ md5sum -c rtx1210.md5 
rtx1210.bin: 完了

○RTX1210が、tftp接続を受け入れるように設定

予め、RTX1210にtelnet接続して、tftp host any コマンドを入力しておく。
RTX1210の初期IPアドレスは、192.168.100.1 である。

更新前のファームウェアのバージョンは、Rev.14.01.16 だった。

$ telnet 192.168.100.1
# show config
# RTX1210 Rev.14.01.16 (Tue Nov 22 19:03:24 2016)
# MAC Address :
# Memory 256Mbytes, 3LAN, 1BRI
# main:  RTX1210
# Reporting Date:
ip lan1 address 192.168.100.1/24
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
dashboard accumulate traffic on
# tftp host any
# save

○tftpコマンドでチェックサムを確認済みのファームウェアを書き込む。

RTX1210の初期IPアドレスは、192.168.100.1 である。

$ tftp -m binary -v 192.168.100.1 -c put rtx1210.bin exec
Connected to 192.168.100.1 (192.168.100.1), port 69
putting rtx1210.bin to 192.168.100.1:exec [octet]
このとき、telnetを192.168.100.1のRTX1210に接続していると、次のようにメッセージが表示される。
>
Update exec file receiving... Testing received file... Writing to Nonvolatile memory... done
Restarting ...
Connection closed by foreign host.
そして、RTX1210は自動的に再起動された。

再度、RTX1210にtelnet接続してバージョンを確かめた。
Rev.14.01.32に更新されていることがわかった。
> show environment
RTX1210 BootROM Ver. 1.03
RTX1210 FlashROM Table Ver. 1.00
RTX1210 Rev.14.01.32 (Thu Jul 26 20:21:20 2018)


■tftpコマンドでRTX1210に旧来のコンフィグを書き込む

○コンフィグファイルの修正

書き込むコンフィグファイルは、必要に応じて、clearコマンドを前置しておく。
# If you want to clear ALL configuration to default,
#  remove `#' of next line.
#clear configuration

○コンフィグの書き込み

使用したコンフィグファイルは旧来から使用のRTX1200のものである。
これをRTX1210に書き込んだ。

tftpコマンドで書き込みを行った。
PASSWORDは、初期状態のRTX1210では空欄である。(だから、config/ でよい。)

$ tftp -m ascii -v 192.168.100.1 -c put rtx1200-192.168.1.1.txt config/PASSWORD
Connected to 192.168.100.1 (192.168.100.1), port 69
putting rtx1200-192.168.1.1.txt to 192.168.100.1:config/ [netascii]
Sent ***** bytes in 0.0 seconds [18045989 bit/s]

○チェック

新しい設定の入ったRTX1210へtelnet でアクセスして、書き込まれているかチェックした。
念の為、saveコマンドを発行した。

また、上述したように、diffコマンドを使ってコンフィグファイルの差異を比較できるので、
RTX1200でのオリジナルコンフィグファイルと、それをRTX1210に書き込んでからRTX1210から取得できるコンフィグファイルの差異を比較することができる。
これによって、何かエラーなどによって蹴られて受け付けられなかったコマンドも確認できる。

自分の場合は、差異はあったものの、コマンドの存在位置が多少異なっているに過ぎなかった。


投げ銭

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

Ad

Ad