はじめに
Dockerfileを作るときにいつも思い出せなくてググってしまうのでメモにしました。
何番煎じかなという気もしますが...。
検索すると設定方法が複数出てくるので、ここに書いた方法でないといけないというわけではないです。
一般ユーザを追加する場合
- 
まず、
idコマンドでホストのユーザーIDとグループIDを確認します。$ id id=1000(hoge) gid=1000(hoge) groups=1000(hoge),.... - 
先程確認したユーザーIDとグループIDを使って、ユーザとグループを追加したDockerfileを作成します。例えば次のような形になります。
FROM ubuntu:latest ARG USERNAME=user ARG GROUPNAME=user ARG UID=1000 ARG GID=1000 RUN groupadd -g $GID $GROUPNAME && \ useradd -m -s /bin/bash -u $UID -g $GID $USERNAME USER $USERNAME WORKDIR /home/$USERNAME/- 
groupaddコマンドで新しいグループを作成します。-gオプションでグループIDを指定しています。 - 
useraddコマンドで新しいユーザーを作成します。オプションの意味は次の通りです。- 
-m,--create-homeホームディレクトリを作成します。 - 
-s,--shell SHELLログインシェルを指定します。 - 
-u,--uid UIDユーザーIDを指定します。 - 
-g,--gid GROUPプライマリグループのグループ名かグループIDを指定します。ちなみに省略した場合、環境によって「ユーザー名と同じグループ名が新たに作成される」「/etc/default/useraddに記述されたグループID」「デフォルトの100」のいずれかになるようです。参考: ubuntu manuals 
 - 
 
 - 
 
sudoを実行できるユーザーを追加する場合
- 
Dockerfile のベストプラクティスを見ると、Dockerコンテナ内で
sudoを使用すると問題を起こす可能性があるようです。とはいえどうしてもsudoを使いたい場合は次のようなユーザーを追加することで使用できます。FROM ubuntu:latest RUN apt-get update && apt-get install -y sudo ARG USERNAME=user ARG GROUPNAME=user ARG UID=1000 ARG GID=1000 ARG PASSWORD=user RUN groupadd -g $GID $GROUPNAME && \ useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \ echo $USERNAME:$PASSWORD | chpasswd && \ echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers USER $USERNAME WORKDIR /home/$USERNAME/- 
useraddコマンドに-G sudoが追加されています。-Gはセカンダリグループを指定するオプションで、ここではユーザーがsudo権限を持つグループに所属することを示します。 - 
echo $USERNAME:$USERNAME | chpasswdでパスワードを設定します。 - 
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoersでパスワードの入力なしでsudoを実行可能に設定します。 
 -