반갑습니다!
이번 포스트에서는 Dockerfile 주요 명령어 중
ENTRYPOINT와 RUN를 살펴보도록 하겠습니다 ^^
ENTRYPOINT는 docker run 명령시 함께 기재되는 CMD 명령에 의해 덮어씌워지지 않습니다
우선순위로 보자면, ENTRYPOINT가 선순위를 가진다고 할 수 있고,
ENTRYPOINT가 기재되어 있는 상황에서 docker run 명령시 CMD 명령어를 병기하면
해당 CMD 명령을 이 ENTRYPOINT의 명령 인자로 받게 됩니다 ^^
따라서 ENTRYPOINT에는 컨테이너 실행시 반드시 실행되어야 하는 명령어를 기재합니다
그리고 별도로 각 컨테이너 생성시 필요한 인자는
docker run 명령어 뒤에 붙이는 식으로 활용하기도 합니다 ^^

저번 시간에 미리 만들어둔 dockerfile인데요
이 CMD 부분을 ENTRYPOINT 명령어로 수정을 해주겠습니다 ^^

CMD 부분을 위와 같이 ENTRYPOINT 명령어를 이용하여 수정해줬습니다 ^^
이제는 별도로 CMD를 기재하더라도
ENTRYPOINT 명령에 앞서 덮어씌워지거나 하지 않습니다 !

$ docker run을 명령하여 해당 이미지를 이용해서 컨테이너를 실행시키겠습니다 ^^
해당 명령어가 정상적으로 동작하기 때문에 컨테이너의 STATUS는 Up 상태이지만,
httpd-foreground 명령이 기재되지 않았기 때문에 웹 서버에 접근하면
웹 서버로서의 기능은 하지 못 할겁니다 ^^

위 이미지와 같이
브라우저에 "사이트에 연결할 수 없음" 메세지가 출력 되는 것을
확인할 수 있겠습니다 ^^

$ docker inspect 명령어를 이용해 상세 정보를 조회해보면,
Cmd 부분에는 null이 표기되고,
Entrypoint에 설정한 "/bin/sh"가 나타나는 것을 확인할 수 있겠습니다 ^^

그럼 로그도 한 번 찍어볼까요?
$ docker logs 명령어를 사용해도 아무런 로그가 조회되지 않습니다
당연히, 예시의 설정상 웹 서버로서의 기능은 못 하고 있기 때문입니다 ^^

이번에는 echo 명령어를 활용해볼건데요
사용해보기 전에 echo의 기능은 위 이미지와 같이
그냥 일정 메세지를 출력하는 역할입니다 ^^
python에서 print() 함수와 같은 역할입니다 ^^

이번에는 ENTRYPOINT에 이 echo을 기재해보겠습니다 ^^
echo 부분 뒤에 "hello"를 입력했으니 해당 컨테이너가 실행되어 명령이 수행되면
hello 메세지가 화면에 출력되겠죠?

해당 Dockerfile을 이용해서 이미지를 만들고,
해당 이미지로 컨테이너를 실행시켰습니다 ^^
이번에는 docker run 명령시 뒷 부분에 cmd에 해당하는 명령어를 넣어줬는데요
Dockerfile 설정에 ENTRYPOINT가 기재되어 있었기 때문에
해당 CMD 명령어가 덮어씌기 되지 않고, ENTRYPOINT의 인자로 들어가게 되었습니다
따라서 로그를 찍어보면,
dockerfile 설정시 기재해놓은 "hello" 문자열과
docker run시 병기한 "/bin/sh hi" 부분이 같이 화면에 출력되는 것을 확인할 수 있겠습니다 ^^!

$ docker inspect를 이용해 해당 컨테이너의 상세 정보를 조회한 내용입니다 ^^
Cmd와 Entrypoint에 설정한 내용들이 기재되어 있는 것을 볼 수 있겠습니다 !
이번에는 RUN 명령어에 대해서 살펴보겠습니다
도커는 이미지 생성시 각 단계를 layer로 나눠서 작성을 하는데요
이를 통해 특정 단계 변경시, 전체 이미지를 다시 다운로드 받지 않아도 됩니다 ^^
RUN 명령어는 이미지 생성시
특정 layer를 만들 수 있는 단계를 부여하는 명령어로서,
보통 베이스 이미지에 패키지(프로그램)을 설치하여
새로운 이미지를 만들 때 많이 사용합니다 ^^!

연습을 위해서 vi 편집기를 이용하여
Dockerfile-apache라는 도커 파일을 하나 새로 만들어보겠습니다 ^^

이미지와 같이 ubuntu:18.04 버전을 베이스 이미지로 사용할 것이고,
RUN 키워드를 이용해서 베이스 이미지 위에 apache2를 쌓겠습니다 ^^
COPY명령어나 ENTRYPOINT 부분의 명령어 중
기본 설정 디렉토리나 일부 명령어가 앞선 예제와는 조금 다른 모습을 볼 수 있는데요
동일한 기능을 하는 이미지를 만들더라도,
버전에 따라서 명령어에 차이가 있습니다 ^^

해당 dockerfile을 build하고 컨테이너로 만들어 실행시켰습니다 ^^
STATUS가 정상적으로 Up 상태로 출력되는 것을 볼 수 있겠습니다 !
Build 완료까지 약 33초 가량이 소요되었는데요
빌드시 layer가 더 고도화 되어 복잡해지면,
당연히 빌드에 필요한 작업 소요시간이 증가할 수 밖에 없겠습니다 ^^

이번에는 apt-utils를 추가하겠습니다
같은 RUN 명령줄에 공백을 기준으로 구분하여
build시 쌓을 프로그램을 병기할 수 있습니다 ^^
해당 RUN 명령줄에서는 먼저 apache2를 설치하고, 그 다음 apt-utils를 수행하겠죠? ^^

아까는 33초가 소요되었었는데 이번에는 19초만에 작업을 수행하였습니다 ^^
이번 포스트에서는 dockerfile 작성시 사용되는 명령어 중
ENTRYPOINT와 RUN 명령어에 대해서 예시를 통해 알아보았습니다 ^^
포스트 읽어주셔서 감사드리고 다음 포스트에 이어서 나머지 명령어도 살펴보고
dockerfile에 관련된 주요 명령어 내용을 마무리짓도록 하겠습니다 !
'Docker > Docker file 사용법 익히기' 카테고리의 다른 글
[Docker File 익히기] 6. EXPOSE와 ENV, WORKDIR 명령어 사용해보기 (0) | 2024.08.14 |
---|---|
[Docker File 익히기] 4. docker logs, kill 명령어와 CMD 변경 사용해보기 (0) | 2024.08.14 |
[Docker File 익히기] 3. LABEL과 COPY 명령어, docker inspect 사용해보기 (0) | 2024.08.14 |
[Docker File 익히기] 2. FROM 명령어와 docker build의 --tag, -f, --pull 옵션 사용해보기 (0) | 2024.08.14 |
[Docker File 익히기] 1. docker file 작성시 사용되는 주요 명령어 소개 (0) | 2024.08.14 |