[ETC] 도커(Docker)

julian·2025년 7월 2일

python

목록 보기
61/74
post-thumbnail

앞선 프로젝트에서 사실 도커 부분도 다뤄보려고 몇시간 정도 이거저거 수정하면서 다뤄보고 공부해봤는데,
생각보다 이번 개인 프로젝트에서는 크게 사용할 이유도 크게 없다고 생각이 들었고,
컨테이너와 로컬 사이에서 환경 설정이 계속 꼬이면서 삽질을 많이해서 아직 개념이 좀 부족하다고 생각이 들었다.

그래서 추후 실무에 필요하거나 개념을 더 깊이 잡으면 다시 시도할 예정이다 😭

그래도 우선 정리한 내용을 전달해서, 혹시 본인이 개념을 잘 잡았고 시도할 생각이 생긴다면 아래 내용을 참고하시길!


도커(Docker)

이번에는 도커를 한번 사용해볼까 한다.
도커에 대해 기본 개념은 알기쉽고 간단하게 정리한 유튜브 코딩애플 - 도커가 바꾼 개발바닥 영상을 참고했다!

AI 프로젝트를 하다 보면 Python 버전, 라이브러리 버전이 제각각이고, GPU 드라이버 버전 호환성이 민감하기도 하며, 내 PC에선 잘 되는데 남한테 코드를 주면 안 돌아가는 문제들이 생긴다.
이 도커는 가상머신과 비슷하지만 훨씬 가벼우며, 컨테이너 단위로 실행하여 OS 위에 격리된 한경을 생성한다.
그래서 실행할 때마다 똑같은 환경을 보장한다.

그렇게 도커를 쓰면 좋은 점은 다음과 같다.

  • 프로젝트별 독립 환경(다른 프로젝트 영향 없음)
  • 코드, 라이브러리, 실행 환경을 한번에 패키징
  • Dockerfile로 환경을 정의하여 누구나 그대로 재현 가능함
  • 개발환경, 테스트 모두 똑같이 동작
  • GPU 컨테이너 지원(nvidia-docker)

아직 확실하게 진행된 부분은 아니기에 많은 부분을 알지는 못하지만, 공부해보고자 해서 이를 활용해보고자 한다.

도커 세팅

WSL 우분투 진입

wsl -d Ubuntu-22.04

Docker 설치

# 우분투 시스템 업데이트
sudo apt update

# 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# keyrings 폴더 생성
sudo install -m 0755 -d /etc/apt/keyrings

# Docker 공식 GPG 키 다운로드
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
# GPG 키 읽기 권한 설정
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Docker 저장소 추가
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 패키지 리스트 갱신 및 Docker 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 정상 설치 확인
docker --version  # Docker version 28.3.0, build 38b7060
  • 참고) GPG: 오픈소스더라도 무분별한 설치를 막기 위해 Docker가 제공하는 공식로,
    단순 키라기보다 소프트웨어의 진짜 출처를 검증하는 디지털 서명 시스템이다.

도커 설치는 완료됐다.

nvidia-docker 세팅 (GPU 컨테이너 지원)

이제 다음으로 GPU 연동을 위해 nvidia-docker를 세팅한다.

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && \
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && \
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker

이제 변경사항 반영을 위해 도커를 실행하고 GPU 연동을 확인한다.

sudo service docker start

참고로 데몬을 실행하는 sudo service docker start는 매번 WSL 켤 때마다 필요하다. 도커는 항상 백그라운드 서버가 떠 있어야 컨테이너 관리가 가능하다.
WSL은 가상머신과는 리눅스 부팅 개념이 달라서 직접 실행이 필요하다.

# 정상 GPU 확인
docker run --rm --gpus all nvidia/cuda:12.3.2-base-ubuntu22.04 nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.64.01              Driver Version: 576.80         CUDA Version: 12.9     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 Ti     On  |   00000000:01:00.0  On |                  N/A |
|  0%   51C    P8             16W /  165W |    1409MiB /  16380MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

Docker 권한 설정

매번 sudo 없이 Docker 사용 가능하게 설정을 해준다.
이거 안하면 매번 sudo 붙여야 한다.

sudo usermod -aG docker $USER
exec $SHELL  # 또는 WSL 재진입
groups  # docker 그룹 포함 확인

Docker 정상동작 테스트

docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

이와 같이 출력되면 정상이다.

프로젝트 폴더 및 Dockerfile 작성

이제 도커 설치가 정상적으로 완료됐으니 실제 프로젝트용 Docker 환경을 구축하면 된다.

mkdir ~/ADFOU
cd ~/ADFOU
nano Dockerfile
# PyTorch 공식 이미지 (CUDA 12.8 지원)
FROM pytorch/pytorch:2.7.1-cuda12.8-cudnn9-runtime

# 작업 디렉토리 설정
WORKDIR /workspace

# 현재 폴더 전체 복사
COPY . /workspace

# 필수 패키지 설치
RUN pip install --upgrade pip && pip install -r requirements.txt

CMD ["bash"]

requirements.txt 작성

이제 필요한 패키지들을 작성한다.

nano requirements.txt
numpy
torch
torchvision
matplotlib
opencv-python

Docker 이미지 빌드

docker build -t adfou_image .

이때 이미지명을 대문자로 사용하면 에러가 발생한다.

컨테이너 실행

docker run -it --gpus all --name adfou_container adfou_image

⭐ 중요!
docker run은 매번 새로 만드는 거라, 기존 컨테이너 재접속할때는
docker start -ai adfou_container 를 실행하면 된다.

참고) 완전히 삭제하려면 docker rm adfou_container

profile
AI Model Developer

0개의 댓글