Dockerでubuntu24のリモートデスクトップ接続できるコンテナ

ubuntuが最近22から24になった。

ローカルlinuxを先に22から24へバージョン上げた

xrdpコンテナも自分のメモ見ながらバージョン上げたる。

20から22にバージョン上げた時はdanchitnisさんのものを使わせてもらって、いい勉強になった。

さて今回はどうやろ。

compose.ymlを準備

⭐️の箇所を22から24に変えたらええ。
永続化領域もcl_ubun22からコピーして用意しとく。

  cl_ubu24gvis:                         ⭐️
    image: gvis-ubu24:24gvis            ⭐️
    privileged: true
    hostname: clubu24                   ⭐️
    ports:
      - "33389:3389"
    volumes:
      - ./nariDockerDat/cl_ubun24:/gvis ⭐️
    tty: true
    shm_size: 512m

Dockerfileを用意

dockerhubのubuntuの公開具合を見て24.04のタグがあることを確認しとく。

https://hub.docker.com/_/ubuntu/tags

自分が見た時はrollingってタグのdigestがc279a739b31eって入ってた。
digestを検索すると、nobleとlatestと24.04のタグにも同じのがついてる。

今はこれでええんやけど、24.10ってとこのタグがnoneってdigestになって書いてある。

もうすぐ24.10出るってことか?

noneじゃdocker pullして使えんから、24.04指定してdockerfile用意しよか。

# https://github.com/danchitnis/container-xrdp

FROM ubuntu:24.04 AS ububase

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update 
RUN apt-get -y upgrade

RUN apt-get install -y \
    xfce4 \
    xfce4-clipman-plugin \
    xfce4-cpugraph-plugin \
    xfce4-netload-plugin \
    xfce4-screenshooter \
    xfce4-taskmanager \
    xfce4-terminal \
    xfce4-xkb-plugin \
    dbus-x11                ⭐️足しとかんとコンテナ実行時にdbusエラー出る

RUN apt-get install -y \
    sudo \
    wget \
    xorgxrdp \
    xrdp \
    tzdata \
    ibus \
    ibus-mozc \
    language-pack-ja-base \
    language-pack-ja \
    fonts-noto-cjk \
    fonts-noto-color-emoji && \
    apt remove -y light-locker xscreensaver && \
    apt autoremove -y && \
    rm -rf /var/cache/apt /var/lib/apt/lists

RUN locale-gen ja_JP.UTF-8 \
    && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
    && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
ENV LANG=ja_JP.UTF-8 \
    LANGUAGE=ja_JP:ja \
    LC_ALL=ja_JP.UTF-8 \
    TZ=Asia/Tokyo
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && echo 'Asia/Tokyo' > /etc/timezone


COPY ./build/ubuntu-run.sh /usr/bin/
RUN mv /usr/bin/ubuntu-run.sh /usr/bin/run.sh
RUN chmod +x /usr/bin/run.sh

# https://github.com/danielguerra69/ubuntu-xrdp/blob/master/Dockerfile
RUN mkdir /var/run/dbus && \
    cp /etc/X11/xrdp/xorg.conf /etc/X11 && \
    sed -i "s/console/anybody/g" /etc/X11/Xwrapper.config && \
    sed -i "s/xrdp\/xorg/xorg/g" /etc/xrdp/sesman.ini && \
    echo "xfce4-session" >> /etc/skel/.Xsession

##############
## For gvis
##############

RUN apt-get -y update 
RUN apt-get -y upgrade

RUN apt-get install -y \
    fonts-ipafont \
    git \
    curl \
    featherpad \
    gvfs-backends \
    nmon \
    vim \
    dnsutils \
    iputils-ping \
    net-tools \
    iproute2 \
    mysql-client \
    libreoffice \
    libreoffice-l10n-ja \
    libreoffice-dmaths \
    libreoffice-ogltrans \
    libreoffice-writer2xhtml \
    libreoffice-pdfimport \
    libreoffice-help-ja \
    evince \
    file-roller \
    ristretto \
    software-properties-common \
    gnome-calculator && \
    apt autoremove -y && \
    rm -rf /var/cache/apt /var/lib/apt/lists

RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
RUN /usr/bin/sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
RUN apt install apt-transport-https
RUN apt update
RUN apt install code

RUN apt remove snap
## RUN apt-get install software-properties-common
RUN add-apt-repository ppa:mozillateam/ppa
RUN echo "Package: firefox*"                 >  /etc/apt/preferences.d/mozillateamppa
RUN echo "Pin: release o=LP-PPA-mozillateam" >> /etc/apt/preferences.d/mozillateamppa
RUN echo "Pin-Priority: 1001"                >> /etc/apt/preferences.d/mozillateamppa
RUN apt-get -y update 
RUN apt-get -y upgrade
RUN apt install firefox xul-ext-ubufox

## RUN curl https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
## RUN echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
## RUN apt-get -y update 
## RUN apt-get -y upgrade
## RUN apt install google-chrome-stable libu2f-udev

# 配下の.DS_Storeと._xxx を削除
RUN echo "function removegomi () {"                >> /root/.bashrc
RUN echo "  find . \( -name '.DS_Store' -or -name '._*' \) -delete -print;" >> /root/.bashrc
RUN echo "}"                                       >> /root/.bashrc
RUN echo "alias rmgomi=removegomi"                 >> /root/.bashrc

RUN echo "alias sc='cd /gvis/script'"              >> /root/.bashrc
RUN echo "alias tree=\"pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--/;s/\/[^/|]*/|  /g'" \" >> /root/.bashrc
RUN echo "alias dff='df -h | grep -v DockerSys | grep -v "dev/loop"' "                                 >> /root/.bashrc
RUN echo "PATH=/gvis/script/proc:$PATH:$HOME/bin"  >> /root/.bashrc
RUN echo "export PATH"                             >> /root/.bashrc

RUN userdel -r `cat /etc/passwd | grep 1000 | awk -F':' '{print $1}'` 
RUN useradd -m -s /usr/bin/bash -u 1000 nari ⭐️なんでかuid=1000はubuntuって名前の一般ユーザがあったので削除してから作成

RUN sudo su - nari

# 配下の.DS_Storeと._xxx を削除
RUN echo "function removegomi () {"                >> /home/nari/.bashrc
RUN echo "  find . \( -name '.DS_Store' -or -name '._*' \) -delete -print;" >> /home/nari/.bashrc
RUN echo "}"                                       >> /home/nari/.bashrc
RUN echo "alias rmgomi=removegomi"                 >> /home/nari/.bashrc

RUN echo "alias sc='cd /gvis/script'"              >> /home/nari/.bashrc
RUN echo "alias tree=\"pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--/;s/\/[^/|]*/|  /g'" \" >> /home/nari/.bashrc
RUN echo "alias dff='df -h | grep -v DockerSys | grep -v "dev/loop"' "                                 >> /home/nari/.bashrc
RUN echo "PATH=/gvis/script/proc:$PATH:$HOME/bin"  >> /home/nari/.bashrc
RUN echo "export PATH"                             >> /home/nari/.bashrc

FROM ububase

# Docker config
EXPOSE 3389
ENTRYPOINT ["/usr/bin/run.sh"]

dbus関連のモジュールがないとrdpした直後にエラー出てまうのと、uid=1000が使われてしもてたのを潰して自分のidに変えた。

こうしとかな永続化領域のパーミッションについてるuid変えなアカンようになる。

chromeのインストールはgoogle cloudのxrdpの中だけで使うからローカルのコンテナではコメント化。

ビルド実行

ビルド時間かかるねんなぁ。

ビルドのやり方

githubから公開元のdockerコンテナ材料を取ってきてビルドする。

だいたいのコンテナはdocker compose使う方法書いてへんからアレンジせなあかんのは今も変わらず。

cd /docker/nariDockerDat/cl_ubun24/download
git clone https://github.com/danchitnis/container-xrdp.git
cd container-xrdp
vi ./ubuntu-xfce/Dockerfile-gvis.txt  ⭐️さっき用意したDockerfileを貼り付ける
docker build -f ./ubuntu-xfce/Dockerfile-gvis.txt -t ubu:24gvis .

ビルド結果

何回かビルドでエラーになったけど、廃れたモジュールは記述から外して必要そうなのを書き足した。

最終的にdocker system pruneして実行したビルド。

300秒ぐらいで終わることもあったけど、イメージ置き場にキャッシュが残ってるからかな。

何度かやりなおして10分ぐらいかかった。

nari@nafslinux-ubu24:/docker/nariDockerDat/cl_ubun24/download/container-xrdp$ docker build -f ./ubuntu-xfce/Dockerfile-gvis.txt -t ubu:24gvis .
[+] Building 588.1s (53/53) FINISHED                                                 docker:default
 => [internal] load build definition from Dockerfile-gvis.txt                                  0.0s
 => => transferring dockerfile: 5.13kB                                                         0.0s
 => [internal] load metadata for docker.io/library/ubuntu:24.04                                2.2s
 => [internal] load .dockerignore                                                              0.0s
 => => transferring context: 2B                                                                0.0s
 => [internal] load build context                                                              0.0s
 => => transferring context: 1.73kB                                                            0.0s
 => [ububase  1/48] FROM docker.io/library/ubuntu:24.04@sha256:e3f92abc0967a6c19d0dfa2d558388  1.6s
 => [ububase  2/48] RUN apt-get -y update                                                      5.0s  
 => [ububase  3/48] RUN apt-get -y upgrade                                                     3.1s
 => [ububase  4/48] RUN apt-get install -y     xfce4     xfce4-clipman-plugin     xfce4-cpu  153.2s  
 => [ububase  5/48] RUN apt-get install -y     sudo     wget     xorgxrdp     xrdp     tzdat  21.3s
 => [ububase  6/48] RUN locale-gen ja_JP.UTF-8     && echo 'LC_ALL=ja_JP.UTF-8' > /etc/defaul  0.8s  
 => [ububase  7/48] RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime     && echo 'Asia/To  0.3s
 => [ububase  8/48] COPY ./build/ubuntu-run.sh /usr/bin/                                       0.0s  
 => [ububase  9/48] RUN mv /usr/bin/ubuntu-run.sh /usr/bin/run.sh                              0.2s
 => [ububase 10/48] RUN chmod +x /usr/bin/run.sh                                               0.3s  
 => [ububase 11/48] RUN mkdir -p /var/run/dbus &&     cp /etc/X11/xrdp/xorg.conf /etc/X11 &&   0.3s
 => [ububase 12/48] RUN apt-get -y update                                                      5.0s  
 => [ububase 13/48] RUN apt-get -y upgrade                                                     1.3s  
 => [ububase 14/48] RUN apt-get install -y     fonts-ipafont     git     curl     featherpad  67.0s  
 => [ububase 15/48] RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmo  0.3s  
 => [ububase 16/48] RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/   0.4s
 => [ububase 17/48] RUN /usr/bin/sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com  0.3s  
 => [ububase 18/48] RUN apt install apt-transport-https                                        0.3s  
 => [ububase 19/48] RUN apt update                                                           118.0s  
 => [ububase 20/48] RUN apt install code                                                       6.0s  
 => [ububase 21/48] RUN apt remove snap                                                        1.1s
 => [ububase 22/48] RUN add-apt-repository ppa:mozillateam/ppa                                 7.0s  
 => [ububase 23/48] RUN echo "Package: firefox*"                 >  /etc/apt/preferences.d/mo  0.2s
 => [ububase 24/48] RUN echo "Pin: release o=LP-PPA-mozillateam" >> /etc/apt/preferences.d/mo  0.3s  
 => [ububase 25/48] RUN echo "Pin-Priority: 1001"                >> /etc/apt/preferences.d/mo  0.2s
 => [ububase 26/48] RUN apt-get -y update                                                      1.9s
 => [ububase 27/48] RUN apt-get -y upgrade                                                     1.2s
 => [ububase 28/48] RUN apt install firefox xul-ext-ubufox                                   176.0s
 => [ububase 29/48] RUN echo "function removegomi () {"                >> /root/.bashrc        0.2s
 => [ububase 30/48] RUN echo "  find . \( -name '.DS_Store' -or -name '._*' \) -delete -print  0.2s
 => [ububase 31/48] RUN echo "}"                                       >> /root/.bashrc        0.2s
 => [ububase 32/48] RUN echo "alias rmgomi=removegomi"                 >> /root/.bashrc        0.3s
 => [ububase 33/48] RUN echo "alias sc='cd /gvis/script'"              >> /root/.bashrc        0.3s
 => [ububase 34/48] RUN echo "alias tree="pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/  0.2s
 => [ububase 35/48] RUN echo "alias dff='df -h | grep -v DockerSys | grep -v "dev/loop"' "     0.3s
 => [ububase 36/48] RUN echo "PATH=/gvis/script/proc:/usr/local/sbin:/usr/local/bin:/usr/sbin  0.3s
 => [ububase 37/48] RUN echo "export PATH"                             >> /root/.bashrc        0.2s
 => [ububase 38/48] RUN useradd -m -s /usr/bin/bash -u 1101 nari                               0.3s
 => [ububase 39/48] RUN sudo su - nari                                                         0.3s
 => [ububase 40/48] RUN echo "function removegomi () {"                >> /home/nari/.bashrc   0.3s
 => [ububase 41/48] RUN echo "  find . \( -name '.DS_Store' -or -name '._*' \) -delete -print  0.3s
 => [ububase 42/48] RUN echo "}"                                       >> /home/nari/.bashrc   0.2s
 => [ububase 43/48] RUN echo "alias rmgomi=removegomi"                 >> /home/nari/.bashrc   0.3s
 => [ububase 44/48] RUN echo "alias sc='cd /gvis/script'"              >> /home/nari/.bashrc   0.3s
 => [ububase 45/48] RUN echo "alias tree="pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/  0.2s
 => [ububase 46/48] RUN echo "alias dff='df -h | grep -v DockerSys | grep -v "dev/loop"' "     0.3s
 => [ububase 47/48] RUN echo "PATH=/gvis/script/proc:/usr/local/sbin:/usr/local/bin:/usr/sbin  0.3s
 => [ububase 48/48] RUN echo "export PATH"                             >> /home/nari/.bashrc   0.3s
 => exporting to image                                                                         8.5s
 => => exporting layers                                                                        8.5s
 => => writing image sha256:fb376515817dbf1b07c98de365f767a8d6adf450e899e4fd591bf0f1833ae032   0.0s
 => => naming to docker.io/library/ubu:24gvis                                                  0.0s
nari@nafslinux-ubu24:/docker/nariDockerDat/cl_ubun24/download/container-xrdp$ 

speedtest.netで800Mbpsぐらいの速度は出る状態でもこれぐらい。

イメージのサイズ確認してみる。

nari@nafslinux-ubu24:/docker$ docker images | egrep "22gvis|24gvis"
ubu                     24gvis       829170c7ba35   3 minutes ago   4.26GB
ubu                     22gvis       3314336c4a98   5 days ago      3.51GB
nari@nafslinux-ubu24:/docker$

22のときと比べたら700MBぐらいデカなっとる。
いらんもん入れてへんつもりなんやけどな。

使いながらダイエットしてこ。

ローカルlinuxのxrdpコンテナ

仮でコンテナ動かしてrdpログインしてからGUIで手動設定してく。
引数のパスワードは都度変える。

docker run -it -v /docker/nariDockerDat/cl_ubun24:/gvis -p 33389:3389 ubu:24gvis nari password yes

普通にrdp接続して開く。

xfceのネズミの壁紙見えて時計がJST、入力メソッドに日本語が使えたらうまいこといってる。

gvis-docker-ubu24xrdp

不足してるモジュールあってdbusでエラー出たり、ユーザidの1000がubuntuユーザとかになってて5回ぐらい作り直した。

ホンマの最初のxfce画面が表示できたときはやっぱり嬉しいもんよ。

ここではvscode設定とかsmb接続の認証情報を保存して、xfceの他の細かい設定もやっとく。

今まで記憶に頼ってときどき漏れがあったけどメモっとこ。

firefoxとかvscodeのインストールはdockerfileでやってるけど、GUI設定は手動でやらなアカン。

書いてみたら結構多いな。

  1. GUIの上パネルに見える時計を秒単位まで表示と、mozcへの切り替え、thunarのファイル表示を年月日時分秒に設定
  2. 母艦のubuntu24へsmb接続する認証情報の設定と、読み書きできること、パーミッション崩れがないことを確認
  3. xfceのシステムの設定でフォントをIPAゴシックに変更、キーボードを日本語配列にして(次にコンテナ起動したら有効になる)、壁紙設定と背景色を設定
  4. ターミナル内でdateって入れて日本語表示できてる確認と、alias設定でフォルダのツリー表示できる確認と、念のためaptの実行
  5. GUIの下パネルのほうにブラウザがあってfirefox起動できること、パネルに電卓/スクリーンショット/vscodeの追加
  6. firefoxをダークモードにしてフォントをIPAゴシックに変更し、母艦のapacheで公開しているURLをお気に入りに追加し、djangoページの認証情報を覚えさせる
  7. vscodeの起動オプションに--no-sandboxを足して.gitフォルダのあるフォルダを開いておき、プラグインにjapanese langpack/vscode-pdf/markdown pdf/gitgraph/git extensionを追加してからgitグラフ表示できるか確認
  8. テキストファイルをfeatherpadでダークモードで開く設定して、pdfがプレビューできる、xlsxファイルがlibreoofficeで開けることを確認
  9. google cloudのコンテナの場合はchrome起動してgmailとgoogle drive使えるように設定

ubuntu22のrdpにはスクリーンセーバとロック画面の設定あったけどubuntu24にはあらへん。

まぁええか。
GUIの設定は5分もかからず、やってみたらこうなる。

gvis-docker-ubu24xrdp

手動設定終わったらコミットしてイメージを置く。
dockerイメージはmacのminikubeに持ってって使うのよね。

そしたらGUIで手動設定した内容がkubernetesのpodで完全に同じ状態を維持して使えてまう。

docker commit `docker ps | grep 24gvis | awk '{print $NF}'` gvis-ubu24:24gvis

macのminikubeの中で動いているxrdpコンテナ

ローカルlinuxで動くコンテナの背景色をグレーにして動かしておいて、docker saveして作ったイメージをmacのminikubeに持ってきて、それをPodとして動かす。

gvis-docker-ubu22xrdp

なんかネットの速度遅いな。
別で調べるか。

結果

試行錯誤する箇所もあったけど、dockerの起動オプションで指定してる--data-root /docker/nariDockerSysdocker system pruneしてもあんまり小さくならん。

コンテナとイメージを全部潰してみても完全には消えてくれん。
母艦のssdに置いたvmdkも100GB程度になってたから、/dockerのパーティションごと作り直した。

nari@nafslinux-ubu24:/docker$ sudo du -shc * 
4.0K    DB11backup.sh
509M    DockerImages
0    DockerVol.txt
152K    _tmp
12G    backup
12K    compose-ALL.yml
4.0K    compose-current.yml
4.0K    compose-current20240608.yml
4.0K    compose.yml
4.0K    djangoDB11backup.sh
4.0K    djangoDB11restore.sh
52M    docker-compose
4.0K    docker.service.20210305.txt
4.0K    docker.service.20230204.txt
4.0K    dockerStart.sh
4.0K    dockerStop.sh
13G    nariDockerDat
42G    nariDockerSys
67G    合計
nari@nafslinux-ubu24:/docker$ 

合計67GBってあるのに、vmdkは59.6GBってあるのはなんでや?

gvis-docker-ubu22xrdp
タイトルとURLをコピーしました