🏃🏻 들어가며
이번 글에서는 이전 글의 연장선으로 air 를 사용하여 docker container 와 로컬 레포를 연동하여 사용하는 방법에 대해서 알아보겠습니다.
일반적으로는
1. Dockerfile 작성 /
2. docker container stop ( 구동중인 docker container 정지 ) /
3. docker build ( 새로운 docker 이미지 빌드 ) /
4. docker container start ( 새로운 이미지 기반의 docker container 실행 )
등의 과정을 거치게 됩니다.
코드의 변경 과정이 생긴다면 2 ~ 4 과정을 반복해야하는 불편함이 있습니다.
하지만, docker 이미지 빌드 과정에서 docker container 와 로컬 레포를 연동하고, 코드의 변경 사항이 발생 할 때마다 air 가 docker container 내부에서 동작 중인 go 서버를 재시작 함으로써 이러한 불편함을 해결 할 수 있습니다.
정리하자면, 최종적으로는 2가지 효용성을 얻을 수 있습니다.
첫번째로는 air 를 사용하여 코드 변경에 따른 서버 재시작 기능 입니다.
두번째로는 추가적인 docker conatiner 빌드 과정 없이 사용 할 수 있다는점 입니다.
✅ local 환경에서의 air 설치 및 구성
1) Dockerfile 작성하기
전체적인 내용은 go 기반의 프로젝트를 이미지로 빌드하는 일반적인 방법 이지만, 2가지 부분이 변경 됩니다.
첫번째로 docker container 에 air 를 설치 합니다.
RUN go install github.com/air-verse/air@latest
두번째로 docker container 실행시의 명령어를 go run 을 대신해 air 명령어로 변경 합니다.
CMD ["air", "-c", ".air.toml"]
# 빌드 스테이지
FROM golang:1.23-alpine AS builder
WORKDIR /app
# air live-reload 설치
RUN go install github.com/air-verse/air@latest
# 의존성 파일 복사 및 다운로드
COPY go.mod ./
RUN go mod download
# 소스 코드 복사
COPY . .
# 접근 가능 포트 설정
EXPOSE 8080
# air live-reload 실행
CMD ["air", "-c", ".air.toml"]
2) Docker 명령어 수정
-p 8080:8080 | docker container 포트를 맵핑 합니다. 로컬의 8080 / docker 컨테이너의 8080
--rm | docker container 가 종료되면 자동으로 삭제 합니다.
- v $(pwd):/app | 현재의 로컬 레포를 docker container 의 /app 폴더에 연결 합니다.
go-docker-container | 실행할 docker container 이름. ( 빌드시에 별도로 작성해줘야 합니다.
docker run -p 8080:8080 --rm -v $(pwd):/app go-docker-container
📍마무리하며
이번 글을 통해서 반복적인 docker 와의 중지 / 삭제 / 빌드 / 실행의 무한 루프에서 벗어나시는데 도움이 되었으면 좋겠습니다 :)
댓글