Platform/Docker

(도커실습3) 간단한 애플리케이션 및 도커 이미지 만들어보기

무링요짱짱맨 2022. 3. 7. 22:44
반응형

이 실습은 '도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문(위키북스)' 를 공부하면서 작성한 글입니다

 

main.go 라는 파일에 다음 코드를 작성

package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		log.Println("received request")
		fmt.Fprintf(w, "Hello Docker!!")
	})

	log.Println("start server")
	server := &http.Server{Addr: ":8080"}
	if err := server.ListenAndServe(); 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로 이미지 빌드 시, FROM 에 지정된 이미지를 다운받음.

기본적으로 해당 이미지는 도커 허브(Docker Hub)라는 곳에 공개 되어잇음.

main.go를 실행하기 위해서는 Go언어의 런타임이 설치된 이미지가 필요하고 우리는 golang 1.9 태그(버전)을 사용할거임

 

[RUN]

 도커 이미지를 생성할때 컨테이너 안에서 실행할 명령어를 정의함.

여기서는 컨테이너 안에서 echo라는 디렉토리를 만들었음

 

[COPY]

 도커가 동작 중인 호스트 머신의 파일이나 디렉터리를 컨테이너 안으로 복사하는 명령어임

여기서는 main.go를 ehco디렉토리를 옮겼음

 

[CMD]

도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다. 즉 RUN은 이미지를 빌드할때 실행(애플리케이션 업데이트 및 적재)되고, CMD는 컨테이너를 시작할때 실행(애플리케이션 자체 실행)된다. 

 

go run /echo/main.go

랑 같은 의미임.

 

이다음에 할 것은 도커 이미지를 빌드하는 것 

 

명령어는 아래와 같다

docker  image build -t 이미지명[:태그명] Dockerfile의_경로

 

docker image build -t test3/echo:latest .

해석하면 이미지명 test3/echo (test3은 네임스페이스로서 생략가능)이며 태그명은 latest 경로는 현재경로( .) 지정하여 실행함

 

열심히 빌드되고 있음!

 

완료 후 docker image ls 로 확인해보자

빌드 완료 후 확인

 

반응형