6 분 소요

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

댓글남기기