docker golang git private 사용

joojong·2023년 1월 30일
0

golang으로 개발하게 된 계기가 nestjs , fastapi에서 공통으로 사용되는 상수, enum, database model을 컨테이너에 올라갈 떄마다 동기화 시키는 일이 너무 불편했고 예전에 썼던 글에서 공통으로 관리할 수 있으면 좋겠다는 생각에 golang을 시작하게 됐는데 코드도 간결하고 가볍고 그냥 좋다.

지금 개발하고 있는 서비스에서 api서버와 socket이 컨테이너로 올라가야 해서 공통을 모듈로 빼버리고 작업하기로 했다.

Private GitHub로 Golang 모듈 리포지토리 이용하기
이분 글에 잘 정리되어 있으니 private module repository 사용하는 방법은 여기를 보면 된다.

Dockerfile

FROM golang:1.19-alpine

ENV PROJECT_DIR=/app \
    GO111MODULE=on \
    CGO_ENABLED=0 \
    GOPRIVATE=github.com/git_account 

ARG GITACCOUNT
ARG GITTOKEN

WORKDIR /app
RUN mkdir "/build"
COPY . .
# install git
RUN apk add --no-cache git 
# private repo config
RUN git config --global url."https://${GITACCOUNT}:${GITTOKEN}@github.com/${GITACCOUNT}/private_repository_name".insteadOf "https://github.com/jjh930301/needsss_common"
RUN go get github.com/githubnemo/CompileDaemon
RUN go install github.com/githubnemo/CompileDaemon@latest
ENTRYPOINT CompileDaemon -build="go build -o /build/app" -command="/build/app"

git_account에 가져올 계정을 넣고 private_repository_name에 private repository name을 넣고 가져올 ARG에 git 계정과 발급받은 access token을 받아오는데 ARG는 compose file에서 따로 넘겨줘야 한다.

docker-compose.yml

version: "3"
services:
  ...
  gin:
    build:
      context: "./gin"
      dockerfile: Dockerfile
      args:
        - GITACCOUNT=${GIT_ACCOUNT}
        - GITTOKEN=${GIT_TOKEN}
    env_file:
      - .env
  ...

환경변수가 담겨있는 파일에서 가지고 온 값을 args로 넘겨줄 수 있는데 args는 빌드됐을 때 환경변수에 담기지 않고 build할 때만 사용된다.

생각보다 간단하다 그대로 git을 설치해주고 설정만 해주면 컨테이너에서도 제대로 동작하는 것을 알 수 있다.

profile
Back-end developer

0개의 댓글