この記事はroot権限が無い前提で書いた。たとえば学校のサーバーのような環境である。学校では生徒がsudoできることなどありえないので、非力なユーザー権限で過酷な環境を生き抜くサバイバルの方法を記録する。ただし、以下の作業はストレージ容量を十数GB必要とするので/tmp以下で作業することをおすすめする。

Rootless Dockerなんてものもあった

Docker 19.03 の新機能で、Docker Daemon の起動に root 権限が要らなくなった。しかしこれはDockerのコンテナの脆弱性からホストOSを守ることを想定して追加された機能で、root権限を持っていない人がDockerを使うことができるようにするものではない。

つまり、ユーザーがホストにそのままDockerをいれることはできない。

VMを立てる

QEMUでUbuntu Serverなどの仮想マシンを立てて、その中にDockerをいれることを考える。仮想マシンとホスト間はユーザー権限でポート接続できる。

QEMUをインストール

1
2
3
4
5
wget https://download.qemu.org/qemu-4.2.0.tar.xz
cd qemu-4.2.0
./configure --prefix=$HOME/local
make -j64 # j64でも10分くらいかかったので注意
make install

依存関係でエラーが出たらlinuxbrewとかでいれる。たしか全部linuxbrewに登録されていた。

ISOをダウンロード

お好きなOSのISOをダウンロードすればいいが、ここでは私がよく使うUbuntu Serverで試す。

1
wget http://mirror.as29550.net/releases.ubuntu.com/18.04.3/ubuntu-18.04.3-live-server-amd64.iso

仮想マシンにインストール

まず仮想ハードディスクを作成する。

1
qemu-img create -f qcow2 ubuntu_server.qcow2 64G

cdromを指定し、そこからブートするようにする。

1
qemu-system-x86_64 -enable-kvm -m 8192 -boot order=d -cdrom ubuntu-18.04.3-live-server-amd64.iso ubuntu_server.qcow2

VNCクライアントの準備をする

ローカルのPCにVNCクライアントをいれる。ここではChrome拡張機能の「VNC Viewer for Google Chrome」を使用する。

ユーザー権限しか無いようなサーバーではポートを開けることなどできないと思うので、ローカルフォワーディングでポートを接続する。

1
2
# ローカルPCで
ssh -p 22 hoge@example.com -NfL 5900:localhost:5900

仮想マシンの起動

kvmデバイスにアクセスできれば、-enable-kvmオプションを付けたほうがハードウェアの仮想化支援が受けられるので動作が高速になる。

1
qemu-system-x86_64 -enable-kvm -m 8192 ubuntu_server.qcow2 -net user,hostfwd=tcp::10022-:22 -net nic

Dockerのインストール

vm内ではsudoが使えるので、適宜Dockerをインストールする。

1
2
3
4
5
6
7
# https://qiita.com/myyasuda/items/cb8e076f4dba5c41afbc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable test edge"
sudo apt-get update
sudo apt-get install docker-ce

これでVMの中のDockerのUbuntuが起動するはずだ。(物理サーバーの中のVMのUbuntuの中のDockerのUbuntu)

1
sudo docker run -it ubuntu bash

その他

仮想マシン起動時に仮想マシン内の22番ポートとホストの10022ポートを接続したので、仮想マシンへはホストOSからssh -p 10022 hoge@localhostで接続できる。

-ncursesモードや-nographicsモードもあるみたい。vncは何かと不便なので、-nographicsモードで起動しといて、バックエンドで常時起動させとけば良さそう。

完成

これでユーザー権限があるだけで、Dockerでもなんでもかんでもやりたい放題になった。(バンザイ!)あとはサーバーを立てるなり、リモートデスクトップをするなり、お好きなようにしていただきたい。

Windowsを起動したときの記念写真
Windowsを起動したときの記念写真