Ubuntuの公式デスクトップ起動とアクセスまでをDockerで実施したのでまとめました。
今回のDockerコンテナは公式イメージから実施していますが、コンテナ起動時に実行する「/sbin/init」を動かないので、「/sbin/init」が使えるように、公式イメージをカスタマイズしたものを使用します。
Ubuntu公式のGUIデスクトップまでは立ち上がり、アクセスまで確認はしていますが、一度ログアウト、コンテナ再起動をしてしまうとうまく動かなくなってしまうので、検証用として使うようにしてください。
問題なく使えるようになれば再度ご報告します。
「Dokcer」Ubuntu公式イメージでGUIデスクトップを起動・接続するまでの手順
Dockerではコンテナに対して色々と制限がかかっています。
今回のUbuntuで言うと「systemctl」がデフォルトでは動きません。
「systemctl」はUbuntuデスクトップを起動する際に、リモート接続として、「xrdp」をインストールします、その際、systemctlコマンドを実行して起動します。
このコマンドが使用できないと、デスクトップを起動してもアクセスができない状態となってしまいます。
そのため、「docker run」コマンド実行時に「privileged」オプションを付与し、「/sbin/init」を実行することで制限が外れ、「systemctl」が使用できるようになります。
「/sbin/init」で起動する手順は以下のページも参考にしてください。
Ubuntu公式イメージでDockerコンテナを起動(/bin/bash)
Ubuntu公式イメージそのままでは「/sbin/bash」は動かないのでまずは通常にコンテナを起動します。
以下では起動時に「privileged」オプションを使用し、ssh(22)、リモートデスクトップ(3389)、VNC(5901)の各ポートでアクセスできるようにし、実行します。
$ docker run -itd --privileged -p 3222:22 -p 13389:3389 -p 5901:5901 --name ubuntu --hostname ubuntu:latest ubuntu 6a77e56ccb22a872923106af7fe3a4c698cdb857954e79272def334fea1452d1
Ubuntuコンテナ起動後、以下のように正常に起動ができたことを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a77e56ccb22 ubuntu "/bin/bash" 13 seconds ago Up 8 seconds 0.0.0.0:5901->5901/tcp, 0.0.0.0:3222->22/tcp, 0.0.0.0:13389->3389/tcp ubuntu
Dockerコンテナ起動後、Ubuntuコンテナにアクセスします。
$ docker exec -it ubuntu /bin/bash root@ubuntu:latest:/#
Ubuntuコンテナアクセス後、以下コマンドを実行すると「PID1」が「/bin/bash」で使われていることが確認できます。
これが原因で「/sbin/bash」が使用できず、「suystemctl」が使えない状態となってしまいます。
root@25ea4973ebfb:/# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 3744 2916 pts/0 Ss+ 02:30 0:00 /bin/bash root 9 0.1 0.1 3744 2964 pts/1 Ss 02:30 0:00 /bin/bash root 17 0.0 0.1 5472 2232 pts/1 R+ 02:30 0:00 ps -aux
「Dockekr」Ubuntuコンテナをカスタマイズする
次にこのUbuntuコンテナがsystemctlを使えるようにコンテナに必要となるパッケージをインストールします。
事前のUbuntuアップデートを実施
root@ubuntu:latest:/# apt -y update root@ubuntu:latest:/# apt -y upgrade
「/sbin/init」が使えるように「init」をインストールし、「systemctl」もインストールしておきます。
root@ubuntu:latest:/# apt-get install -y init root@ubuntu:latest:/# apt-get install systemd
ちなみに事前に以下のリモートデスクトップツール「xrdp」と、Ubuntu公式デスクトップをインストールしといたほうが後々楽かもです。
※動作確認はまだしていないです。
root@ubuntu-test:/# apt-get -y install xrdp root@ubuntu-test:/# apt-get -y install ubuntu-desktop
上記インストール完了をコンテナからログアウトします。
root@ubuntu:latest:/# exit
カスタマイズしたUbuntuコンテナから新規にイメージを作成する
次に上記でカスタマイズしたコンテナイメージから新しいイメージを作成します。
以下、コマンドで対象のコンテナイメージの「CONTAINER ID」を確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a77e56ccb22 ubuntu "/bin/bash" 6 minutes ago Up 6 minutes 0.0.0.0:5901->5901/tcp, 0.0.0.0:3222->22/tcp, 0.0.0.0:13389->3389/tcp ubuntu
「docker commit」コマンドで対象のコンテナから、新規にDockerイメージを作成します。
$ docker commit 6a77e56ccb22 ubuntu-test:test sha256:1800d0ff0c096c93149a71538f9a53d44607f1888dafb726c21da5e2df71b3c7
以下コマンドで、新しくDockerイメージが作成されて居ることを確認します。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu-test test 4788f4c27c45 7 days ago 194MB ubuntu 16.04 1f93e87bc68f 3 weeks ago 119MB
作成した、Dockerイメージから新規にUbuntuコンテナを起動します。
ここで、カスタマイズしたイメージには「init」パッケージをインストールしているので「/sbin/init」コマンドで起動することができます。
$ docker run -itd --privileged -p 3222:22 -p 13389:3389 -p 5901:5901 --name ubuntu-test --hostname ubuntu-test ubuntu-test:test /sbin/init 7386e5d47ad4247450b95b36ec26db35847b885c551800d62d7186f74756a0df
Ubuntuコンテナ起動後、コンテナにアクセスし、「ps -aux」コマンドでPID1が「/sbin/init」で起動していることが確認できます。
root@ubuntu-test:/# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.5 167660 10248 ? Ss May08 0:12 /sbin/init root 23 0.0 0.6 45384 12612 ? S<s May08 0:00 /lib/systemd/systemd-journald systemd+ 37 0.0 0.4 20968 8468 ? Ss May08 0:00 /lib/systemd/systemd-resolved systemd+ 38 0.0 0.3 89944 6192 ? Ssl May08 0:03 /lib/systemd/systemd-timesyncd message+ 41 0.0 0.2 8592 4564 ? Ss May08 0:09 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --sys root 43 0.0 0.8 26092 16308 ? Ss May08 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers root 45 0.0 0.3 16032 6212 ? Ss May08 0:04 /lib/systemd/systemd-logind root 48 0.0 0.0 2348 1412 tty1 Ss+ May08 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux root 54 0.0 0.1 3876 3088 pts/1 Ss May08 0:00 /bin/bash root 20219 0.0 0.2 232944 6012 ? Ssl May08 0:00 /usr/lib/policykit-1/polkitd --no-debug root 22485 0.0 0.1 6408 2700 pts/1 R+ 11:23 0:00 ps -aux
カスタムイメージ作成前に以下パッケージをインストールしていない場合は、起動後インストールしておきましょう。
root@ubuntu-test:/# apt-get -y install xrdp root@ubuntu-test:/# apt-get -y install ubuntu-desktop
「Docker」公式のUbuntuデスクトップへアクセス
上記起動後、実際にUbuntuコンテナへリモートデスクトップでアクセスします。
リモートデスクトップのアクセスは「localhost:13389」でアクセスします。
※以下はMacOSからのアクセスです。
アクセス後、以下のように「Welcome」画面が表示されるので、手順にしたがって進みます。
公式のUbuntuデスクトップが表示されます。
インターネットの確認も問題なくできました。
DockerでUbuntuの公式デスクトップを起動・アクセスする方法は以上となります。
Dockerを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す