[docker] image 만들기, push

반디·2023년 4월 24일
0

개발기

목록 보기
2/16

1. poetry 셋팅 및 관련 패키지 설치

python -V # python 3.10.6
poetry init
poetry add torch torchvision 

2. Dockerfile 생성

Docker image를 빌드하기 위한 정보를 담은 파일 생성

FROM 이미지이름:태그 

COPY 로컬 디렉토리(파일) 컨테이너 내 디렉토리(파일)
WORKDIR 컨테이너 내 디렉토리 
ENV 환경변수이름=값

RUN 실행할 리눅스 명령어 

CMD [ "실행할 명령어", "인자" ]
  • FROM 이미지이름:태그
    이미지 빌드에 사용할 베이스 이미지를 지정

  • COPY 로컬 디렉토리(파일) 컨테이너 내 디렉토리(파일)
    Dockerfile이 존재하는 경로를 기준으로 로컬 디렉토리를 컨테이너 내부의 디렉토리로 복사함

    • 컨테이너는 자체적인 파일 시스템과 디렉토리를 가지므로, 파일을 컨테이너에서 사용하려면 복사해와야 함.
  • WORKDIR 컨테이너 내 디렉토리
    Dockerfile의 RUN, CMD, ENTRYPOINT 등의 명령어를 실행할 컨테이너 경로 지정

  • RUN 실행할 리눅스 명령어
    실행할 리눅스 명령어를 적어줌. 명령어가 여러 개인 경우 && \로 이어줌

  • CMD [ "실행할 명령어", "인자" ]
    docker run으로 컨테이너를 만들 때 실행할 명령어

Example

FROM pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime

COPY . /app
WORKDIR /app
ENV PYTHONPATH=/app
ENV PYTHONBUFFERED=1

RUN pip install pip==23.0.1 && \
    pip install poetry==1.2.1 && \
    poetry export -o requirements.txt && \
    pip install -r requirements.txt

CMD [ "python", "main.py" ]

  • pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime를 베이스 이미지로 사용
  • 프로젝트 최상위에 존재하는 모든 파일을 컨테이너 내부의 /app 디렉토리로 복사
  • RUN, CMD는 컨테이너 내부의 /app에서 실행됨
  • docker run으로 컨테이너를 만들 때, python main.py가 실행됨

3. docker image 만들기

docker build -t 빌드할이미지이름:태그이름 Dockerfile이 위치한 경로 
  • 태그 미지정시 latest로 채워짐

4. 컨테이너 실행

docker run 이미지이름:태그

태그가 latest인 경우 생략할 수 있습니다.

5. image push/pull

docker hub에 만든 이미지를 push

  1. login
docker login
  1. tag 설정
docker tag 기존이미지:태그 docker hub 계정ID/이미지이름:태그
  1. image push
docker push 계정ID/이미지이름:태그

  1. pull
docker pull 계정ID/이미지이름:태그
  • 로그인도 하고 이미지이름도 '계정ID/이미지이름'으로 설정했음에도 불구하고 push할 때 permission denied 오류가 계속 발생했었다. 다행히 다음날에 다시 실행했을 때 push가 잘 되었다. 뭐가 원인이었을까 로그인 상태가 업데이트가 잘 안되었던 걸까
profile
꾸준히!

0개의 댓글