まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:vncserver

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 25 からはアプリケーション系コンテナとその GUI ツールを中心に紹介してます。ゴールも近づいてきた Day 28 はこの 30 日間で紹介するイメージの中でも最も自由度の高い Linux(Lubuntu) のデスクトップ環境を VNC 経由で利用する VNC Server(Lubuntu) イメージをデプロイする例を紹介します。
lubuntu0



【イメージの概要】
ずばり「Linux そのもの」です。Ubuntu 派生ディストーションの中でも比較的軽量な Lubuntu のデスクトップを VNC 経由で利用できるようにしたものです。コンテナの特性上、再起動をかけたり、VNC を再接続したりすると構築した環境がリセットされてしまいますが、Ubuntu のデスクトップ環境が使えると考えれば、アプリケーションの動作確認環境として、かなり自由度高くなんでもできてしまうコンテナイメージだと思っています。これが無料の k8s 環境で動くのは超魅力!


【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/vncserver.yaml

今回の Lubuntu + VNC Server も特にパラメータ指定不要で、そのままデプロイすることができます。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f vncserver.yaml

以下のコマンドで VNC Server 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 30901 番ポートで公開されていることを確認します:
$ kubectl get all

NAME                             READY   STATUS    RESTARTS   AGE
pod/vncserver-665b49d744-tsmms   1/1     Running   0          22s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   172.21.0.1     <none>        443/TCP          27d
service/vncserver    NodePort    172.21.129.4   <none>        5901:30901/TCP   22s

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/vncserver   1/1     1            1           23s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/vncserver-665b49d744   1         1         1       23s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは vnc://169.51.204.190:30901 で稼働している、ということになります。VNC クライアントを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます(ちなみにイメージ提供サイトによると VNC パスワードは vncpasswd のようです):
lubuntu1


Lubuntu のデスクトップが表示されました。IKS というコンテナ環境下で IaaS に近い環境を手に入れることができたことになります。apt コマンドでアプリケーションの追加インストールもできるので、かなり自由度高く使うことができると思われます(コンテナの特性上、再起動すると消えちゃいますけど):
lubuntu2



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: vncserver
spec:
  selector:
    app: vncserver
  ports:
  - port: 5901
    protocol: TCP
    targetPort: 5901
    nodePort: 30901
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vncserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vncserver
  template:
    metadata:
      labels:
        app: vncserver
    spec:
      containers:
      - name: vncserver
        image: vncserver/lubuntu
        ports:
        - containerPort: 5901

Deployment 1つと、Service 1つのシンプルな YAML ファイルです。一応解説を加えておきます。アプリケーションそのものは 5901 番ポートで動作するように作られているため、NodePort 30901 番を指定して、外部からは 30901 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう:
$ kubectl delete -f vncserver.yaml


【紹介したイメージ】
https://hub.docker.com/r/vncserver/lubuntu


【紹介記録】

Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 25 からはアプリケーション系コンテナとその GUI ツールを中心に紹介してます。Day 27 は PC DOS 環境をエミュレートする DOS Box イメージをデプロイする例を紹介します。
dosbox



【イメージの概要】
今日のイメージについては全く興味がない、という人もいると思います。自分の趣味の世界の話です。

昔の PC-DOS 時代のツールやゲームを今でも数多く所有しています。普段は Virtual PC などで DOS 環境を起動できるようにしています。そんな自分にとって、DOS エミュレーター環境はどうしても気になってしまい、ましてや DOS Box の環境をコンテナ環境で実現して、更にコンソールにもアクセスできる、という珍しさからつい動作確認してしまいました。


【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/dosbox.yaml

今回の DOS Box は内部的には VNC を使ってコンソールにアクセスします。というわけで、VNC の接続パスワードを事前に設定しておく必要があります。このファイルをテキストエディタで開いてパラメータを編集します。具体的には以下1箇所の value 値を変更してください:
・VNCPASSWORD : VNC ログイン時に指定するパスワード(初期値 P@ssw0rd)

ではこのダウンロード&編集した dosbox.yaml ファイルを指定してデプロイします。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f dosbox.yaml

以下のコマンドで DOS Box 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 30901 番ポートで公開されていることを確認します:
$ kubectl get all

NAME                          READY   STATUS    RESTARTS   AGE
pod/dosbox-6db44d7b8f-vx56g   1/1     Running   0          63s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/dosbox       NodePort    172.21.2.241   <none>        5901:30901/TCP   63s
service/kubernetes   ClusterIP   172.21.0.1     <none>        443/TCP          27d

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dosbox   1/1     1            1           64s

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/dosbox-6db44d7b8f   1         1         1       64s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは vnc://169.51.204.190:30901 で稼働している、ということになります。VNC クライアントを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます。接続時にパスワードを求められるので、yaml ファイルに記載したパスワードを入力します:
vnc0


上図のような画面になりました。(ちょっと xterm が邪魔ですが)裏で DOS コマンドプロンプトが起動していますね。なんとか IKS 内で DOS Box が起動できて、VNC ビューワ経由でアクセスすることができました。



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: dosbox
spec:
  selector:
    app: dosbox
  ports:
  - port: 5901
    protocol: TCP
    targetPort: 5901
    nodePort: 30901
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dosbox
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dosbox
  template:
    metadata:
      labels:
        app: dosbox
    spec:
      containers:
      - name: dosbox
        image: jgoerzen/dosbox
        env:
        - name: VNCPASSWORD
          value: "P@ssw0rd"
        ports:
        - containerPort: 5901

Deployment 1つと、Service 1つ、環境変数の指定も不要で本シリーズで紹介する 30 個の中でも指折りにシンプルな YAML ファイルです。一応解説を加えておきます。アプリケーションそのものは 5901 番ポートで動作するように作られているため、NodePort 30901 番を指定して、外部からは 30901 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう:
$ kubectl delete -f dosbox.yaml


【紹介したイメージ】
https://hub.docker.com/r/jgoerzen/dosbox


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

このページのトップヘ