앞선 프로젝트에서 사실 도커 부분도 다뤄보려고 몇시간 정도 이거저거 수정하면서 다뤄보고 공부해봤는데,
생각보다 이번 개인 프로젝트에서는 크게 사용할 이유도 크게 없다고 생각이 들었고,
컨테이너와 로컬 사이에서 환경 설정이 계속 꼬이면서 삽질을 많이해서 아직 개념이 좀 부족하다고 생각이 들었다.
그래서 추후 실무에 필요하거나 개념을 더 깊이 잡으면 다시 시도할 예정이다 😭
그래도 우선 정리한 내용을 전달해서, 혹시 본인이 개념을 잘 잡았고 시도할 생각이 생긴다면 아래 내용을 참고하시길!
이번에는 도커를 한번 사용해볼까 한다.
도커에 대해 기본 개념은 알기쉽고 간단하게 정리한 유튜브 코딩애플 - 도커가 바꾼 개발바닥 영상을 참고했다!
AI 프로젝트를 하다 보면 Python 버전, 라이브러리 버전이 제각각이고, GPU 드라이버 버전 호환성이 민감하기도 하며, 내 PC에선 잘 되는데 남한테 코드를 주면 안 돌아가는 문제들이 생긴다.
이 도커는 가상머신과 비슷하지만 훨씬 가벼우며, 컨테이너 단위로 실행하여 OS 위에 격리된 한경을 생성한다.
그래서 실행할 때마다 똑같은 환경을 보장한다.
그렇게 도커를 쓰면 좋은 점은 다음과 같다.
아직 확실하게 진행된 부분은 아니기에 많은 부분을 알지는 못하지만, 공부해보고자 해서 이를 활용해보고자 한다.
wsl -d Ubuntu-22.04
# 우분투 시스템 업데이트
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

도커 설치는 완료됐다.
이제 다음으로 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 |
+-----------------------------------------------------------------------------------------+
매번 sudo 없이 Docker 사용 가능하게 설정을 해준다.
이거 안하면 매번 sudo 붙여야 한다.
sudo usermod -aG docker $USER
exec $SHELL # 또는 WSL 재진입
groups # docker 그룹 포함 확인
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
이와 같이 출력되면 정상이다.
이제 도커 설치가 정상적으로 완료됐으니 실제 프로젝트용 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"]
이제 필요한 패키지들을 작성한다.
nano requirements.txt
numpy
torch
torchvision
matplotlib
opencv-python
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