Global lo0

One good turn deserves another. GPS×ImageProcess×...

dockerの弱点まとめ

dockerの弱点まとめ

f:id:kuri_megane:20181015234955p:plain

コンテナ技術で人気*1のdockerですが,使っていくうちにほんの僅かな弱点も見つかってきました.


ざっくりまとめると...

  • sudo権限が必要
  • windowsではできることが限られる
  • ホスト側とコンテナ側でユーザーIDを気にする(かも)

目次


前提

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を使うのは,UbuntuCentOSなどのサーバOSが多いかと思います. このとき,sudo権限が必要なのが問題となる場合があるかもしれません.

qiita.com

(このことに私はあまり詳しくないですが...)

windowsではできることが限られる

1. windows8.1 に docker Toolbox を使ってPythonプログラムを動かしたら日本語が文字化けしてコンテナから追い出された

(エラー文)

New state of ‘nil’ is invalid.

(原因)

これは日本語のようなマルチバイト文字の表示の際に起こりました.

(解決策)

  • 試してうまくいった解決策
    • 日本語を標準出力しない
    • windows10 を使う

こちらの記事が参考になりました.

Docker ToolboxでNew state of ‘nil’ is invalid.と表示された時の対応 – 知識日記@IT中心

  • その他の解決策*2
    • コンテナ側にSSHを入れてSSH接続で動かす*3

2. GUIは厳しい

(エラー文)

OpenCVcv2.imshow を動かそうとしたときです.

Gtk-WARNING **: cannot open display:

(原因)

Ubuntu×Python×OpenCVでしたが,これらは X Window SystemGUIを動かします.Windowsとは異なるため,一筋縄とはいかないようです.

(解決策)

  • 苦肉の策
  • その他の解決策*4
    • コンテナ側にSSHを入れてSSH接続で動かす

ホスト側とコンテナ側でユーザーIDを気にする(かも)

Dockerfile にこんなコードを書いたとします.

RUN useradd newuser
RUN echo 'newuser:newuserpass' |chpasswd
RUN echo "newuser    ALL=(ALL)       ALL" >> /etc/sudoers

この新しいユーザーのユーザーIDは1001になるでしょう.

ここで,次の条件が重なると困ります.

  1. ホスト側のユーザーIDが1001でない
  2. ホスト側のディレクトリをコンテナにボリュームとしてマウント
  3. コンテナからホスト側にファイルやディレクトリを作成

このとき,コンテナが作成したファイルはディレクトリは,ホスト側のユーザーID1001のユーザーの権限になります.

次の記事が参考になります.

unskilled.site

コンテナのユーザーがrootのときも,同様のことがあるようですね.

最後に

大きく3つ書きましたが,他にも弱点はあるかもしれません. また見つかったときには,加筆したいと思います.

ですが,それ以外は本当に便利なdockerだと感じています. 便利なdockerの使い方はまた別記事で紹介します.

参考

www.docker.com

docs.docker.com

Docker ドキュメント日本語化プロジェクト — Docker-docs-ja 17.06.Beta ドキュメント

*1:私の個人的な意見です.

*2:試してません.

*3:dockerのコンテナにSSHを入れるのは良くないという記事もあるようです.

*4:試してません.