한 Docker 컨테이너의 콘텐츠를 다른 컨테이너에 제공 / 업데이트하는 방법

Bozdoz

nginx에서 제공하는 NodeJS를 실행하려고합니다. NodeJS 서버에 프록시하고 이미지, CSS, js와 같은 정적 콘텐츠를 제공하고 싶습니다.

내 docker-compose 파일은 다음과 같습니다.

version: "3.7"

services:
  web:
    build: .
    image: 127.0.0.1:5000/test
    volumes:
      - public:/app/public
    deploy:
      replicas: 2

  nginx:
    image: nginx:stable-alpine
    ports:
      - 80:80
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      # share files from web
      - public:/static:ro

volumes:
  public:

내 Dockerfile이 실행 npx webpack -p되어 모든 정적 파일 ( /app/public) 을 빌드 한 다음 node /app/src/server.min.js. NodeJS는 최소한의 페이지 업데이트를 위해 ajax 엔드 포인트와 함께 서버 측 React를 제공합니다. 위에서 언급했듯이 nginx 컨테이너는 정적 콘텐츠 (css, js, 이미지 등)를 제공합니다.

문제는 정적 파일을 업데이트 할 수 없다는 것입니다. 볼륨이 생성되고 채워지면 해당 파일을 변경할 수 없습니다. 즉, CSS 또는 JS를 업데이트 할 수 없습니다.

이 동작은 docker-compose up 또는 docker stack deploy로 볼 수 있습니다.

볼륨을 다시 만들거나 컨테이너간에 다른 방식으로 파일을 제공 할 수있는 방법이 있습니까?

데이비드 메이즈

여기에서 취할 수있는 세 가지 기본 접근 방식이 있습니다.

첫 번째는 빌드시 Nginx 또는 다른 것이 호스팅 할 수있는 Docker 공간 외부 어딘가에 정적 자산을 복사하는 것입니다. 어쨌든 AWS에서 실행중인 경우 S3에서 직접 제공 할 수 있습니다. 로컬 환경에있는 경우 명명 된 볼륨 대신 호스트 경로를 사용하십시오. 이것은 대부분 "처음 사용할 때만"볼륨 동작을 피할 뿐이지 만 Docker 외부에서 약간의 작업이 필요합니다.

동일한 콘텐츠를 두 개의 이미지로 빌드하고 볼륨을 사용하여 공유하지 않을 수 있습니다. nginx 이미지에 대한 두 번째 Dockerfile을 추가해야하며 정적 콘텐츠를 빌드하기위한 일종의 빌드 파이프 라인 (Webpack?)이있는 경우 해당 파일이 미리 실행되도록해야합니다. 다음과 같은 Dockerfile 라인

COPY --from=127.0.0.1:5000/test /app/public /static

작동 할 수 있습니다.

webDocker에 의존하는 대신 시작시 이미지가 자체 데이터를 수동으로 복사하도록 할 수도 있습니다. 다음과 같은 진입 점 스크립트를 가질 수 있습니다.

#!/bin/sh
if [ -d /static ]; then
  cp -r /app/public/* /static
fi
exec "$@"

이미지에 추가하고 /static두 컨테이너 에 공유 볼륨을 마운트하십시오 .

이러한 모든 경우는 Docker가 볼륨을 자동으로 채우는 동작을 방지합니다. 나는 일반적으로 정확히이 문제로 인해 그것을 피하려고 합니다. 컨테이너를 처음 실행할 때만 발생 하지만 실제로는 자주 업데이트, 재배포 등을 수행 하지만 해당 볼륨이 이미 존재하므로 Docker가 업데이트하지 않습니다. . (이 동작은 수정없이 표준 Docker 이미지를 실행할 수 있음에도 불구하고 Kubernetes에서 전혀 작동하지 않습니다.)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Blob 컨테이너 및 콘텐츠를 복제하는 방법

분류에서Dev

한 Docker 컨테이너에서 다른 호스트의 다른 컨테이너로 파일을 복사하는 방법은 무엇입니까?

분류에서Dev

Docker 컨테이너의 Ruby bin 폴더를 업데이트하는 적절한 방법은 무엇입니까?

분류에서Dev

couchdb 컨테이너에서 동일한 docker-compose 파일의 다른 컨테이너 웹 애플리케이션으로 데이터베이스를 매핑하는 방법

분류에서Dev

한 컨테이너를 다른 컨테이너 위에 플러터로 자르는 방법?

분류에서Dev

한 Docker 컨테이너의 nodejs 앱을 Docker Swarm의 다른 컨테이너에있는 mongodb에 연결

분류에서Dev

AJAX, jQuery-$ _GET [ 'var']이 설정된 경우 한 컨테이너에 애니메이션을 적용하고 새 콘텐츠를로드 한 다른 컨테이너를 페이드 인하는 방법은 무엇입니까?

분류에서Dev

다른 컨테이너에서 데이터베이스를 마운트하는 Docker 컨테이너

분류에서Dev

LXD 관리 컨테이너 (ZFS에서)는 다른 컨테이너를 삭제 한 후 사라집니다.

분류에서Dev

Docker, PHP의 다른 컨테이너 내부에서 컨테이너 IP를 얻는 방법은 무엇입니까?

분류에서Dev

div 콘텐츠 컨테이너는 공간의 80 %를 차지하고 왼쪽에 매달려 있습니다.

분류에서Dev

W3.CSS 컨테이너를 다른 컨테이너의 중앙에 배치하는 방법

분류에서Dev

두 개의 Docker 컨테이너간에 하나의 폴더 콘텐츠를 공유하고 그중 하나가 공유 폴더에 쓰기를 삭제하도록 허용하는 방법은 무엇입니까?

분류에서Dev

docker-compose를 사용하여 다른 컨테이너에 대한 전체 볼륨 액세스를 허용하도록 하나의 컨테이너를 설정하는 방법

분류에서Dev

Docker 노드에 대한 별도의 컨테이너, mongo, 노드 컨테이너에서 mongo를 채우는 방법

분류에서Dev

동일한 Kubernetes 포드의 다른 컨테이너를 통해 컨테이너의 모든 트래픽을 라우팅하는 방법은 무엇입니까?

분류에서Dev

Docker 컨테이너를 원격 호스트에 제공하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

프로덕션의 다른 호스트에 데이터베이스 용 Docker 컨테이너를 배치하는 방법은 무엇입니까?

분류에서Dev

Docker compose가 다른 컨테이너를 제거합니다.

분류에서Dev

HTML에서 콘텐츠가 아닌 div 컨테이너를 제거하는 방법

분류에서Dev

컨테이너 B를 업데이트 한 후 컨테이너 A를 다시로드하는 방법은 무엇입니까?

분류에서Dev

다른 호스트에서 실행되는 Docker 컨테이너에 대한 공유 파일 시스템을 얻는 방법은 무엇입니까?

분류에서Dev

다른 호스트에서 실행되는 Docker 컨테이너에 대한 공유 파일 시스템을 얻는 방법은 무엇입니까?

분류에서Dev

컨테이너에서 선택한 이미지를 삭제하는 방법

분류에서Dev

Docker : 코드 변경시 컨테이너를 업데이트하는 방법

분류에서Dev

Dockerfile을 작성하여 다른 Docker 컨테이너를 실행하는 방법

분류에서Dev

docker-compose volume 지시문을 사용하여 여러 컨테이너에서 코드 콘텐츠를 공유하고 싶습니다.

분류에서Dev

한 도커 컨테이너에서 다른 컨테이너로 명령을 실행하는 방법

분류에서Dev

Docker 컨테이너의 메모리 제한이 작동하지 않습니다.

Related 관련 기사

  1. 1

    Blob 컨테이너 및 콘텐츠를 복제하는 방법

  2. 2

    한 Docker 컨테이너에서 다른 호스트의 다른 컨테이너로 파일을 복사하는 방법은 무엇입니까?

  3. 3

    Docker 컨테이너의 Ruby bin 폴더를 업데이트하는 적절한 방법은 무엇입니까?

  4. 4

    couchdb 컨테이너에서 동일한 docker-compose 파일의 다른 컨테이너 웹 애플리케이션으로 데이터베이스를 매핑하는 방법

  5. 5

    한 컨테이너를 다른 컨테이너 위에 플러터로 자르는 방법?

  6. 6

    한 Docker 컨테이너의 nodejs 앱을 Docker Swarm의 다른 컨테이너에있는 mongodb에 연결

  7. 7

    AJAX, jQuery-$ _GET [ 'var']이 설정된 경우 한 컨테이너에 애니메이션을 적용하고 새 콘텐츠를로드 한 다른 컨테이너를 페이드 인하는 방법은 무엇입니까?

  8. 8

    다른 컨테이너에서 데이터베이스를 마운트하는 Docker 컨테이너

  9. 9

    LXD 관리 컨테이너 (ZFS에서)는 다른 컨테이너를 삭제 한 후 사라집니다.

  10. 10

    Docker, PHP의 다른 컨테이너 내부에서 컨테이너 IP를 얻는 방법은 무엇입니까?

  11. 11

    div 콘텐츠 컨테이너는 공간의 80 %를 차지하고 왼쪽에 매달려 있습니다.

  12. 12

    W3.CSS 컨테이너를 다른 컨테이너의 중앙에 배치하는 방법

  13. 13

    두 개의 Docker 컨테이너간에 하나의 폴더 콘텐츠를 공유하고 그중 하나가 공유 폴더에 쓰기를 삭제하도록 허용하는 방법은 무엇입니까?

  14. 14

    docker-compose를 사용하여 다른 컨테이너에 대한 전체 볼륨 액세스를 허용하도록 하나의 컨테이너를 설정하는 방법

  15. 15

    Docker 노드에 대한 별도의 컨테이너, mongo, 노드 컨테이너에서 mongo를 채우는 방법

  16. 16

    동일한 Kubernetes 포드의 다른 컨테이너를 통해 컨테이너의 모든 트래픽을 라우팅하는 방법은 무엇입니까?

  17. 17

    Docker 컨테이너를 원격 호스트에 제공하는 가장 좋은 방법은 무엇입니까?

  18. 18

    프로덕션의 다른 호스트에 데이터베이스 용 Docker 컨테이너를 배치하는 방법은 무엇입니까?

  19. 19

    Docker compose가 다른 컨테이너를 제거합니다.

  20. 20

    HTML에서 콘텐츠가 아닌 div 컨테이너를 제거하는 방법

  21. 21

    컨테이너 B를 업데이트 한 후 컨테이너 A를 다시로드하는 방법은 무엇입니까?

  22. 22

    다른 호스트에서 실행되는 Docker 컨테이너에 대한 공유 파일 시스템을 얻는 방법은 무엇입니까?

  23. 23

    다른 호스트에서 실행되는 Docker 컨테이너에 대한 공유 파일 시스템을 얻는 방법은 무엇입니까?

  24. 24

    컨테이너에서 선택한 이미지를 삭제하는 방법

  25. 25

    Docker : 코드 변경시 컨테이너를 업데이트하는 방법

  26. 26

    Dockerfile을 작성하여 다른 Docker 컨테이너를 실행하는 방법

  27. 27

    docker-compose volume 지시문을 사용하여 여러 컨테이너에서 코드 콘텐츠를 공유하고 싶습니다.

  28. 28

    한 도커 컨테이너에서 다른 컨테이너로 명령을 실행하는 방법

  29. 29

    Docker 컨테이너의 메모리 제한이 작동하지 않습니다.

뜨겁다태그

보관