그래서, Docker가 뭔데?

2024. 5. 15. 22:38Artificial_Intelligence/etc

그래서, Docker가 뭔데?

여러분이 컴퓨터 프로그램을 만들 때, 그 프로그램이 다른 컴퓨터에서도 잘 돌아가야 해요. 그런데 여러분이 만든 프로그램은 다른 컴퓨터에서 잘 작동하지 않을 수 있어요. 이 문제를 해결하기 위해 도커가 등장했어요!

 

도커는 어플리케이션을 가상화하는 컨테이너 기술의 한 형태입니다. 이 기술을 사용하면 개발 환경을 일관되게 유지하고, 어플리케이션을 확장하고 배포하는 데 많은 이점을 제공합니다.

 

첫째, 도커는 환경의 일관성을 보장합니다. 개발자가 동일한 환경에서 어플리케이션을 개발하고 테스트할 수 있도록 도와줍니다. 이는 "내 컴퓨터에서는 잘 됐는데"와 같은 문제를 방지하고 팀 간 협업을 더욱 효율적으로 만들어줍니다.

 

둘째, 도커는 확장성이 뛰어나며 효율적입니다. 각 어플리케이션은 독립적인 컨테이너로 실행되기 때문에 서로 영향을 주지 않습니다. 이는 여러 어플리케이션을 동시에 실행하거나 확장할 때 매우 유용합니다. 또한, 리소스를 효율적으로 사용하여 더 많은 어플리케이션을 동일한 하드웨어에서 실행할 수 있습니다.

 

셋째, 도커는 배포를 단순화합니다. 어플리케이션과 그 의존성이 모두 컨테이너에 포함되어 있기 때문에, 배포 프로세스가 단순화됩니다. 이는 어플리케이션을 쉽게 이동하고 확장할 수 있게 해줍니다.

좋은건 알겠는데… Docker를 뭐.. 어떻게 쓰는건데?

첫 번째 단계는 Dockerfile을 만드는 것입니다. Dockerfile은 마치 어플리케이션을 만들기 위한 요리 레시피와 같아요. 여기에는 어플리케이션을 실행하기 위해 필요한 모든 구성 요소와 명령어가 포함되어 있습니다. 예를 들어, 어떤 언어나 프레임워크를 사용하는지, 필요한 파일을 어디서 가져올지 등이 명시되어 있죠.

 

두 번째 단계는 Dockerfile을 사용하여 이미지를 만드는 것입니다. 이미지는 마치 어플리케이션의 "스냅샷"이라고 생각하시면 됩니다. Dockerfile에 정의된 명령어를 따라 실행하면서 컨테이너를 만들 때 사용할 수 있는 패키지, 파일 및 설정 등이 포함됩니다.

 

마지막으로, 이미지를 사용하여 컨테이너를 실행합니다. 이것은 마치 이미지를 실제로 실행 가능한 어플리케이션으로 "풀어 헤치는" 것과 비슷합니다. Docker는 이 이미지를 사용하여 컨테이너를 만들고 실행하며, 이렇게 하면 어플리케이션이 호스트 시스템에서 완벽하게 격리된 환경에서 실행됩니다.

 

정리를 잠깐 해볼까요?

 

  1. Docker File:
    Dockerfile은 마치 앱을 만들기 위한 설계도와 같아요. 이 파일에는 우리가 만들어야 하는 앱을 구동하기 위해 필요한 모든 것이 담겨 있어요. 예를 들어, 필요한 파일들이나 외부 라이브러리 설치, 환경 변수 설정, 실행 스크립트 등이 여기에 포함돼요.
  2. Docker Image:
    Dockerfile을 사용하여 만든 것이 Docker 이미지에요. 이 이미지 안에는 우리가 만든 앱을 실행하는 데 필요한 모든 것이 포함돼 있어요. 마치 사진을 찍어두는 것처럼, 실행되고 있는 앱을 스냅샷으로 찍어서 이미지로 만든다고 생각하면 됩니다. 이 이미지는 변경이 불가능한 상태로 유지되며, 언제든지 동일한 환경에서 실행할 수 있어요.
  3. Container:
    마지막으로, 컨테이너는 Docker 이미지를 실행하는 격리된 환경이에요. 이 컨테이너 안에서 우리가 만든 앱이 동작하게 됩니다. 각각의 컨테이너는 고유한 파일 시스템을 가지고 있어서 서로 영향을 주지 않고 실행될 수 있어요. 이미지는 클래스(class)와 같이 생각할 수 있고, 각각의 컨테이너는 클래스에서 만들어진 개별 객체(instance)처럼 독립적으로 실행됩니다.

이렇게 Docker를 사용하면 우리는 개발 환경을 일관되게 유지하고, 앱을 손쉽게 배포하고 실행할 수 있어요.

 

이론은 알았으니, 실제 환경에서 도커를 써보고 싶어.

가장 먼저 해야할 것은 Docker 설치!

Docker를 설치한 로컬 또는 서버에서 Docker가 제대로 작동하는지 확인합니다. 터미널 또는 명령 프롬프트에서 docker version 명령어를 실행하여 Docker 버전 및 설치 상태를 확인할 수 있어요.

다음으로, Docker Hub에 접속하여 원하는 이미지를 찾습니다. 예를 들어, 언어 모델을 사용하기 위해 Hugging Face의 이미지를 사용한다고 가정해봅시다.

Docker Hub에서 해당 이미지를 찾은 후, 터미널 또는 명령 프롬프트에서 docker pull huggingface/transformers-pytorch-gpu 명령어를 실행하여 이미지를 다운로드합니다.

이제, 다운로드한 이미지가 잘 있는지 확인하기 위해 docker images 명령어를 사용합니다.

마지막으로, 위에서 다운로드한 이미지를 사용하여 컨테이너를 만들어 개발환경을 설정합니다. 터미널 또는 명령 프롬프트에서 docker run --name liky --gpus=all -it huggingface/transformers-pytorch-gpu 명령어를 실행합니다. 이렇게 하면 liky라는 이름의 컨테이너가 생성되고, Hugging Face의 Transformers 라이브러리가 설치된 PyTorch를 사용할 수 있는 GPU 지원 컨테이너가 실행됩니다. 만약 LLM을 학습하거나 할 때에는 --shm-size 80gb 처럼 공유 메모리 옵션을 추가해주세요.

 

이제, 이 컨테이너 안에서 개발을 시작하면 됩니다! 필요한 패키지를 설치하고 코드를 편집하며 새로운 기능을 개발할 수 있습니다. Docker를 사용하면 로컬 환경과 동일한 환경에서 언제든지 개발할 수 있으며, 컨테이너를 중단하고 다시 시작하여 작업을 계속할 수 있어요.

 

여러분들이 Docker를 사용할 때 필요한 추가적인 명령어들을 모아서 정리해보겠습니다.

  1. 도커 실행중인 컨테이너 리스트 확인
    docker ps
  2. 도커 모든 컨테이너 리스트 확인
    docker ps -a
  3. 도커 저장소에서 이미지 당겨오기
    docker pull huggingface/transformers-pytorch-gpu
  4. 도커 컨테이너 실행하기
    sudo docker run -v <local_path>:<container_path> --gpus='"device=0,1"' -it huggingface/transformers-pytorch-gpu
  5. 도커 컨테이너 일시정지
    ctrl+p+q
  6. 도커 컨테이너 종료
    exit
  7. 도커 다시 들어가기
    docker attach <컨테이너이름orID>
  8. 도커 컨테이너/이미지 삭제
    docker rm <컨테이너ID> docker image rm <이미지ID>
  9. 도커 외부 포트 열기 → 참고 링크
  10. 도커 권한 부여 → 참고 링크
  11. 도커 실행중인 컨테이너에 네트워크 연결
    docker network connect <네트워크 이름> <컨테이너 이름 또는 ID>
  12. 도커 실행중인 컨테이너에 접속 안하고 외부에서 작업할 때
    docker exec -it existing-container <명령어>
  13. VScode Docker 연결
    sudo usermod -aG docker $USER newgrp docker

이렇게 정리된 명령어들은 Docker를 사용하는 데에 유용하게 활용될 것입니다.

필요할 때 참고하시면 좋을 것 같아요! 🐳✨

 

이렇게 Docker의 개념과 사용법에 대해 알아보았습니다. Docker는 개발 환경의 일관성을 유지하고, 배포를 단순화하며, 효율적인 리소스 관리를 가능하게 하는 등 다양한 이점을 제공합니다. 처음에는 어려울 수 있지만, 익숙해지면 개발 과정에서 큰 도움이 될 것입니다. 계속해서 Docker를 활용하여 효율적인 개발 환경을 구축해보세요!

728x90

'Artificial_Intelligence > etc' 카테고리의 다른 글

Learning Rate Scheduler  (0) 2022.05.29
Confusion Matrix(혼동행렬) 구현  (0) 2022.04.16
How to use "Hugging Face"(허깅페이스) for NLP Task  (0) 2022.04.16
RNN, CNN  (1) 2021.06.12
Artificial Intelligence  (0) 2021.04.23