-
[Docker] Go 컨테이너 실행법CoreOS/Docker 2016. 12. 2. 10:47
Go 인스턴스 실행
이 이미지를 사용하는 가장 직접적인 방법은 Go 컨테이너를 빌드 및 런타임 환경으로 사용하는 것입니다. Dockerfile에서 다음 내용을 따라 뭔가를 작성하면 프로젝트를 컴파일하고 실행할 수 있습니다.
FROM golang:1.6-onbuild
이 이미지에는 대부분의 애플리케이션을 다루는 여러 개의 ONBUILD 트리거가 포함되어 있습니다. 이 빌드는 ./go/src/app 경로에 복사되고, get -d -v 와 같은 명령어를 실행하며, go install -v를 실행합니다.
arguments없이 이미지를 실행할 때, 해당 이미지에 기본명령 인 CMD [ "app"] 명령도 포함되어 있습니다.
Docker 이미지를 작성하고 실행할 수 있습니다.
$ docker build -t my-golang-app . # 사용자의 커스터마이징된 Dockerfile 생성 $ docker run -it --rm --name my-running-app my-golang-app # 사용자가 만든 Dockerfile을 my-running-app이라는 컨테이너 이름으로 실행. 만약 컨테이너가 종료되면 바로 삭제
참고 : golang:onbuild의 기본 명령은 실제로 go-wrapper 실행이며 set -x가 포함되어 있으므로 응용 프로그램 시작시 binary name이 stderr에 인쇄됩니다. 만약 이 동작이 마음에 들지 않으면, CMD [ "app"] (또는 만약 Go custom import 경로가 사용중인 경우 CMD [ "myapp"])를 추가하면 빌드 된 바이너리를 직접 실행합니다.
Docker 컨테이너에서 Go 컴파일하기
컨테이너 내부에서 앱을 실행하는 것이 적절하지 않은 경우가 있습니다. Docker 인스턴스 내부에서 앱을 실행하지 않고 컴파일하기 위해서 다음과 같이 작성합니다.
$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.6 go build -v
위에서 지정한 $PWD 경로의 디렉토리가 컨테이너의 볼륨으로 추가되고, -w 옵션으로 컨테이너 안의 프로세스가 실행될 디렉터리를 설정합니다. go 디렉토리(-w 옵션으로 준 디렉토리)에 프로젝트를 컴파일하고 myapp에 실행 파일을 출력하도록 명령하는 go build 명령을 실행합니다. 또는 Makefile이 있으면 컨테이너에서 make 명령을 실행할 수 있습니다.
$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.6 bash -c make
Docker 컨테이너에서 Go 크로스컴파일하기
만약 사용자의 OS가 리눅스인데 windows/386으로 컴파일을 하고 싶은 경우 아래와 같이 실행합니다.
$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp -e GOOS=windows -e GOARCH=386 golang:1.6 go build -v
또는 한번에 여러 플랫폼에 맞게 컴파일할 수 있습니다.
$ docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.6 bash $ for GOOS in darwin linux; do > for GOARCH in 386 amd64; do > go build -v -o myapp-$GOOS-$GOARCH > done > done