들어가기에 앞서
본 포스팅은 Jetbrains의 GoLand라는 개발툴을 사용합니다.
VSCode 또는 기타 개발 IDE를 사용하는 환경에는 본 포스팅의 내용과 일치하지 않을 수 있습니다.
준비물
1. Goland 설치
2. WSL 설치
3. WSL에 Docker 설치
위의 환경이 준비되어있지 않다면 아래 포스팅을 참고.
Go 환경 변수 및 버전 관리하기 (GOROOT, GOPATH)
WSL Docker 서버 구축하기 (Docker Desktop 아님)
WSL과 Docker를 설치했다면 이미 개발의 절반이 끝난 것과 다름없다. (시작이 반이다.)
1. Project 생성 (main.go는 알잘딱)
2. 오른쪽 하단의 Terminal을 통해 go mod 생성 및 초기화
> go mod init main
go: creating new go.mod: module main
go: to add module requirements and sums:
go mod tidy
> go mod tidy
3. Dockerfile 생성 및 작성
잡학지식
아래의 Dockerfile 내용을 똑같이 따라 할 필요는 없다.
하지만 아래 Dockerfile 내용을 이해한다면 충분히 도움이 될 거라고 믿는다.
필자는 보통 Dockerfile에 두개 이상의 FROM을 사용하는 Multi-stage를 자주 활용한다.
(Multi-stage가 궁금한 사람은 구글링을 하면 바로 나온다.)
또한 go mod download를 앞에 두면 go mod download를 캐싱할 수 있어서 단순 코드만 수정되는 경우 빠르게 빌드가 가능하다.
Dockerfile에 대해 궁금하다면 아래 포스팅 내용 참고
Dockerfile의 구조와 문법 (hackerpark)
ARG GOVERSION=1.22
FROM golang:${GOVERSION}-alpine as builder
ADD go.mod /project/
WORKDIR /project
RUN go mod download
COPY . /project
RUN go build -o go_lab -buildvcs=false
FROM alpine:3.16
RUN apk --no-cache add libc6-compat gcompat tzdata && \
rm -rf /var/cache/apk/*
RUN cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
echo "Asia/Seoul" > /etc/timezone
RUN addgroup -S hackerpark && adduser -S hackerpark -G hackerpark
USER hackerpark
COPY --from=builder /project/go_lab /go_lab
ENTRYPOINT ["/go_lab"]
4. 오른쪽 상단의 Add Configuration > Edit Configurations 선택
5. Docker > Dockerfile 선택
위의 내용은 다음과 같다.
Name | dockerifle을 사용하여 build를 진행할 설정의 이름 |
Server | Image를 생성할 Docker Server |
Dockerfile | build시 사용할 Dockerfile 파일 |
Image tag | Dockerfile을 사용하여 만들 Image:Tag 설정 |
Container name | Dockerfile을 사용하여 만들어진 Image를 실행할 Container 이름 (설정안하면 랜덤으로 생성되며 Modify options > Run built image 를 해제하면 Container는 실행하지 않고 image만 생성된다.) |
6. WSL Docker Server와 연동 (위의 Server 오른쪽 ... 을 선택한 후 WSL에 생성한 Docker 서버와 연동하면 된다.)
Connection successful이 나오는지 확인 후 OK를 누른다.
7. Build 및 Container 실행
설정 완료 후 오른쪽에 활성화된 RUN 버튼을 누르면 아래와 같이 Image가 만들어지고 Container가 실행된다.
+ 추가
build Configurations의 오른쪽 상단 Store as project file을 체크하면 아래와 같이 나오는데 이를 git에 저장하여 다른 개발자 또는 환경에서 사용할 수 있다.
Happy Develop
반응형
'Go언어' 카테고리의 다른 글
[Golang] go binary 실행시 /lib64/libc.so.6: version `GLIBC_2.XX' not found 에러 해결 방법 (1) | 2024.05.30 |
---|---|
[Go언어] 알파인리눅스(Alpine Linux)에서 Go 1.20이상 실행하기 (__res_search: symbol not found, libresolv.so.2) (0) | 2023.10.23 |
[Go언어] 구조체 패딩 & 패킹 (Golang struct padding & packing) (0) | 2022.11.16 |
[GO언어] Go 환경 변수 및 버전 관리하기 (GOROOT, GOPATH) (1) | 2022.10.04 |
[Golang] Go 언어 module (mod) 설정 (1) | 2022.09.29 |