-
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"]
'infra' 카테고리의 다른 글
6. 쿠버네티스 환경 구축하자 - 도커컨테이너 명령어 종류 (0) 2020.08.09 5. 쿠버네티스 환경 구축하자 - 도커 이미지 명령어 활용 (0) 2020.08.06 4. 쿠버네티스 환경 구축하자 - 도커 이미지 빌드하기 (0) 2020.08.06 2. 쿠버네티스 환경 구축하자 - 간단하게 도커 실행해보기 (0) 2020.08.01 1. 쿠버네티스 환경 구축하자 - 도커란 (0) 2020.07.22