Docker 컨테이너에서 sudo 권한이 있는 사용자 계정 사용하기
Ubuntu 기반 Docker 컨테이너에서 호스트의 사용자 계정 정보로 동일한 계정을 만들고 sudo 권한을 부여하는 방법을 정리한 글입니다.
Docker 컨테이너에서 sudo 권한이 있는 사용자 계정 사용하기
Docker 컨테이너는 기본적으로 root
계정으로 실행된다.
하지만 개발 환경을 구성할 때는 호스트의 사용자 계정 정보와 동일한 계정으로 sudo
권한을 가지고 작업하는 편이 더 편리하다.
아래 방법은 Ubuntu 기반 Docker 컨테이너에서 호스트 사용자 계정과 동일한 계정을 생성하고 sudo
권한을 부여하는 과정이다.
1. Dockerfile 작성
아래 Dockerfile은 빌드 시 USERNAME
, UID
, GID
, PASSWORD
를 전달받아 사용자 계정을 생성하고 sudo
권한을 설정한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
FROM ubuntu:22.04
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ARG USERNAME=mhlee
ARG UID=1000
ARG GROUPNAME=mhlee
ARG GID=1000
ARG PASSWORD
RUN apt update && apt install -y sudo \
&& groupadd -g $GID $GROUPNAME \
&& useradd -m -u $UID -g $GID $USERNAME \
&& echo "$USERNAME:$PASSWORD" | chpasswd \
&& chsh -s /bin/bash $USERNAME \
&& usermod -aG sudo $USERNAME \
&& echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
&& chown -R $USERNAME:$GROUPNAME /home/$USERNAME
USER $USERNAME
WORKDIR /home/$USERNAME
CMD ["/bin/bash"]
2. Docker 이미지 빌드
호스트와 동일한 사용자 정보로 이미지를 빌드하려면 다음 명령을 실행한다.
PASSWORD
는 반드시 안전한 값으로 변경해 준다.
1
2
3
4
5
6
7
docker build \
--build-arg USERNAME=$(whoami) \
--build-arg UID=$(id -u) \
--build-arg GROUPNAME=$(id -gn) \
--build-arg GID=$(id -g) \
--build-arg PASSWORD=12345 \
-t myuser-image .
3. Docker 컨테이너 실행
Docker 컨테이너 실행 시 호스트의 작업 폴더를 마운트하여 그대로 사용한다.
1
2
3
docker run -i -t \
-v /home/$(whoami)/workspace:/home/$(whoami)/workspace \
myuser-image
이제 컨테이너 내부에서 sudo
권한이 있는 사용자 계정으로 작업할 수 있다.
1
mhlee@f53be1734d9c:~$
root
계정으로 로그인한 경우 프롬프트에#
기호 표시
일반 사용자 계정으로 로그인한 경우 프롬프트에$
기호 표시
이 방법을 적용하면 로컬 개발 환경과 거의 동일한 Docker 컨테이너 환경을 구성할 수 있다.
테스트 환경, CI/CD, 또는 개인 개발 환경 세팅 시 유용하게 활용해보자.
This post is licensed under CC BY 4.0 by the author.