본문 바로가기
컨테이너/도커

02 Hello Docker

by ^..^v 2019. 5. 18.
728x90
반응형

HTTP 요청에 대해 응답하는 도커 이미지를 생성해 보겠습니다.

STEP1. 작업 디렉터리 생성 및 main.go 파일 작성

main.go 파일은 Golang 언어로 작성되었으며, 8080 포트로 HTTP 요청을 대기하다가 /로 요청이 들어오면 Hello Docker!!! 내용을 응답합니다.

 

root@server:~# mkdir docker
root@server:~# cd docker
root@server:~/docker# ls
root@server:~/docker# gedit 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) 
    } 
}

 

STEP2. 우분투 가상머신에서 main.go 테스트

우분투 호스트 머신에서 main.go 실행 여부를 확인하기 위해 golang-go 패키지를 설치하고 main.go 파일을 실행합니다.

root@server:~/docker# apt install golang-go
root@server:~/docker# go run main.go
2019/05/16 16:19:25 start server

 

(앞에 터미널에 main.go가 실행되고 있는 상태에서) 다른 터미널로 접속해서 아래 명령을 수행했을 때, Hello Docker!! 메시지가 출력되면 정상입니다.

root@server:~# curl http://localhost:8080
Hello Docker!!root@server:~#

 

STEP3. Dockerfile 작성

root@server:~/docker# gedit Dockerfile
FROM golang:1.9

RUN mkdir /echo

COPY main.go /echo

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

 

STEP4. 도커 이미지 빌드

docker image build -t 이미지명[:태그명] Dockerfile_path

-t : 이미지의 이름을 지정

-f : build를 할 때 기본적으로 Dockerfile을 이용하는데, 해당 파일이 아닌 다른 파일을 이용할 경우 "-f 파일명" 옵션을 설정

--pull=true : 매번 베이스 이미지를 강제로 내려받아서 사용

 

현재 디렉터리(/root/docker/)에 Dockerfile이 존재하므로 Dockerfile_path 부분에 현재 디렉터리를 나타내는 "."을 입력합니다.

root@server:~/docker# docker image build -t example/echo:latest .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM golang:1.9
1.9: Pulling from library/golang
55cbf04beb70: Pull complete
       :
186b06a99029: Pull complete
Digest: sha256:8b5968585131604a92af02f5690713efadf029cc8dad53f79280b87a80eb1354
Status: Downloaded newer image for golang:1.9
---> ef89ef5c42a9
Step 2/4 : RUN mkdir /echo  
---> Running in d4ed8c0274d4
---> b222ab609fef
Removing intermediate container d4ed8c0274d4
Step 3/4 : COPY main.go /echo
---> 2717792f856a
Removing intermediate container 81dd6a70ca10
Step 4/4 : CMD go run /echo/main.go
---> Running in 3d4999e8c7eb
---> 0b8f21dd9f05
Removing intermediate container 3d4999e8c7eb
Successfully built 0b8f21dd9f05
Successfully tagged example/echo:latest

 

docker image ls 명령으로 생성된 이미지를 확인합니다.

root@server:~/docker# docker image ls 
REPOSITORY       TAG        IMAGE ID         CREATED           SIZE
example/echo     latest     0b8f21dd9f05      3 minutes ago    750MB
nginx            latest     53f3fd8007f7      8 days ago       109MB
golang           1.9        ef89ef5c42a9     10 months ago     750MB

 

STEP5. main.go 내용 수정 후 다시 빌드

동일한 이미지가 생성되면 이전 이미지는 <none>로 이름이 바뀝니다.

root@server:~/docker# docker image ls
REPOSITORY       TAG        IMAGE ID         CREATED SIZE
example/echo     latest     79407db32a2a      2 seconds ago    750MB
<none>           <none>     cefd0db84707      8 minutes ago    750MB
nginx            latest     53f3fd8007f7      8 days ago       109MB
golang           1.9        ef89ef5c42a9     10 months ago     750MB
728x90
반응형

댓글