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