Updated:

less than 1 minute read

개념

  • 사이트
  • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
  • 컨테이너를 통해 호스트 환경과 격리된 환경에서 애플리케이션을 독립적으로 실행 가능
  • 컨테이너
    • 호스트 시스템과 격리된 시스템의 샌드박스 프로세스
    • 리눅스의 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