トップ «前の日記(2020年10月07日) 最新 次の日記(2021年08月10日)» 編集

役に立たない情報


2020年10月13日 [OSX] macOSのDockerでUbuntuを動かしてX Windowの画面に出す

_ [Docker] macOSのDockerでubuntu 18.04を動かす

Dockerで便利だよね.軽いし.でもDockerって直感的じゃないんだよね.起動コマンドもdocker runとかdocker startとか違いとか,docker attachとdocker execの違いとか,イメージとかコンテナとかの関係性も初見殺しっぽいし.イメージを取得/作成するにしてDockerfileを用意する場合とレポジトリから取得する場合もあるし. んで,今回はレポジトリからdockerコマンドで取得する方法をざっくり書いていくね.あとDocker for macはインストールしたものとして,話をずんずん進めていくよ.

まずコンテナの素であるDockerイメージがどれだけあるか確認するコマンド,docker imagesからだ.

nigawa:~ kido$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xeyes               latest              13060792b6cd        19 hours ago        9.95MB
alpine              latest              a24bb4013296        4 months ago        5.57MB
nigawa:~ kido$

IMAGE IDはDockerイメージを特定するIDで,これを元にコンテナを作らなきゃいけないのね.コンテナが仮想OSのインスタンスね. で,ubuntu 18.04のイメージをレポジトリから持ってくるコマンドがこちら.

nigawa:~ kido$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
171857c49d0f: Pull complete
419640447d26: Pull complete
61e52f862619: Pull complete
Digest: sha256:646942475da61b4ce9cc5b3fadb42642ea90e5d0de46111458e100ff2c7031e6
Status: Downloaded newer image for ubuntu:18.04
nigawa:~ kido$
nigawa:~ kido$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xeyes               latest              13060792b6cd        19 hours ago        9.95MB
ubuntu              18.04               56def654ec22        2 weeks ago         63.2MB
alpine              latest              a24bb4013296        4 months ago        5.57MB
nigawa:~ kido$

これでイメージは取得できた. で,普通に

docker run --name test_ubuntu1804 -itd ubuntu:18.04 /bin/bash

ってすると,test_ubuntu1804っていうCONTAINER NAMEのコンテナが作成,起動しちゃうんだけど,今回はX Windowアプリを画面に出したいのね.だからちょっと変える.

_ [Docker] DockerコンテナからのX Windowアプリの表示を許す

macOSはX WindowがXQuartz というX11の実装を用意している.これを起動しておく必要がある.んで,XQuartzの環境設定からセキュリティyを

  • 接続を認証(Authenticate connections
  • ネットワーク・クライアントからの接続を許可(Allow connections from network clients

のチェックを入れておくのだ.これで事前準備オッケー.

で,Dockerのイメージ作成からやりなおし.

docker run -it -d --name test_ubuntu1804 -e DISPLAY=$(hostname):0 -v ~/.Xauthority:/root/.Xauthority ubuntu:18.04

これでDISPLAYでXサーバのホスト名(localhostでも127.0.0.1でもオッケー)を指定し,macOSの.Xauthorityをubuntuの/root/.Xauthorityとしてマウントするの.そうするとX Windowアプリが表示されるようになるぜ.その前に,ubuntuのパッケージ郡を更新しておいてね.

nigawa:~ kido$ docker exec -it test_ubuntu1804 /bin/bash
root@ecef00f1fad9:/# apt-get -y update
...
root@ecef00f1fad9:/# apt-get -y upgrade
...
root@ecef00f1fad9:/# apt install x11-apps
...
root@ecef00f1fad9:/# xeyes

これでDocker ubuntuのX Windowアプリが動く環境をmacOSで作れたぜ! もしX Windowアプリが表示されないときはDockerを再起動すればいいよ!じゃあね!

xeyes