지난 글에서 컨테이너 기술에 대하여 다루었습니다.
이번 글에서는 컨테이너 기술 중에서 가장 활발하게 사용되고 있는 Docker를 설치해보고자 합니다.
사실 Docker를 설치하려는 이유는 NVIDIA GPU를 텐서플로우에서 사용하기 위해서 입니다.
예전 글에서 말했던 적이 있지만... NVIDIA GPU를 사용하려면 CUDA Toolkit을 설치해야 하는데... PyTorch는 그냥 스크립트 한 줄로 해결되지만 텐서플로우는 잘 안됩니다.
몇 년 전만하더라도 몇 줄의 스크립트로 텐서플로우 GPU 버전을 사용할 수 있었는데 이젠 설치하기가 매우 까다롭습니다.
까다로운 것으로 끝나면 다행인데.. 각 단계에서 문제를 다 해결해도 결국 실패하는 경우가 많았습니다.
결국 NVIDIA에서 제공하는 Docker 컨테이너를 사용하는 것이 가장 편한 방법이더군요.
그래서 이번 글에서는 Docker를 설치해 보고자 합니다.
제가 사용하는 OS는 Ubuntu 계열 리눅스입니다.
일단 기존에 Docker와 관련된 것들이 설치되어 있거나 삭제하고 남은 파편들이 있을 수 있으니 깔끔하게 지우고 시작합니다.
sudo apt remove docker docker-engine docker.io containerd runc
조금 다른 방식으로... 다음과 같은 명령을 수행해서 삭제하려는 경우에는 아래와 같은 형태의 결과가 나옵니다.
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove; done
해당 페이지가 설치되지 않아서 지우지 않았다는 메시지인데... 위의 메시지보다는 훨씬 깔끔하게 설명해주네요.
Docker와 관련된, 또는 관련되었을 것으로 생각되는 파편들을 깨끗하게 정리했다면 다음은 시스템의 상태를 최신 상태로 유지하기 위하여 sudo apt update 를 수행하도록 합니다.
update할 항목이 있다면 sudo apt upgrade -y 를 수행해서 업데이트를 완료합니다.
제 시스템은 이미 최신 버전으로 업데이트가 완료되어 있네요.
시스템의 업데이트가 완료되었다면 Docker의 설치를 시작합니다.
먼저 Docker 패키지를 읽어올 수 있도록 Docker의 공식 저장소를 리눅스 시스템에 추가해야 합니다.
저장소 추가를 위해 필요한 패키지들을 우선 설치합니다.
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
필요한 기본 패키지의 설치가 완료되면 저장소를 추가합니다.
저장소의 추가를 위해서는 먼저 Docker 패키지 저장소를 인증하기 위한 인증키의 추가부터 진행합니다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
인증키를 추가하는 apt-key 기능이 Deprecated되었다... 즉 곧 사라질 명령이라서 쓰지말라고 합니다.
그러나 일단.. 아직까지는 정상적으로 동작하고 있습니다.
예전에는 저 메시지를 회피하기 위해서 다음과 같은 방식을 사용했었습니다.
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
인증키를 추가했다면 인증키가 올바르게 설치되었는지 확인하도록 합니다.
sudo apt-key fingerprint 0EBFCD88
역시 apt-key가 deprecated 되었다는 경고가 나오긴 하지만 정상적으로 작동합니다.
위와 같은 메시지가 나오면 잘 설치된 것입니다.
인증키까지 잘 설치되었다면 다음으로 Docker 안정버전을 제공하는 저장소를 추가하도록 합니다.
저장소가 제대로 추가되어야 패키지를 설치할 수 있습니다.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
저장소가 설치되었다면 새로운 저장소의 업데이트 정보를 시스템에 반영합니다.
쉽게 말해서 모든 정보를 최신 정보로 갱신하라는 말이죠.
sudo apt update
업데이트를 수행했더니 오류가 나오는군요.
그런데 저 오류는 무시해도 됩니다.
도커의 갱신 목록에 Victoria라는 릴리즈가 발견되지 않았다는 오류인데.. Victoria 릴리즈는 Linux Mint의 릴리즈 중 하나 입니다.
Ubuntu 계열이라면 Jammy 릴리즈에 해당하는 버전인데.. Jammy 릴리즈에 대한 내용은 제대로 진행된 것을 알 수 있습니다.
좀 찜찜하다고 하시면 다음과 같이 저장소를 수정해서 추가하고 다시 업데이트를 해 주셔도 됩니다.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
아키텍처 정보는 패키지 정보를 읽어서 적용하고(그냥 amd64로 지정해도 무방), 앞에서 (두 번째 방식으로) 생성한 키를 적용하고, os의 릴리즈 정보를 읽어서 버전코드명을 넣어주도록 하고... 그리고 그 내용들을 /etc/apt/sources.list.d/docker.list 파일에 적용한 후 반영하는... 복잡한 방식입니다.
위와 같이 저장소를 변경하여 추가한 후 업데이트를 수행해도 되는데... 저는 그냥 오류가 나더라도 별로 문제는 없는 처음 방식을 권장하고 싶습니다.
저장소가 반영되었다면 이제 Docker 패키지를 설치합니다.
준비과정이 매우 오래 걸렸네요.
sudo apt install docker-ce docker-ce-cli containerd.io
방금 설치한 패키지는 Docker Engine과 Docker CLI, Containerd.io 입니다.
참고로...
Docker 홈페이지에 가 보시면 Docker Desktop이란 것을 설치하도록 권장하고 있습니다.
Docker Desktop은 Docker Engine(Windows, Mac에서는 Docker Machine)만이 아니라 Docker를 GUI 형태로 관리, 사용할 수 있게 해 주고 각 컨테이너를 관리할 수 있도록 지원하는 도구입니다.
커맨드 라인을 이용해서 직접 하나하나 관리하는 Docker Engine 사용방식에 비하면 아무래도 편의성이 훨씬 뛰어나겠습니다만... 현재 유료화되었습니다.
Docker Desktop은 2022년 2월 1일부터 유료화되었는데, 개인 사용자, 250인 이하의 회사, 또는 연 매출이 1,000만 달러 미만인 회사는 여전히 무료로 사용할 수 있지만, 그 외의 경우 유료 플랜을 구독해야 합니다.
뭐.. 제 경우는 개인 사용자의 입장이어서 유료화가 별로 의미는 없긴 합니다만...
그냥 Docker Engine을 사용하고 있습니다.
그런데 Docker Engine은 Linux에서만 사용이 가능하기때문에... Windows나 Mac을 사용하시는 분은 그냥 Docker Desktop을 사용하셔야겠네요.
그럼... Docker Engine까지 설치가 완료되었다면 마지막으로 Docker Compose를 설치하도록 합니다.
Docker Compose는 단일 서버에서 여러 개의 도커 컨테이너를 하나의 애플리케이션(서비스)으로 묶어서 관리할 수 있도록 작업 환경을 지원해주는 도구입니다.
만약 개발하려는 시스템이 여러 개의 컨테이너가 연동하여 하나의 애플리케이션으로 작동한다고 할 때, Docker Compose를 사용하지 않고 각각의 컨테이너를 별도로 관리한다면 테스트, 배포 등의 작업도 컨테이너 별로 제각각 수행을 해 주어야 합니다.
상당히 불편하겠죠.
그래서 Linux 사용자들은 Docker Desktop을 사용하지 않는다면 Docker Engine과 Docker Compose를 조합해서 Docker를 운영하는 편입니다.
설치를 해 보죠.
sudo apt install docker-compose-plugin
Docker Compose가 잘 설치되었는지 확인하고 나면 Docker 환경의 설치는 완료입니다.
docker compose version
오늘 일자 기준으로 최신 버전인 2.29.2가 설치된 것을 확인할 수 있습니다.
Docker가 잘 설치되었다면 제대로 동작하는지 테스트를 해 봐야겠죠.
docker version
잘 설치가 된 것 같습니다.
저는 Docker를 Root 권한으로 설치해 버렸기 때문에 sudo 명령어를 계속 사용하고 있습니다만 제대로 사용자 권한으로 설치하셨다면 sudo 명령어를 사용하지 않아도 됩니다.
그럼 Docker Image를 하나 실행시켜보겠습니다.
sudo docker run hello-world
로컬 시스템에 hello-world 이미지를 찾지 못했다고 하는데.. 이건 기본 제공되는건지 알아서 Pulling을 해 오는군요.
Pulling 이라는 것은 수많은 Docker Image가 공유되고 있는 Docker Hub에서 이미지를 가져오는 방법입니다.
docker pull hello-world
와 같이 사용하시면 됩니다.
hello-world 이미지가 실행되고 "Hello from Docker!....." 결과가 출력되는 것을 확인했습니다.
그럼 이제 마지막으로 Docker Image에 대한 정보를 살펴보도록 하겠습니다.
sudo docker images hello-world
자.. 여기까지 해서 Docker를 설치하고 간단하게 Image를 Pulling한 후 실행 및 이미지 정보확인까지 마쳤습니다.
앞으로는 Docker를 이용해서 여러가지 작업을 진행할 수 있을 것 같군요.
그럼 다음 글에서 다시 뵙겠습니다.
'관련 기술 > Docker' 카테고리의 다른 글
커널 컨테이너(Kernel Container) 기술에 대하여 (2) | 2024.06.09 |
---|