2017-04-13 6 views
0

Dock에서 Go 및 Glide로 앱을 제작 중입니다. 또한 반사를 사용하여 자동으로 컴파일을 트리거해야합니다.Docker에서 Go Glide 설정

글라이드를 도커로 작동시키는 방법을 알 수 없습니다.

Dockerfile

FROM golang:1.8.1-alpine 

ENV GOBINARIES /go/bin 
ENV BUILDPATH /code 
ENV REFLEXURL=http://s3.amazonaws.com/wbm-raff/bin/reflex1.8a 
ENV REFLEXSHA=19bdbbb68c869f85ee22a6b7fa9c73f8e5b46d0fe7a73df37e028555a6ba03e8 

WORKDIR $GOBINARIES 
RUN rm -rf /var/cache/apk/* 
RUN wget -q "$REFLEXURL" -O reflex 
RUN chmod +x /go/bin/reflex 

ENV TOOLS /go/_tools 

RUN mkdir -p $BUILDPATH 
ENV PORT 5000 
EXPOSE $PORT 

RUN mkdir -p $TOOLS 
ADD build.sh $TOOLS 
ADD reflex.conf $TOOLS 
RUN chown root $TOOLS/build.sh 
RUN chmod +x $TOOLS/build.sh 

WORKDIR $BUILDPATH 
CMD ["reflex","-c","/go/_tools/reflex.conf"] 

build.sh

set -e 
echo "[build.sh:building binary]" 
cd $BUILDPATH 
glide install -s -v 
go build -o /servicebin && rm -rf /tmp/* 
echo "[build.sh:launching binary]" 
/servicebin 

reflex.conf

-sr '\.build$' -- sh -c '/go/_tools/build.sh' 

고정 표시기-compose.yaml

version: '3' 
services: 
    logen: 
    build: 
     context: ./Docker 
     dockerfile: Dockerfile 
    ports: 
    - "5000:5000" 
    volumes: 
    - .:/code 
,

아톰이

[ 
    { 
    "srcDir": ".", 
    "destDir": ".", 
    "files": "**/*.go", 
    "command": "echo $(date) - ${srcFile} > .build" 
    } 
] 

main.go에게 구성 파일을 실제로

package main 

import (
    "io" 
    "log" 
    "net/http" 
    "os" 
    "github.com/astaxie/beego" 
) 

func hello(w http.ResponseWriter, r *http.Request) { 
    io.WriteString(w, "Hello world!1") 
} 

func main() { 
    log.SetOutput(os.Stdout) 

    port := ":" + os.Getenv("PORT") 
    http.HandleFunc("/", hello) 

    log.Printf("\n Application is listening on %v\n", port) 

    http.ListenAndServe(port, nil) 
} 

enter image description here

+0

당신은 내가 폴더 안에 – har07

+0

... 당신의 dockerfile에서 build.sh를 실행하기 전에 글라이드를 설치하는 명령을 추가해야합니다. 도커의 셸이 외부 파일에 접근 할 수 없습니까? glide.lock and glide.yaml? – benoitcn

+0

내 Dockerfile 아래 대답 – benoitcn

답변

0

플러그인에-저장, 나는 용기에 글라이드를 설치할 필요가 없습니다! docker-compose.yml의 $ GOPATH/src에 호스트 컴퓨터의 공급 업체 폴더 만 반영하면됩니다. 다음 컴파일이 괜찮을 것입니다.

version: '3' 
services: 
    logen: 
    build: 
     context: ./Docker 
     dockerfile: Dockerfile 
    ports: 
    - "5000:5000" 
    volumes: 
    - .:/code 
    - ./vendor:/go/src