5일차_Go 어플리케이션 빌드

최지웅·2024년 9월 19일
0

인프라

목록 보기
8/19

4-4. 애플리케이션 빌드 실전 예제: Go 소스 코드

FROM diamol/golang AS builder

COPY main.go .
RUN go build -o /server # 의존모듈 설치 없이 바로 빌드

#app
FROM diamol/base

ENV IMAGE_API_URL="http://iotd/image" \
	ACCESS_API_URL="http://accesslog/access-log" # 환경병수 설정
CMD ["/web/server"]

WORKDIR web
COPY index.html .
COPY --from=builder /server .
RUN chmod +x server

빌드코드

cd ch04/exercises/image-gallery
docker image build -t image-gallery .
  • Go는 네이티브 바이너리로 컴파일되는 크로스 플랫폼 언어로 어떤 플랫폼이든 동작하는 바이너리를 컴파일 할 수 있어 별도의 런타임이 필요없기 때문에 도커 이미지가 매우 매우 작아진다. 도커 역시 Go로 구현되었다.
  • 아래의 명령으로 다른 언어의 이미지 크기를 비교해보면, Go 빌드 도구를 포함하면 800MB이지만 실제 앱의 크기는 25MB이다. 여기서 중요한 것은 최종적으로 앱 이미지에 모든것이 들어가지 않아 실행시에 별도의 빌드 도구가 필요없다는 것이다. 또 보안적으로 공격이 가능한 부분 자체를 줄인다는 장점이 있다.
docker image ls -f reference=diamol/golang -f reference=image-gallery
  • 아래의 코드를 마지막으로 실행시키면 현재까지 3개의 컨테이너에 걸친 분산 어플리케이션이 빌드도구 없이 실행된다. Go 웹어플리케이션이 자바 API를 호출하고 Node.js로 구현된 API에 로그를 남긴다.
docker container run -d -p 802:80 --network nat image-gallery
  • docker image build자체가 파이프라인 정의 역활을 하기에 추가로 파이프라인 정의 없이 애저 데브옵스, 젠킨스 등을 사용할 수 있다.

[5장. 도커 허브 등 레지스트리에 이미지 공유하기]
5-1. 레지스트리, 리포지터리, 이미지 태그 다루기

  • 이미지 다운 시 도커 레지스트리로 불리는 서버에 저장되며 기본으로 도커 허브를 사용한다.
  • 이미지의 전체 이름은 docker.io/diamol/golang/latest 로 레지스트리 도메인(기본값은 도커허브), 작성자 계정 이름, 앱 이름, 이미지 태그로 구성된다.
  • 직접 패키징을 하려면 태그를 부여하여 버전을 구별할 수 있게해야한다.
  • 레지스트리에 이미지를 푸시하려면 명시적으로 태그를 부여해야하며, 같은 그룹 구성원(작성자 계정 이름)이어야한다.

5-2. 도커 허브에 직접 빌드한 이미지 푸시하기

profile
이제 3학년..

0개의 댓글