2017-12-20 8 views
1

내 프로젝트 구조 서비스 API를-가입 내부 파일golang 빌드

/github.com/user 
- libraries 
- services 
    - service-api-signup 
      - Dockerfile 
      - main.go 
    - service-api-second 
      - ... 
- vendor 

도커 공급 업체에 내 모든 종속성을 복사 도서관 고정 표시기에 경로를 가고 폴더를 어떻게

FROM golang 
COPY . /go/src/github.com/user/services/service-api-signup 

# need to copy all the dependencies on vendor to /go/src/github.com/.. 

빌드 할 이미지? (상위 디렉토리에서 복사하고 빌드해야 함)

내 개발 환경을 설정하려면 어떤 방법이 필요합니까?

감사합니다.

답변

1

정상적인 방법은 dep과 같은 종속성 관리자를 사용하는 것입니다.

대안은 공급 업체 디렉토리를 Dockerfile에 직접 복사하는 것입니다.하지만 이전 공급 업체 디렉토리를 그대로 복사하거나 이전에 사용하지 않은 가져 오기가 포함되어 있어도 이상적인 방법은 아닙니다.

+0

dep 파일을 내부 도커 파일로 사용하면 라이브러리 파일과 공급 업체 패키지를 도커 이미지로 가져 오려고합니까? 또는 github.com에서 설치를 시도합니까? –

+4

Docker 내부에 코드를 작성하는 이유는 무엇입니까? 빌드를 실행 한 다음 실행 파일과 기타 필요한 아티팩트를 Docker 이미지로 복사하는 것이 좋습니다. – Flimzy

+0

그러나 귀하의 질문에 대답하기 위해, 그것은 네트워크에서 일반적으로 (github이든 아니든 상관없이, 나는 당신이 무엇을 가져올 지 모르기 때문에) 설치할 것입니다. – Flimzy

0

최상위 수준의 공급 업체와 각 하위 디렉토리 (/ 서비스)의 dockerfiles와 같은 일종의 monorepo 설정이 있다고 가정하면 최상위 레벨 docker-compose.yml (docs)을 사용하여 모든 서비스를 정의한 다음 공급 업체가 컨테이너 내부에서 끝나도록 볼륨 마운트를 사용하십시오.

귀하의 예를 촬영

.../repo 
- libraries 
- services 
    - service-api-signup 
      - Dockerfile 
      - main.go 
    - service-api-second 
      - ... 
- vendor 
- docker-compose.yml 

docker-compose.yml 같이 보일 것입니다 :

version: '3' 
services: 
    service-api-signup: 
    container_name: api-signup 
    build: 
     context: ./service-api-signup 
    volumes: 
     - ./vendor:/go/src/github.com/user/services/service-api-signup/vendor 
    service-api-second: 
    container_name: api-second 
    build: 
     context: ./service-api-second 
    volumes: 
     - ./vendor:/go/src/github.com/user/services/service-api-second/vendor 

당신이 엔트리 포인트로 사용자 정의 스크립트를 설정할 수 있도록 dockerfile의 명령 엔트리 포인트를 오버라이드 (override) 할 수있는 옵션도있다 도커 작성시 실행 중일 때

entrypoint: /go/src/github.com/user/services/service-api-signup 

어쩌면 gin 같은 라이브 다시로드 도구의 사용을 만들 수있는 (생성하고 어딘가에 당신의 repo에 넣어 필요가 있음)과 같이 보일 수 있습니다 해당 스크립트 : 이것은 아직도 당신이 응용 프로그램을 구축하는 것을 의미

#!/bin/bash 

go get github.com/codegangsta/gin 

exec gin --immediate -appPort 8080 run 

내부 도커 (OS가 리눅스가 아닌 것은 성능 저하를 의미합니다). 그러나 이는 도커가 편리하게 작성하고 다시로드 할 수 있으며 컨테이너를 다시 작성할 필요가 없다는 것을 의미합니다.