본문 바로가기
IT/Docker.K8S

[Docker] Dockerfile 만들기

by 성준하이 2023. 10. 18.
반응형

Docker 의 container 를 띄우기 위해서는 docker image 가 필요하며 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.

hub.docker.com

에서 받아올수도 있지만 자신이 만들수도 있다.

만들기 위해서는 dockerfile이 있어야 하며 Dockerfile의 라인을 차례대로 실행하여 docker image를 만든다.

 

만드는 방법은 아래와 같다.

 

1. 파일 이름은 Dockerfile로 지정해야한다.

2. 아래 참고해서 만들수 있다.

- FROM : 베이스 이미지
   어느 이미지에서 시작할건지를 의미한다.

- LABEL : 이미지에 메타데이터를 추가 (key-value 형태)

- RUN : 새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다.
   RUN 명령을 실행할 때 마다 레이어가 생성되고 캐시된다.
   따라서 RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없다.
   RUN 명령 하나에 apt-get update와 install을 함께 실행 해줘야한다.
   ex. RUN apt-get update && apt-get install mysql

- WORKDIR : 작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다.
   작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다.
   cd 명령어와 동일하다.

- EXPOSE : Dockerfile의 빌드로 생성된 이미지에서 열어줄 포트를 의미한다.
   호스트 머신과 컨테이너의 포트 매핑시에 사용된다.
   컨테이너 생성 시 -p 옵션의 컨테이너 포트 값으로 EXPOSE 값을 적어야한다.

- USER : 이미지를 어떤 계정에서 실행 하는지 지정
   기본적으로 root에서 해준다.

- COPY / ADD : build 명령 중간에 호스트의 파일 또는 폴더를 이미지에 가져오는 것
   ADD 명령문은 좀 더 파워풀한 COPY 명령문이라고 생각할 수 있다.
   ADD 명령문은 일반 파일 뿐만 아니라 압축 파일이나 네트워크 상의 파일도 사용할 수 있다.
   이렇게 특수한 파일을 다루는 게 아니라면 COPY 명령문을 사용하는 것이 권장된다.

- ENV : 이미지에서 사용할 환경 변수 값을 지정한다.
   path 등

- CMD / ENTRYPOINT : 컨테이너를 생성 및 실행 할 때 실행할 명령어
   보통 컨테이너 내부에서 항상 돌아가야하는 서버를 띄울 때 사용한다.
   - CMD
      컨테이너를 생성할 때만 실행됩니다. (docker run)
      컨테이너 생성 시, 추가적인 명령어에 따라 설정한 명령어를 수정할 수 있습니다.
   - ENTRYPOINT
      컨테이너를 시작할 때마다 실행됩니다. (docker start)
      컨테이너 시작 시, 추가적인 명령어 존재 여부와 상관 없이 무조건 실행됩니다.
   - 명령어 형식
      CMD ["<커맨드>", "<파라미터1>", "<파라미터2>"]
      CMD <커맨드> <파라미터1> <파라미터2>
      ENTRYPOINT ["<커맨드>", "<파라미터1>", "<파라미터2>"]
      ENTRYPOINT <커맨드> <파라미터1> <파라미터2>

예시는 아래와 같다.

FROM node:16-alpine

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm ci

COPY index.js .

ENTRYPOINT [ "node", "index.js" ]

 

생성한 Dockerfile 를 image 빌드

docker build -t [이미지이름:이미지 버전] [docker file 경로]

 

-> docker build -t imagetest:test .

이렇게 하면 docker 에 이미지가 올라간다.

 

docker image ls 로 확인 가능하다.

반응형

댓글