공부하는 책
완벽한 IT 인프라 구축을 위한 Docker (2판)
복습을 위해 요약한 것.
목표
docker 책 5장 내용 숙지
- Docker 인프라의 구성 관리를 Dockerfile에 기술한다.
- Dockerfile을 사용한 서버 구축 및 구성 관리의 방법 학습
5.3 멀티스테이지 빌드를 사용한 애플리케이션 개발
책에서 제공한 샘플코드
% git clone https://github.com/asashiho/dockertext2
% cd dockertext2/chap05/multi-stage
5.3.1 Dockerfile 만들기
# 개발 환경용 Docker 이미지
# 1. Build Image
# golang의 1.13 버전을 베이스 이미지로 작성하고 builder라는 별명을 붙인다.
FROM golang:1.13 AS builder
# Install dependencies
# 로컬에 있는 소스코드를 컨테이너 안으로 복사, 작업대상 디렉토리로 설정
WORKDIR /go/src/github.com/asashiho/dockertext-greet
RUN go get -d -v github.com/urfave/cli
# Build modules
# greet라는 이름의 실행 가능 바이너리 파일을 작성
COPY main.go .
RUN GOOS=linux go build -a -o greet .
# ------------------------------
# 제품 환경용 Docker 이미지
# 2. Production Image
# busybox를 베이스 이미지로 사용
# (busybox는 기본적인 linux 명령어들을 하나의 파일로 모아놓은 것, 최소한의 linux shell 환경 제공하는 경우 이용)
FROM busybox
WORKDIR /opt/greet/bin
# Deploy modules
# 개발환경에서 이미지로 빌드한 greet라는 실행 가능 바이너리 파일을 제품 환경용 Docker에 복사
COPY --from=builder /go/src/github.com/asashiho/dockertext-greet/ .
# 복사한 실행 가능 바이너리 파일을 실행하는 명령을 적음
ENTRYPOINT ["./greet"]
-
명령어
WORKDIR: https://docs.docker.com/engine/reference/builder/#workdir
ENTRYPOINT: https://docs.docker.com/engine/reference/builder/#entrypoint -
RUN, CMD, ENTRYPOINT
-
궁금
github에서 가져온 소스는 어디로 갔을까. (in mac) ~/Library/Containers/com.docker.docker/Data
5.3.2 Docker 이미지의 빌드
빌드해보자
% docker build -t great .
# 1. 개발 환경
# [builder 1/5] FROM docker.io/library/golang:1.13@sha256:8ebb6d5a48deef738381b56b1d4cd33d99a5d608e0d03c5fe8dfa3f68d41a1f8
# [builder 2/5] WORKDIR /go/src/github.com/asashiho/dockertext-greet
# [builder 3/5] RUN go get -d -v github.com/urfave/cli
# [builder 4/5] COPY main.go .
# [builder 5/5] RUN GOOS=linux go build -a -o greet .
# 2. 제품 환경
# [stage-1 1/3] FROM docker.io/library/busybox@sha256:c6b45a95f932202dbb27c31333c4789f45184a744060f6e569cc9d2bf1b9ad6f
# [stage-1 2/3] WORKDIR /opt/greet/bin
# [stage-1 3/3] COPY --from=builder /go/src/github.com/asashiho/dockertext-greet/ .
5.3.3 docker container 시작
% docker container run -i --rm great asa
Hello asa
% docker container run -i --rm great --lang=es testText
Hola testText