dockerの弱点まとめ
dockerの弱点まとめ
コンテナ技術で人気*1のdockerですが,使っていくうちにほんの僅かな弱点も見つかってきました.
ざっくりまとめると...
- sudo権限が必要
- windowsではできることが限られる
- ホスト側とコンテナ側でユーザーIDを気にする(かも)
目次
前提
- 試したホスト側: Ubuntu 18.04, Windows 8.1, Windows 10
- 試したコンテナのOS: Ubuntu 16.04
sudo権限が必要
これが一番の弱点ではないでしょうか. 公式にも次のように書かれています.
The docker group is created but no users are added to it. You need to use sudo to run Docker commands. Continue to Post-installation steps for Linux to allow non-privileged users to run Docker commands and for other optional configuration steps.
dockerグループが作成されますが、どのユーザが追加されていません。sudoDockerコマンドを実行するために使用する必要があります。非特権ユーザーがDockerコマンドを実行できるようにするLinuxのインストール後の手順に進み、その他のオプションの設定手順を続行します。
Get Docker CE for Ubuntu | Docker Documentation, 日本語はGoogle翻訳による.
dockerを使うのは,UbuntuやCentOSなどのサーバOSが多いかと思います. このとき,sudo権限が必要なのが問題となる場合があるかもしれません.
(このことに私はあまり詳しくないですが...)
windowsではできることが限られる
1. windows8.1 に docker Toolbox を使ってPythonプログラムを動かしたら日本語が文字化けしてコンテナから追い出された
(エラー文)
New state of ‘nil’ is invalid.
(原因)
これは日本語のようなマルチバイト文字の表示の際に起こりました.
(解決策)
- 試してうまくいった解決策
- 日本語を標準出力しない
- windows10 を使う
こちらの記事が参考になりました.
Docker ToolboxでNew state of ‘nil’ is invalid.と表示された時の対応 – 知識日記@IT中心
2. GUIは厳しい
(エラー文)
OpenCVで cv2.imshow
を動かそうとしたときです.
Gtk-WARNING **: cannot open display:
(原因)
Ubuntu×Python×OpenCVでしたが,これらは X Window SystemでGUIを動かします.Windowsとは異なるため,一筋縄とはいかないようです.
(解決策)
ホスト側とコンテナ側でユーザーIDを気にする(かも)
Dockerfile にこんなコードを書いたとします.
RUN useradd newuser RUN echo 'newuser:newuserpass' |chpasswd RUN echo "newuser ALL=(ALL) ALL" >> /etc/sudoers
この新しいユーザーのユーザーIDは1001になるでしょう.
ここで,次の条件が重なると困ります.
このとき,コンテナが作成したファイルはディレクトリは,ホスト側のユーザーID1001のユーザーの権限になります.
次の記事が参考になります.
コンテナのユーザーがrootのときも,同様のことがあるようですね.
最後に
大きく3つ書きましたが,他にも弱点はあるかもしれません. また見つかったときには,加筆したいと思います.
ですが,それ以外は本当に便利なdockerだと感じています. 便利なdockerの使い方はまた別記事で紹介します.