docker(도커) 및 쿠버네티스
dockerfile 구조, 만들어보기
데이터왕
2023. 12. 23. 17:11
실습 1 : hello world
- node.js 로 간단하게 코드를 짜보자.
- 순서 : os선택, node설치, 코드작성, 프로그램실행 -> 이 모든것 dockerfile에 기술
dockerfile
- dockerfile 구조:
- 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) 로 먼저 등록