2017-11-01 7 views
0

나는 docker-compose를 통해 관리하고 싶은 몇 가지 자식 repo가 ​​있습니다. 도커가 작성한 프로젝트가 git repo가되기를 원합니다.마이크로 서비스 설정

UI-Repo --> .git --> Dockerfile

Server-Repo --> .git --> Dockerfile

Local-Development-Repo --> .git --> docker-compose.yml

불행하게도, 내가 인해 도커의 한계로 UI-환매 약정 및 서버 리포 dockerfiles에 액세스 할 수없는 것 : 그래서 나는 다음과 같은 조직을 가지고있다. Local-Development-Repo 내의 UI-Repo 및 Server-Repo에 대한 sym 링크가 작동하지 않습니다. 그래서 두 가지 옵션을 생각해 볼 수 있습니다.

  1. 망할 놈의 서브 모듈은

    • 이 방법의 단점은 내가 package.json을 복사 node_modules 내 .gitignore에 있기 때문에 내 dockerfiles 내부 npm install을 수행해야 할 것입니다. 이 작업을 순전히 개발 용으로하고 이상적으로는 도커 컨테이너 내부에 종속성을 설치하는 대신 볼륨을 사용해야합니다.
  2. docker-compose.yml 파일이 들어있는 상위 디렉토리 내부 UI-Repo 및 서버 - Repo.

    • 이 접근법의 단점은이 부모가 힘내를 통해 추적되기를 바랍니다. git repo가 ​​두 개 더있는 부모 디렉토리에서 .git을 사용한다고 생각하지 않습니다.

여러 독립적 인 자식의 repos을 가진 microservices 아키텍처를 설정하고 고정 표시기가-구성하여 지역 발전을위한이 프로젝트를 관리하기 위해 제안 된 방법은 무엇입니까?

+0

도커 작성시 다른 저장소를 참조하려면 왜 Dockerfile에 액세스해야합니까?다른 docker 이미지의 이미지를 자신의 repo에 만들고 docker-compose에서 이미지를 만듭니다. 어쩌면 당신의 유스 케이스를 놓치고 있습니까? – Rash

+0

@Rash - docker-compose가 프로젝트의 다양한 서비스를보다 잘 관리하는 데 사용되므로 단순히 서버 및 UI 서비스를 실행하기 위해'docker-compose up '을 실행할 수 있다고 생각합니다. 매번 repo를 실행하십시오.) 각 프로젝트에 대한 도커 내부의 "볼륨"을 활용하고 싶습니다. 그렇게하면 개발 중에 UI에서 무언가를 변경하면 실행중인 서비스가 이미지를 다시 작성하거나 다시 실행하지 않고도 자동으로 감지 할 수 있습니다. – Chris

+0

그래서 실제 파일이 볼륨 옵션을 통해로드되는 모든 UI 프로젝트에 기본 docker 파일이 필요합니다. 해당 도커 파일을 별도로 작성하고 도커에서 작성한 참조를 작성하고 해당 빌드에 데이터를 마운트하십시오. 다른 프로젝트의 도커 파일에는 액세스 할 필요가 없습니다. – Rash

답변

-1

다른 UI 프로젝트의 Dockerfile에 액세스 할 필요가 없습니다. 모든 UI 프로젝트에 대해 자신의 프로젝트에서 로컬로 이미지를 빌드하십시오. 그런 다음 이미지를 아래와 같이 도커 작성 파일로 참조하십시오.

참조하는 동안 각각의 코드베이스를 도커 안에 마운트 할 수 있습니다. 이렇게하면 UI 코드를 변경하더라도 다시 고정물 이미지를 다시 작성할 필요가 없습니다.

version: "2" 
services: 
    UIProjectA: 
    image: ui_project_A_local_build:0.0.1 
    container_name: ui_project_A_local_build 
    ports: 
     - "8081:8080" 
    volumes: 
     - /path/to/local/folder/in/project/A:/path/to/docker/folder 
    UIProjectB: 
    image: ui_project_B_local_build:0.0.1 
    container_name: ui_project_B_local_build 
    ports: 
     - "8082:8080" 
    volumes: 
     - /path/to/local/folder/in/project/B:/path/to/docker/folder 
+0

의견이없는 부정 투표는 나쁜 매너입니다. 답변에 문제가 있으면 토론하십시오. 설치를 테스트했는데 제대로 작동하므로 긍정적으로 대답했습니다. – Rash

+0

답장을 누가 downvoted했는지 (아래의 @lecstor에 대해) 모르겠지만 수동으로 각 Repo를 빌드하고 싶지 않기 때문에 다르게 일을 끝냈습니다. 내가 좋아하는 뭔가를 결국 : 부모 - 고정 표시기 - compose.yml (로컬 - 개발 - 리포/고정 표시기 - compose.yml에 연결 SYM) - 로컬 - 개발 - 리포 -> 고정 표시기 - compose.yml - UI-Repo - 서버 Repo 도움을 주셔서 감사합니다. 감사! – Chris

+0

@Chris 죄송합니다. chris. 내 의견은 당신을위한 것이 아닙니다. 나는 네가 기분을 상하게하지 않았 으면 좋겠다. 내 대답에 관해서는, 당신은 당신의 프로젝트를 반복해서 만들 필요가 없습니다. 빈 apache2 컨테이너로 UIProjectA와 UIProjectB를 한 번 빌드하면 docker-compose가 컨테이너를 시작하기 전에 실제 코드를 마운트합니다. 접근 방식의 단점은 동일한 Dockerfiles를 사용하려는 다른 프로젝트가 그 프로젝트를 다시 빌드해야한다는 것입니다. 그렇다면 모든 프로젝트마다 한 번만 해보십시오. 더 자세히 설명해야하는지 알려주세요. 명확한 명령을 내릴 수 있습니다. – Rash

-1

문제가 귀하의 도커 작성 파일에만 있다고 생각됩니다. 나는 동일한 디렉토리 구조를 가지고 있으며 잘 동작한다. repo 디렉토리로 빌드 컨텍스트를 설정하고 Local-Development-Repo에서 docker-compose를 실행하면됩니다.

Parent-Folder - docker-compose.yml (sym linked to Local-Development-Repo/docker-compose.yml) - Local-Development-Repo - docker-compose.yml - UI-Repo - Server-Repo

이 방법은, 내가 고정 표시기 - compose.yml을 추적 할 수 있으며, 동시에 학부모 -에서 docker-compose-up을 통해 모든 서비스를 시작할 수 있습니다

version: '2.1' 
services: 
    ui: 
    image: ui 
    container_name: ui 
    build: 
     context: ../UI-Repo 
    server: 
    build: 
     context: ../Server-Repo 
    image: server 
    container_name: server 
+0

이미 구축 된 이미지를 지정했기 때문에 이것이 효과가 있다고 생각합니다. – Chris

+0

아니요, 이미지가 없으면'docker-compose up ui '할 때 생성/생성됩니다. 그것이 존재하고 다시 빌드하기를 원한다면'빌드 빌드를 도킹 - 작성할 수 있습니다. ' (그리고 만약 당신이'docker-compose up'을한다면 필요한 경우 모든 서비스를 빌드/시작합니다) – lecstor

0

내가 좋아하는 일을하고 결국 폴더.