내 잡다한 노트

Dockerfile 만들기 본문

DevOps/docker

Dockerfile 만들기

peanutwalnut 2023. 11. 3. 20:37

네트워크 실습에서 Dockerfile로 이미지를 빌드하는 것을 해야한다.

그래서 관련 내용을 정리해서 포스팅하려한다. 금방 까먹을 것 같다.

 

Dockerfile

Docker 이미지를 빌드하기 위한 설정파일. 즉, 이미지를 만드는 스크립트(설정파일)이다.

여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 나열된 명령문을 차례대로 수행하여 이미지를 생성한다.

 

장점에 대해 찾아보니... 

- 장점

1. 이미지가 어떻게 만들어졌는지를 기록한다.

개발자라면 이미지가 설치 되기 위한 과정은 어떤지, 중간에 어떤 과정을 수정해야하는지를 알아야 하는 경우가 있다.

 

2. 배포에 용이하다.

이미지는 몇 기가씩 할 수 있는데 그걸 배포하기보다는 그 이미지를 만들 수 있는 Dockerfile만 배포한다면

매우 편리할 것이다.

 

- Dockerfile 작성 및 명령

Dockerfile을 작성할 땐 실제 파일의 이름을 Dockerfile 이라는 정해진 이름으로 해야한다.

 

FROM : 베이스 이미지

어떤 이미지에서 시작할건지를 의미함.

 

LABEL : 이미지에 메타데이터를 추가 

 

RUN : 이미지를 빌드하는 과정에서 실행될 명령어를 지정한다.

RUN명령을 실행할 때마다 레이어가 생성되고 캐시된다.

따라서 RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없으니

RUN 명령 하나에 apt-get update와 install을 함께 실행해야 한다.

 

WORKDIR : 작업 디렉토리를 지정함.

 

EXPOSE : 도커파일의 빌드로 생성된 이미지에서 열어줄 포트.

컨테이너 생성할때 -p 의 컨테이너 포트 값으로 EXPOSE 를 지정해야 함.

 

USER : 이미지를 어떤 계정에서 실행하는지 지정

보통 root 에서 한다고 함.

 

COPY or ADD : 호스트의 파일이나 폴더를 이미지에 가져오는 것

ADD가 권한이 더 세서 압축 파일이나 네트워크 상의 파일도 사용할 수 있다고 한다.

일반적인 파일에는 COPY를 쓰자.

 

ENV : 이미지에서 사용할 환경 변수 값을 지정.

 

CMD / ENTRYPOINT : 컨테이너를 생성 및 실행 할 때 실행할 명령어

보통 컨테이너 내부에서 항상 돌아가야하는 서버를 띄울 때 사용한다고 함.

CMD는 컨테이너를 생성할 때만 실행된다. (docker run)

ENTRYPOINT는 컨테이너를 시작할 때마다 실행된다. (docker start)

명령어 형식은 둘 다 ["<커맨드>", "<파라미터1>", "<파라미터2>"] 을 사용함.

다른 형식도 있긴한데 둘 다 쓰이는 공통적인것으로 외우는게 편할것같다.

 

 

- 생성한 Dockerfile을 이미지로 빌드

이미지 빌드 명령어는 docker build -t 이미지 이름:이미지 버전

이렇게 하면된다.