Dockerfile 에서 ENTRYPOINT 사용하기
이번 단계에서는 Dockerfile 에서 ENTRYPOINT 명령을 사용하는 방법을 배우고, 다른 포트 (9100) 를 사용해 보겠습니다.
-
WebIDE 에서 Dockerfile을 다시 엽니다.
-
Dockerfile의 내용을 다음과 같이 수정합니다.
FROM nginx
COPY index.html /usr/share/nginx/html/
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
이 Dockerfile 은 이전의 환경 변수 설정과 sed 명령을 제거했습니다. 대신 ENTRYPOINT 스크립트를 사용하여 런타임에 설정을 처리합니다. 이렇게 하면 이미지가 훨씬 더 유연해집니다.
- 같은 디렉토리에 다음 내용을 가진
start.sh라는 새 파일을 만듭니다.
#!/bin/bash
## NGINX_PORT가 설정되지 않은 경우 기본 포트 설정
export NGINX_PORT=${NGINX_PORT:-9100}
## nginx 설정에서 포트 교체
sed -i "s/listen[[:space:]]*80;/listen $NGINX_PORT;/g" /etc/nginx/conf.d/default.conf
echo "Starting Nginx on port $NGINX_PORT"
nginx -g 'daemon off;'
이 스크립트는 기본 포트를 설정하고, 컨테이너 시작 시 Nginx 설정을 수정하며, Nginx 가 실행될 포트를 알리는 메시지를 출력한 후 Nginx 를 시작합니다.
-
WebIDE 에서 두 파일 모두 저장합니다.
-
WebIDE 터미널에서 새로운 태그로 Docker 이미지를 다시 빌드합니다.
docker build -t my-nginx-entrypoint .
- 새 이미지를 기반으로 컨테이너를 실행합니다. 이번에는 환경 변수를 사용하여 포트를 9100 으로 설정하겠습니다.
docker run -d -p 9100:9100 -e NGINX_PORT=9100 --name entrypoint-container my-nginx-entrypoint
- 컨테이너 로그를 확인하여 시작 메시지를 확인합니다.
docker logs entrypoint-container
출력 결과에서 "Starting Nginx on port 9100"이라는 메시지를 볼 수 있어야 합니다.
- 웹 서버가 새 포트에서 올바르게 작동하는지 확인합니다.
curl http://localhost:9100
터미널에 index.html 파일의 내용이 출력되는 것을 확인할 수 있습니다.