docker(도커) 및 쿠버네티스

dockerfile 구조, 만들어보기

데이터왕 2023. 12. 23. 17:11

실습 1 : hello world

  • node.js 로 간단하게 코드를 짜보자. 
  • 순서 : os선택, node설치, 코드작성, 프로그램실행 -> 이 모든것 dockerfile에 기술

 

 

dockerfile

  • dockerfile 구조:

docker file의 구조

 

  • dockerfile 구조 예
    from node: alpine  : node(도커이름), alpine(os이름)
    copy ./app : 현재 디렉토리 내용 모두 도커의 /app에 저장 
    workdir /app : 기본 위치를 /app로 지정
    cmd node app.js : /app내의 app.js 실행
  • 그외 기타 키워드
    1) ARG : 도커 image를 만들때 사용되는 변수, 최종 이미지에는 포함안됨
    2) ENV : 최종이미지에 저장되는 변수, 컨테이너가 실행될 때 사용됨. 
    3) USER : 컨테이너 os 계정 ID
    4) EXPOSE : 서비스를 사용할 포트번호
    5) RUN : 빌드를 위해 실행 돼야 하는 명령들, 예) RUN apt-update && apt-get install -y curl 
  • CMD vs ENTRYPOINT
    1) 컨테이너 시작시 실행 돼야 하는 명령어를 지정
    2) 일반적으로 둘중에 하나쓰임
    3) 명령어를 여러개 쓰면 마지막 것만 실행됨

    4) 사용예
    # 기본 이미지로 사용할 것을 선택합니다.
    FROM python:3.8
    # 작업 디렉토리를 설정합니다.
    WORKDIR /app
    # 호스트의 현재 디렉토리에 있는 파일을 작업 디렉토리로 복사합니다.
    COPY . /app
    # 필요한 패키지를 설치합니다.
    RUN pip install -r requirements.txt
    # Python 인터프리터를 사용하여 "app.py" 스크립트를 실행하도록 지정
    CMD ["python", "app.py"]
    or ENTRYPOINT  ["python", "app.py"]

    5) 같이 사용할때(거의  사용안함)
    entry 가 기본명령 , cmd가 인자 제공
    cmd는 그냥 뒤에 쓰면 덮어쓰기가 되고, enrty는 --entrypoint 옵션을 통해서 덮어쓰는게 가능

 

 

실제 dockerfile 예

  • ARG는 최종까지, ENG는 빌드할때만 사용됨
  • copy : aiflow.cfg 파일을 복사
  • RUN : airflow라는 유저로 지정
  • EXPOSE : 포트넘버 지정
  • USER : airflow를 유저로 지정
  • WORKDIR : 기본 지정
  • ENTRY , CMD : 명령어 지정 

 

docker lmage 생성

  • 이미지 이름 hello~ '.' 은 현재 페이지를 의미 
  • --platform ~ : 도커빌드 os (M1) , 실행 os(리눅스) 차이에 의한 호환성 문제 , 해결위한 명령어
  • 생성 확인
  • 다른 컴퓨터에서 실행하려면 dorker 클라우드(docker hub) 로 먼저 등록