Layer

RUN yum -y update
RUN yum -y install httpd

이 경우 두 RUN은 다른 layer에 속한다. 즉 yum -y update의 결과가 yum -y install httpd에 반영되지 않는다.

따라서 update 후에 httpd를 설치하고 싶다면 다음과 같이 작성해야 한다.

RUN yum -y update && yum -y install httpd

또는

RUN yum -y update \\
    && yum -y install httpd

CMD Vs. ENTRYPOINT

docker run -it --name centos01 centos:7 /bin/bash

이 명령어에서 /bin/bash는 사실 container를 run할 때 실행할 명령어를 의미한다.

CMD는 도커를 run 하면서 뒤에 명령어를 적어주면 무시되고 ENTRYPOINT는 무조건 실행된다.

FROM centos:7

RUN yum -y update && \\
    yum -y install httpd

EXPOSE 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

WORKDIR /var/www/html
COPY ./index.html .

위와 같은 Dockerfile에서
docker run -it --name centos01 centos:7 /bin/bash으로 실행할 경우 /usr/sbin/httpd -D FOREGROUND는 실행되지 않는다. CMD가 아니라 ENTRYPOINT라면 실행된다.