Infra/Docker

컨테이너로 애플리케이션 실행하기

뽀루피 2024. 12. 6. 23:42

컨테이너로 애플리케이션 실행하기

  • image 받아오기
docker image pull 이미지명[:태그명] // ex) docker image pull gihyodocker/echo:latest
  • 컨테이너 실행컨테이너 실행을 하려면 docker에 이미지가 존재해야한다.
    예시는 -p [호스트포트:컨테이너포트]를 통해 포트포워딩을 수행한다.
docker container run [옵션] 이미지명 [:태그명] 
// ex) docker container run -t -p 9000:8080 gihyodocker/echo:latest

 

-d 옵션을 붙여 백그라운드로 컨테이너를 실행할 수도 있다.

  • 네트워크 주소 접근
curl http://localhost:9000/
  • 컨테이너 정지
docker stop 컨테이너명
  • 컨테이너 삭제컨테이너를 삭제하려면 컨테이너가 정지되어 있어야 한다.
docker rm 컨테이너명 
// docker rm -force 컨테이너명 을 통해 컨테이너가 실행 중에도 강제로 삭제할 수 있다

 

다음은 간단한 애플리케이션을 도커 컨테이너에서 실행해보고 도커 이미지를 생성해보는 실습이다.
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("Server started")
    server:= &http.Server{
        Addr: ":8080",
    }

    if err:= server.ListenAndServe(); err != nil {
        log.Println(err)
    }
}

이 애플리케이션은 다음과 같은 기능을 갖는다

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

다음은 main.go파일을 포함하는 새로운 도커 이미지를 만들 것이다.
이를 위해 main.go 파일과 같은 디렉토리에 Dockerfile 파일을 만들고 다음과 같이 작성한다.

FROM golang:1.9

RUN mkdir /echo
COPY main.go /echo

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

 

FROM

FROM 은 도커 이미지의 바탕이 될 베이스 이미지를 지정한다. 해당 인스트럭션에 지정된 이미지를 내려받는다.
FROM 에서 받아오는 도커 이미지는 도커 허브라는 레지스트리에 공개된 것이다.
main.go를 실행하려면 Go 언어의 실행환경이 갖춰져야 한다. 이를 위해 golang 이미지를 사용하자.
:1.9라고 된 부분은 태그이다. 각 이미지의 버전 등을 구별하는 식별자이다.

 

RUN

RUN 은 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의하는 인스트럭션이다.
여기서는 mkdir을 통해 /echo 디렉터리를 만들었다.

 

COPY

COPY 는 도커가 동작 중인 호스트 머신의 파일이나 디렉터리를 도커 컨테이너 안으로 복사하는 인스트럭션이다.
이 예제에서는 호스트에서 작성한 main.go 파일을 도커 컨테이너안에서 실행할 수 있도록 컨테이너 안으로 복사하는데 이 인스트럭션을 사용했다.

 

CMD

CMD 는 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다. RUN 은 이미지를 빌드할 때 실행되고 CMD 는 컨테이너를 시작할 때 한 번 실행된다.
shell 스크립트로 치면 다음과 같은 실행 명령을 하는 것이다.

// CMD ["go", "run", "/echo/main.go"]
go run /echo/main.go
  • 도커 이미지 빌드하기빌드를 실행하면 베이스 이미지를 내려받고 RUN이나 COPY 등의 인스트럭션에 지정된 명령이 단계적으로 실행
docker buildx build -t 이미지명[:태그명] Dockerfile경로 
// ex) docker buildx build -t example/echo:latest .
  • 실행 중인 도커 컨테이너 목록 확인
    docker container ls

 

** 이 글은 도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 책을 공부한 내용을 담고 있습니다.

'Infra > Docker' 카테고리의 다른 글

도커 컨테이너 다루기  (0) 2024.12.07
도커 이미지 다루기  (0) 2024.12.07