Docker 컨테이너 및 이미지 생성

Lungnaha·2022년 5월 27일
1

Docker&k8s

목록 보기
1/9

💪 들어가며..

프로젝트를 진행하다가 로컬 환경에서 머신러닝 학습을 진행하고, 해당 결과를 json 형식으로 반환하는 쿠버네티스 파드를 생성하고자 했습니다.
그런 파드를 구성하기 위한 사전 작업으로 Docker 컨테이너를 생성하고 이를 이미지로 만드는 과정을 이번 포스트에서는 다루어보겠습니다.
물론, 이 과정말고 Docker File을 작성할 수 있지만, 쿠버네티스에서는 Docker File을 이용하는 것이 아닌 이미지를 활용해서 pod를 생성하기에 해당 방법으로 진행했습니다.

🐳 Docker 컨테이너 생성

저는 YOLO를 이용한 ML 모델 학습을 하였고 Flask API를 활용해서 model serving을 해서 결과를 알리기 위해 아래와 같이 컨테이너를 생성해보았습니다.
(YOLOv5는 Pytorch를 이용합니다.)

sudo docker run -d -it --name 컨테이너명 -p 5000:5000 --mount type=bind,source=/root/station,target=/workspace pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel

참고로 bind에 대해 간단히 설명해드리면, source는 컨테이너로 복사(?)하기를 원하는 폴더 위치를 입력하고, target에는 해당 폴더가 위치하기 원하는 컨테이너 내부 위치를 작성하면 됩니다.

위의 명령어를 작성하면 문제없이 지정한 이름으로 컨테이너가 생성됨을 확인할 수 있습니다.

혹시나 해당 컨테이너를 이미지로 만들기 전에 컨테이너 내부에서 작업을 하고 싶다면 아래의 명령어로 컨테이너에 들어갈 수 있습니다.

sudo docker start 컨테이너명
sudo docker attach 컨테이너명

추가로, 저의 경우는 파일 등을 추가하고 싶은 경우는 기존에 있던 폴더에 넣고 이미지를 만들면 사라지더라구요.
그래서 이를 방지하고자, 컨테어너 내부에 따로 mkdir 명령어로 폴더를 생성하고 거기에 저장되기 원하는 파일을 위치시키니 이미지화를 한 경우에도 없어지지 않았습니다.
(해당 문제때문에 하루 종일 삽질했네요...)

🐋 컨테이너 -> 이미지 생성

아래의 명령어를 통해 현재 컨테이너를 Docker image로 생성할 수 있습니다.

docker commit -a "jjy" 컨테이너명 도커허브id/도커허브저장소

위에서 제가 도커허브id/도커허브저장소 라고 한 부분은 꼭 저 형식으로 지정하지 않아도 괜찮습니다.
그러나 Docker hub에 해당 이미지를 push하고 싶다면 저 형식을 따라 이미지명을 지정해주어야합니다.
아래와 같이 나온다면 이미지가 성공적으로 생성된 것입니다.

컨테이너를 commit 명령어를 통해 이미지로 만들면 장점은 컨테이너의 상태를 그대로 저장해서 이미지를 만들 수 있다는 것입니다.
예를 들어 저 같은 경우는 머신러닝 weight 등을 컨테이너 내부에 넣고 이를 이미지로 만들었다면 해당 이미지를 pull 받아서 컨테이너를 생성한 경우는 해당 weight 가 들어있는 채로 생성되게 됩니다.

🐟 Docker hub에 업로드

해당 이미지는 로컬에만 저장되게 되고, 그러면 외부에서는 사용할 수 없습니다.
이를 해결하기 위해 흔히들 사용하는 github처럼 Docker hub를 이용할 수 있습니다.
Docker hub에 이미지를 업로드하면 언제 어디서든 해당 이미지를 다운받아 사용할 수 있습니다.
Docker hub 를 사용하는 자세한 방법은 해당 포스트에 중점이 아니기에 넘어가겠습니다. (죄송합니다..)

docker push 이미지명

해당 명령어를 통해 Docker hub에 이미지를 올릴 수 있는데, 이를 잘 활용하기 위해서 위에서 제가 말한 형식을 잘 지켜주셔야합니다.

이제 다음 포스트에서는 Docker hub에 올린 이미지를 활용해서 Pod를 생성하는 법을 다루어보겠습니다. 🤣

profile
Long🌈Now😁Happy💖

0개의 댓글