はじめに
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
を実行可能に設定します。
-