Last Updated: @9/30/2024
Dev containers 개요
Dev containers는 VSCode IDE의 익스텐션 중 하나이다.
Dev container는 도커 이미지를 컨테이너로 띄운 후 해당 컨테이너 속에서 작업할 수 있도록 도와준다. 이게 좋은 점은
•
운영체제 등 배포 환경과 같은 환경에서 개발 가능하다.
•
팀원들이 똑같은 환경 내에서 개발 가능하다.
•
내 로컬 머신이 지저분해지지 않는다.
개인적으로 요즘 거의 모든 개발을 Dev containers에서 진행한다.
설치법
익스텐션 설치
Remote Development라는 VSCode 익스텐션 패키지를 다운받으면 Dev containers도 포함되어 있다. 검색 후 설치하자.
Docker 설치
로컬 머신에 docker가 설치되어 있어야 한다. 아래 링크로 가서 설치하자.
만약 Windows PC를 사용하는데 리눅스의 GUI(그래픽) 프로그램을 실행해야 한다면 아래 페이지를 참고하자.
Windows, MacOS의 경우 docker desktop 앱을 켜놓으면 docker cli도 사용할 수 있다.
실습
Docker를 실행하고 빈 디렉터리를 만든 후 VSCode를 연다.
$ mkdir my_project
$ cd my_project
$ code .
Shell
복사
아래 내용의 Dockerfile을 만든다. Linux Ubuntu 20.04 버전의 이미지를 사용한다는 의미이다.
FROM ubuntu:20.04
Docker
복사
VSCode 좌측 하단의 파란색 >< 버튼을 누른다.
대화 상자에서 Reopen in Container를 선택한다.
From 'Dockerfile'을 선택한다.
OK를 누른다
이제 Dev containers가 Dockerfile을 빌드해서 이미지를 만들고, 해당 이미지의 컨테이너를 띄운다. 그리고 컨테이너에 접속하여 VSCode와 연결한다. 아래처럼 docker ps 명령어를 통해 생성된 컨테이너를 확인할 수 있다.
터미널을 열어보면 프로젝트 폴더가 /workspaces 디렉터리에 위치한 것을 알 수 있다.
/workspaces/my_project 디렉터리가 로컬 머신의 my_project 디렉터리에 볼륨이 걸려있기 때문에 컨테이너 내에서 파일을 수정하면 로컬 머신에도 그대로 반영된다.
팁
일반 유저로 작업하기
위와 같은 Dockerfile을 사용하면 리눅스에서 루트 유저로 개발을 하게 되는데, 이는 문제가 될 수 있다. 아래와 같은 템플릿을 사용하면 일반 유저를 만들어 작업할 수 있다.
FROM ubuntu:20.04
# Install sudo
RUN apt update \
&& apt install -y sudo
ARG USERNAME=elonmusk
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -s /bin/bash -m $USERNAME \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME
USER $USERNAME
Docker
복사
Dev containers에 접속해보면 아래처럼 elonmusk 유저로 접속된 것을 볼 수 있다.
network=host 설정하기
만약 개발 시 호스트 머신의 네트워크를 그대로 공유하고싶다면 .devcontainer/devcontainer.json 파일에 아래처럼 runArgs 옵션에 --network=host를 넣어주자.
{
"build": {...},
"runArgs": [
"--network=host"
]
...
}
JSON
복사
VSCode 익스텐션 자동 설치하기
Dev container는 컨테이너별로 익스텐션을 설치해야 하는데, 만약 컨테이너를 다시 빌드하게 되면 모든 익스텐션이 삭제되기 때문에 불편하다. 따라서 아래처럼 익스텐션의 톱니바퀴를 눌러 Add to devcontainer.json을 해주면 권장 익스텐션으로 등록이 되고, Dev containers를 열 때 자동으로 설치된다.
예제) Go 개발환경 Dockerfile
만약 Go로 개발을 한다면 아래 Dockerfile을 참고해보자.
FROM ubuntu:20.04
# Change apt mirror to a faster one to speed up the build process
RUN sed -i 's/http:\/\/archive.ubuntu.com/http:\/\/mirror.kakao.com/g' /etc/apt/sources.list && \
sed -i 's/http:\/\/security.ubuntu.com/http:\/\/mirror.kakao.com/g' /etc/apt/sources.list
RUN apt update \
&& apt install -y curl sudo \
&& curl -O https://dl.google.com/go/go1.23.0.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
ENV PATH=$PATH:/usr/local/go/bin
ARG USERNAME=gopher
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -s /bin/bash -m $USERNAME \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME
USER $USERNAME
Docker
복사
Dockerfile이나 소스코드 변경 후 컨테이너를 다시 빌드하고 싶으면 좌측 하단의 파란색 >< 버튼을 눌러 Rebuild Container를 해준다.