최대 1 분 소요

개념

  • 사이트
  • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
  • 컨테이너를 통해 호스트 환경과 격리된 환경에서 애플리케이션을 독립적으로 실행 가능
  • 컨테이너
    • 호스트 시스템과 격리된 시스템의 샌드박스 프로세스
    • 리눅스의 kernel namespaces와 cgroups을 이용하여 격리
    • 컨테이너 이미지가 실행되는 인스턴스


설치


예제

  • 코드
    package main

    import (
        "fmt"
        "net/http"
    )

    func main() {
        http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
            w.Write([]byte("test\r\n"))
        })

        fmt.Println(http.ListenAndServe(":1000", nil))
    }
  • Dockerfile 작성
    FROM golang:latest
    WORKDIR /root
    ADD ./ .
    RUN go mod download
    RUN CGO_ENABLED=0 GOOS=linux go build -o test main.go

    FROM scratch
    ENV PATH $PATH:/
    COPY --from=0 /root/test .
    ENTRYPOINT ["test"]
  • 이미지 생성
    • docker build --tag test:0.0.0 .
  • 이미지 생성 확인
    $ docker images -a
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    test         1.0.0     74ca3e25f633   3 seconds ago   6.62MB
  • 컨테이너 생성
    • docker run --name test -d -p 50000:1000 test:1.0.0
    • -d
      • 백그라운드 실행
    • -p
      • 호스트 포트:컨테이너 포트
  • 테스트
    $ curl 127.0.0.1:50000/test
    test
  • 컨테이너 삭제
    • docker rm -f test
    • -f
      • 강제 삭제
  • 이미지 삭제
    • docker rmi test:1.0.0
  • 원격 레지스트리에 이미지 푸시
    • 원격 태그 생성
      • docker tag test:1.0.0 xxx.xxx.xxx.xxx:xxx/test:1.0.0
    • 푸시
      • docker push xxx.xxx.xxx.xxx:xxx/test:1.0.0