Docker 컨테이너란?
- BORA(build once, run anyway)
- 한번 빌드한 이미지는 어느 환경에서나 동일한 동작을 보장한다.
- 운영체제를 호스트 OS와 공유하여 가상머신보다 가볍고, 시작과 중지가 빠르다.
도커 컨테이너 설계
- 주의할 점 4가지
- 1 컨테이너당 1 프로세스
- 변경 불가능한 인프라(Immutable Infrastructure) 이미지로 생성한다.
- 경량의 도커 이미지로 생성한다.
- 실행 계정은 root 이외의 사용자로 한다.
- 프로세스를 기동하는 실행 계정 권한을 최소화, root 사용자를 사용하면 보안 사고로 이어질수 있음.
도커 파일 작성법
# dockerfile.sample
# Alpine 3.11 버전 golang 1.14.1 이미지를 기반 이미지로 사용
FROM golang:1.14.1-alpine3.11
# 빌드할 머신에 있는 main.go 파일을 컨테이너에 복사
COPY ./main.go ./
# 빌드 시 컨테이너 내부에서 명령어 실행
RUN go build -o ./go-app ./main.go
# 실행 계정을 nobody로 지정
USER nobody
# 컨테이너가 기동할 때 실행할 명령어 정의
ENTRYPOINT ["./go-app"]
# . 빼먹지 않기,,,
docker image build -t sample -f dockerfile.sample .
도커 파일 작성법 - 멀티스테이지
# dockerfile.multi-stage
# Stage 1 컨테이너(애플리케이션 컴파일)
FROM golang:1.14.1-alpine3.11 as builder
COPY ./main.go ./
RUN go build -o ./go-app ./main.go
# Stage 2 컨테이너(컴파일한 바이너리를 포함한 실행용 컨테이너)
FROM alpine:3.11
# Stage 1에서 컴파일한 결과물 복사
COPY --from=builder /go-app .
ETRYPOINT ["./go-app"]
- 스테이지 빌드를 사용하면 컨테이너를 경량화할 수 있음.
docker image build -t sample:0.2 -f dockerfile.multi-stage .
컨테이너 기동
docker container run -d -p 12345:8080 sample:0.2
댓글남기기