루트 없이 Docker에 Vue 앱 배포
안타깝게도 Dockerfile에서 사용자를 변경하는 것만큼 간단하지 않습니다. nginx 이미지가 루트로 실행되는 이유는 Linux에서 포트 80 또는 443에서 앱을 실행하려면 사용자가 루트여야 하기 때문입니다. 이를 가능하게 하기 위해 컨테이너를 변경할 수 있지만 변경 사항이 복잡합니다. 운 좋게도 우리는 컨테이너를 사용하고 있으므로 컨테이너에서 웹 서버가 실행되는 실제 포트는 관련이 없습니다. 따라서 다른 포트(예: 8080)에서 루트가 아닌 사용자의 컨텍스트에서 앱을 실행할 수 있습니다. 컨테이너를 실행할 때 앱을 인터넷에 직접 노출해야 하는 경우 프로덕션 배포를 위해 포트 80 또는 443에 다시 매핑할 수 있습니다. 제 경우에는 SSL/TLS 인증서가 리버스 프록시 또는 Kubernetes 인그레스에서 호스팅되므로 Docker 이미지에 인증서를 포함하지 않습니다.
가장 먼저 변경해야 할 것은 nginx의 기본 구성 파일입니다. 이번에는 8080이 될 것입니다. 나머지 구성은 기본 설정이지만 앱을 포트 443에 직접 노출하는 경우에는 있을 수 있습니다.
server {
listen 8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 400 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
다음으로 nginx가 실행되는 사용자 컨텍스트를 변경해야 합니다. 운 좋게도 nginx 사람들은 이에 대해 생각했고 이미 기본 컨테이너에 바로 nginx라는 사용자를 만들었으므로 시스템 수준의 사용자 구성이 필요하지 않습니다. 전체 Dockerfile은 다음과 같습니다.
FROM nginx:1.19
RUN rm -f /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
RUN chown -R nginx:nginx /var/cache/nginx && \
chown -R nginx:nginx /var/log/nginx && \
chown -R nginx:nginx /etc/nginx/conf.d
RUN touch /var/run/nginx.pid && \
chown -R nginx:nginx /var/run/nginx.pid
USER nginx
COPY dist /usr/share/nginx/html
EXPOSE 8080
Dockerfile의 관련 부분을 살펴보겠습니다. nginx 사용자가 로깅, 캐싱 및 구성과 프로세스 ID 파일에 대한 소유권을 가져야 하는 몇 가지 디렉토리가 있습니다.
RUN chown -R nginx:nginx /var/cache/nginx && \
chown -R nginx:nginx /var/log/nginx && \
chown -R nginx:nginx /etc/nginx/conf.d
RUN touch /var/run/nginx.pid && \
chown -R nginx:nginx /var/run/nginx.pid
다음에 사용자 컨텍스트를 설정하므로 nginx는 이 사용자 아래에서 실행됩니다.
USER nginx
그런 다음 Dockerfile은
dist
폴더의 내용을 이미지에 복사합니다. 다음은 npm으로 Vue 앱을 빌드한 결과입니다.COPY dist /usr/share/nginx/html
마지막으로 80 또는 443이 될 수 없는 포트를 설정합니다.
EXPOSE 8080
이제 Dockerfile은 루트 권한으로 실행되지 않는 컨테이너를 생성하도록 설정되었습니다. 이 앱은 Docker, Kubernetes 인그레스 또는 리버스 프록시를 사용하여 80 또는 443 이상을 실행할 수 있으며 기본값을 사용하는 것보다 위험이 적습니다.
Reference
이 문제에 관하여(루트 없이 Docker에 Vue 앱 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/davetrux/deploy-a-vue-app-in-docker-without-root-3f67텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)