본문 바로가기

CLOUD/CUBE

도커(Docker) - Dockerfile 빌드 및 이미지 생성

반응형

Dockerfile은 Docker로 이미지를 빌드(build)하거나 컨테이너(container)를 생성(run) 할 때 쓰이는 정보나 명령어들을 파일로 만든 것입니다.

 

관리 및 배포, 수정이 쉽기 때문에 널리 쓰입니다.

 

 

도커 파일을 만듭니다

 

vi Dockerfile

 

FROM centos:7

RUN echo hello > /tmp/a.txt

RUN yum -y install httpd

ENTRYPOINT ["bin/sleep"]

CMD ["3600"]

 

RUN은 컨테이너가 생성된 후에 실행되는 명령어입니다. 수량 제한이 없이 쓸 수 있습니다.

 

ENTRYPOINT와 CMD는 컨테이너가 생성될 때 실행되는 명령어입니다. 한 번씩 밖에 못씁니다.

 

ENTRYPOINT와 CMD가 같이 쓰일 때는 CMD가 ENTRYPOINT의 인수가 됩니다.

 

 

 

이제 Dockerfile을 이용하여 이미지 빌드합니다. -t는 tag입니다.

 

docker build -t test1 .

docker images

docker run -d test1

docker ps

 

 

캘린더 명령어로 한 번 더 테스트합니다.

 

FROM centos:7

#RUN echo hello > /tmp/a.txt

#RUN yum -y install httpd

ENTRYPOINT ["bin/cal"]

CMD ["11", "2021"]

 

 

background로 실행하면 캘린더 안보입니다. foregound로 실행해야 합니다.

 

docker build -t test2 .

docker run test2

 

 

 

base 파일을 이용해 보겠습니다.

 

html 파일을 압축해 줍니다.

 

vi index.html

 

mywebserver

 

tar -cf web.tar index.html

 

 

Dockerfile을 수정 후 Dockerfile.base로 이름을 변경해 줍니다. EXPOSE는 포트 설정입니다.

ONBUILD는 이미지 빌드할 때가 아닌 컨테이너 실행합니다.

 

vi Dockerfile

 

FROM ubuntu:18.04

RUN apt-get -y update
RUN apt-get -y install nginx

EXPOSE 80

ONBUILD ADD web.tar /var/www/html/

CMD ["nginx", "-g", "daemon off;"]

 

mv Dockerfile Dockerfile.base

 

 

baseweb으로 빌드합니다. Dockerfile이 아니기 때문에 -f 옵션을 줍니다.

 

docker build -t baseweb -f Dockerfile.base .

 

 

base를 빌드하였으면 다시 파일명 변경 후 Dockerfile을 수정합니다

 

mv Dockerfile.base Dockerfile

 

vi Dockerfile

FROM baseweb

 

 

수정한 Dockerfile을 webserver로 빌드합니다.

 

docker build -t webserver .

 

컨테이너 실행시킵니다.

 

docker run -d -p 80:80 webserver

 

docker container inspect jolly_dhawan | grep Address

 

index.html 파일에 작성한 내용을 볼 수 있습니다.

 

curl 172.17.0.2:80

 

 

 

보통 Dockerfile.base 형식으로 기본 베이스를 만들어 배포 후 각 서비스에 맞게 수정을 거칩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형