ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 쿠버네티스 환경 구축하자 - Dockerfile 만들기
    infra 2020. 8. 1. 17:04

    3. Dockerfile 만들기

    이전 장에서 이미 만들어진 도커이미지를 다운받아서 실행시켜보았다. 앞으로에 시리즈에서는 실제 이미지를 만들고 직접 도커허브에 이미지를 업로드하고, 컨테이너를 실행하는 실습을 할 것이다. 이장에서는 실제 실행할수있는 웹어플리케이션 서버를 만들어 도커 이미지로 만들것이다. Docker image를 만들기위해서는 Dockfile을 만들어야한다. Dockfile의 역할은 Docker Image를 만들기 위한 설정파일이라고 생각하면된다.

    먼저 go 를 이용해서 사용자 요청을 받을 수 있는 echo 웹어플리케이션 서버를 만들것이다. 아래서버는 8080포트를 통해 요청이 들어온경우 Hello Docker!! 고 응답해주는 간단한 웹서버이다.

    package main
    
    import (
        "fmt"
        "log"
        "net/http"
    _
    
    fun main(){
        http.handleFunc("/", fun(w http.ResponseWiter, r*http.Request) {
            log.Println("receivedd request")
            fmt.Fprintf(w, "Hello Docker!!")
        })
    
        log.Println("start server")
        server: = & http.Server {
            Addr: ":8080"
        }
        if err: = server.ListnerAndServe(); err != nil {
            log.Println(err)
        }
    }

    위코드는 다음같은 기능을 가진다.

    • 모든 HTTP 요처에 대해 "Hello Docker!!" 라는 응답을 보낸다.
    • 포트 8080로 요처을 받는 서버 애플리케이션으로 동작한다.
    • 클라이언트로부터 요청을 받ㅇ으면 received request라는 메시지를 표준으로 출력한다.

    그다음 Dockerfile을 만들어 실행시켜 볼것이다.

    FROM golang:1.9
    
    RUN mkdir /echo
    COPY main.go /echo
    
    CMD ["go", "run", "/echo/main.go"]

    위에 정의된 명령을 상세히 알아보자.

    FROM 인스트럭션

    FROM 인스터럭션은 도커이미지의 바탕이될 베이스 이미지를 의미한다. Dockerfile은 도커허브 레지스트리에 등록되어있는 golang 이미지를 받아와 베이스 이미지로 사용하게 된다. 이 이미지를 바탕으로 main.go를 실행한다. golang뒤에 선언되 버전부분을 tag라한다. 이 태그를 이용해 이미지 버전을 지정할 수 있다.

    RUN 인스트럭션

    RUN 인스트럭션은 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의하는 인스트럭션이다. 인자로 도커 컨테이너에서 실행할 명령어를 입력한다. 위에서는 main.go 애플리케이션을 배치하기 위한 /echo 디렉터리를 mkddir 명령으로 만들었다.

    COPY 인스트럭션

    COPY 인스크럭션은 도커가 동작중인 호스트 머신의 파일이나 디렉터리를 도커 컨테이너안으로 복사하는 인스트럭션이다.

    이예제에서는 호스트에서 작성한 main.go 파일을 도커 컨테이너 안에서 실행할 수 있도록 컨테이너 안으로 복사하는데 이 인스트럭션을 사용했다. 복사위치는 앞에서 만든 echo 디렉터리이다.

    CMD 인스트럭션

    CMD 인스트럭션은 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다. RUN 인스트럭션은 이미지를 빌드할 때 실행되고, CMD 인스트럭션은 컨테이너를 시작할 때 한번 실행된다. CMD 명령은 애플리케이션 자체를 실행하는 명령이라고 생각하면 된다.

    go run /echo/main.go

    이명령을 CMD 인스트럭션에 기술하면 다음과 같이 명령을 공백으로 나눈 배열로 나타낸다.

    CMD ["go", "run", "/echo/main.go"]

    댓글

Designed by Tistory.