昨日の記事で、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 コマンドで確認できる。