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 형식으로 기본 베이스를 만들어 배포 후 각 서비스에 맞게 수정을 거칩니다.
'CLOUD > CUBE' 카테고리의 다른 글
쿠버네티스 설치(Kubernetes install) (0) | 2021.10.24 |
---|---|
도커(Docker) 레지스트리(Registry) 생성 (0) | 2021.10.24 |
도커(Docker) 컨테이너(container) 이미지(image) 만들기 (0) | 2021.10.18 |
도커(Docker) 볼륨(Volume) 할당 (0) | 2021.10.17 |
도커(Docker) 명령어 - 네트워크(network) (0) | 2021.10.16 |