前回、Ubuntuのイメージにx11-appsパッケージをインストールして、xeyesコマンドが通るところまでを確認した。今回は、これらの作業をDockerfile化することでもう少しDockerの理解を深めたい。
コンテナのライフサイクル
前回試したのはpull, run, (stop), pruneであった。停止状態のコンテナに対して、docker image commit
することで、イメージかすることが可能だが、このフローは非推奨らしい。Dockerfileを作成し、これをbuildしてイメージ化するのが推奨手順とのこと。
Dockerfileの作成
以下のようなdockerfileを作成した。
From ubuntu
RUN apt-get update
RUN apt-get install -y x11-apps
#VOLUME ~/.Xauthority:/root/.Xauthority
ENV DISPLAY "<IPADDR>:0"
CMD ["xeyes"]
dockerfileと同じディレクトリで
% docker image build ./ -t ubuntu-x11
% docker container run -v ~/.Xauthority:/root/.Xauthority ubuntu-x11
とすることで、前回と同様のことを実現できた。
コマンドの意味は、
- ここにあるdockerfileでubuntu-x11と言うイメージを作ってね
- ubuntu-x11と言うイメージからコンテナを立ち上げてね
Dockerfileでホストの.Xauthorityファイルをマウントしているつもりができておらず、xeyesを立ち上げた時に"No protocol specified"で怒られて、それの解決に時間がかかった。
結論から言うと、Dockerfile上でホストのパスを参照することはできない。このDockerfileを別の環境で利用した際に、同じパスにそのファイルがある保証がないから。言われてみればその通りだ。
と言うわけでDockerfile上でのマウントは行わず、コンテナ実行時に従来通りマウントするようにした。
最低限のdockerの操作について概観できたので、いよいよvivadoの立ち上げに移行する。