競プロ C++ をdockerでコンパイルしたい 2

昨日の記事で、Ubuntu に build-essential をインストールするDockerfile を書いた。コンテナ内の bash から操作することで C++コンパイルを行う。 timtoronto634.hatenablog.com

今日はその続きで、

  • コンテナ内でrootではなくuserとして動き、コンパイルする

をできるようにした。

コンテナ内でユーザーとしてコンパイル

前回のままだと、コンテナ内ではrootユーザーとしてコンパイルを行っている。このままコンテナから出ると、(マウントしているので)実行ファイルは残っているのだが、host側から見たときに権限がrootになっている。これでは少し具合が悪い。毎回sudo chown等するのは論外である。

そこで、コンテナ内でユーザー権限で動けるようにして、かつdocker内でのユーザーIDをホストのユーザーと同じにする。

Dockerfile

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install -y build-essential 

RUN mkdir /codes

ARG UID=1000 # ホストのuser id を指定

# -m: create home 
RUN useradd -m -u ${UID} docker

# switch to the added user
USER ${UID}

1000 はホスト側のユーザーIDである linux であれば id コマンドで確認できる。