Docker 이미지 생성해보기

2023. 1. 2. 16:25·AI
728x90

Docker 이미지를 직접 만드는 과정을 정리해보았다. 

기본적인 Docker 이미지, 컨테이너 개념과 관련 명령어는 아래 링크 참고하길 바란다. 

도커 개념(이미지, 컨테이너) 설명 및 관련 명령어 (tistory.com)

 

도커 개념(이미지, 컨테이너) 설명 및 관련 명령어

Docker란 애플리케이션 구축, 구현 및 테스트를 위해 격리된 가상환경을 생성하는 서비스형 플랫폼. Docker 이미지 특정 프로세스를 실행하기 위한(컨테이너 실행을 위한) 모든 파일과 설정값(환경)

bbooo.tistory.com

 

1. Docker 디렉토리 생성 및 기본이 될 도커 이미지 pull하기

docker는 기본적으로 docker image를 빌드할 때 디렉토리에 있는 모든 것을 복사한다고 하여, 별도의 디렉토리를 생성했다. 

돌리려는 모델의 tensorflow 버전이 1.15.4로 python 3.7버전을 필요로 한다.

따라서 docker hub에서 python 3.7-slim 버전을 다운 받았다. python Tags | Docker Hub

-> 도커 이미지 빌드시 자동으로 다운받아주는 것 같아, 필수적으로 다운 받지 않아도 되는듯 해보였다.

mkdir docker
cd docker

#docker pull python:3.7-slim

2. requirements.txt 작성

돌리려는 모델의 requirements.txt를 docker 디렉토리로 복사해왔다.

그림1. 도커 이미지를 만들 디렉토리의 구조도

 

3. Dockerfile 작성

FROM		python:3.7-slim

RUN         apt-get -y update

COPY		./requirements.txt .
RUN		    pip install --upgrade pip
RUN		    pip install	-r requirements.txt

WORKDIR		/opt/project

- FROM : 베이스가 될 이미지를 뜻한다. 

아래와 같은 에러가 났었는데, 이는 이미지 이름을 잘못 적어서 발생한 에러였다. 

pull access denied for 3.7-slim, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

위를 해결하기 위해서 docker images 명령어를 통해 도커 이미지의 이름을 다시 확인하고, dockerfile의 FROM 필드를 수정하니 해결되었다. (태그까지 입력해줘야 한다. 아니면 latest 버전의 python 도커파일을 다운받는다.)

 

- COPY : 복사했던 requirements.txt는 디렉토리 상에서는 복사되었지만, 도커 이미지에서 복사가 안되었기 때문에 이미지 내에서 복사 명령어를 수행함으로써 requirements.txt를 docker build에 사용할 수 있도록 한다. 

 

- RUN : 명령어를 실행함. 
pip를 업그레이드 하고, requirements.txt에 있는 패키지를 pip로 설치하도록 하였다.

 

- WORKDIR : 컨테이너가 실행되면 /opt/project 디렉토리로 이동함. 

 

4. Docker image build하기

아래 명령어를 통해 docker image를 build한다. 

docker build -t [생성할 docker image 이름][dockerfile이 있는 디렉토리]

 

5. build된 docker image로 부터 컨테이너 생성하여 확인하기

docker container run -it [이미지명] bash

pip list

 

6. git 설치 및 git clone 하기(선택사항)

깃헙에서 코드를 가져오고자 git을 설치하였다.

apt install -y git
git clone [클론할 깃허브 링크]

 


+ <none>이미지 일괄삭제

쌓인 <none> images

docker image build하다 보니 <none>이미지가 쌓였다.

ID를 일일히 입력해서 지울 수 있지만, <none>이미지를 일괄 삭제하는 방법을 활용하였다.

docker rmi -f $(docker images -f "dangling=true" -q)

한꺼번에 삭제된 <none> images


참고링크 

[1] [Docker for ML #2] 나만의 개발환경 만들기 (Dockerfile) :: HanSeokhyeon.log (tistory.com)

[2] Docker 사용해보기 - 3 (python 모듈 Docker 에서 실행하기) - Error Reviewer (tistory.com)

[3] 도커 로그인 에러, 아니면 그냥 오타..ㅎ (velog.io)

728x90

'AI' 카테고리의 다른 글

리눅스 alias 설정 및 활용법  (0) 2023.04.11
pre-training과 fine-tuning 그리고 전이 학습  (0) 2023.02.02
도커 개념(이미지, 컨테이너) 설명 및 관련 명령어  (1) 2023.01.05
'AI' 카테고리의 다른 글
  • 리눅스 alias 설정 및 활용법
  • pre-training과 fine-tuning 그리고 전이 학습
  • 도커 개념(이미지, 컨테이너) 설명 및 관련 명령어
bbooo
bbooo
  • bbooo
    bbooo
    bbooo
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • study (61)
        • 백준(BOJ) (34)
        • Programmers (15)
        • LeetCode (9)
      • AI (4)
        • Paper (0)
      • SSAC X IFFEL (4)
        • DeepML (1)
        • 밑바닥 부터 시작하는 딥러닝 (2)
      • 회고 (46)
      • Error (10)
      • Setting (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준 2470
    Til
    programmers 과제 진행하기
    문자열을 원하는 길이로
    docker
    set
    두 포인터
    sort
    python 과제 진행하기
    programmers 석유시추
    브루트포스
    코딩테스트 준비
    sequence item 0: expected str instance int found
    백트래킹
    99클럽
    파이썬 과제 진행하기
    파이썬
    Counter
    LeetCode
    파이썬 석유시추
    그리디 알고리즘
    vscode
    python 석유시추
    백준
    투포인터
    프로그래머스 석유시추
    항해99
    typeerror: sequence item 0: expected str instance int found
    풀이 실패
    개발자 취업
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
bbooo
Docker 이미지 생성해보기
상단으로

티스토리툴바