Docker 컨테이너에 구축된 Go 프로그램 실행 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자가 애플리케이션을 구축, 패키징 및 배포하는 방식을 혁신했습니다. 이 튜토리얼에서는 Docker 컨테이너 내에서 Go 프로그램을 실행하는 방법을 배우며 일관되고 안정적인 실행 환경을 보장합니다.

Docker 소개

Docker 는 개발자가 애플리케이션과 모든 종속성을 단일의 휴대 가능한 컨테이너로 패키징할 수 있는 인기 있는 컨테이너화 플랫폼입니다. 이 컨테이너는 Docker 가 설치된 모든 시스템에서, 기본 운영 체제나 인프라에 관계없이 쉽게 배포 및 실행할 수 있습니다.

Docker 란 무엇인가요?

Docker 는 오픈소스 소프트웨어 플랫폼으로, 소프트웨어 컨테이너 내에서 애플리케이션의 배포, 확장 및 관리를 자동화합니다. 컨테이너는 코드, 런타임, 시스템 도구 및 라이브러리 등 애플리케이션 실행에 필요한 모든 것을 포함하는 경량의 독립 실행형 실행 가능 패키지입니다.

Docker 를 사용하는 이유는 무엇인가요?

Docker 는 개발자와 IT 전문가에게 다음과 같은 여러 가지 이점을 제공합니다.

  1. 일관성: Docker 컨테이너는 기본 인프라에 관계없이 애플리케이션이 동일한 방식으로 실행되도록 보장합니다.
  2. 이식성: Docker 컨테이너는 개발, 테스트 및 프로덕션과 같은 서로 다른 환경 간에 쉽게 이동할 수 있습니다.
  3. 확장성: Docker 는 작업 부하에 따라 애플리케이션을 쉽게 확장하거나 축소할 수 있도록 합니다.
  4. 효율성: Docker 컨테이너는 기존 가상 머신보다 경량이며 더 적은 리소스를 사용하여 실행 효율성을 높입니다.

Docker 시작하기

Docker 를 시작하려면 시스템에 Docker 엔진을 설치해야 합니다. 공식 Docker 웹사이트 (https://www.docker.com/get-started) 에서 Docker 를 다운로드하여 설치할 수 있습니다. Docker 를 설치한 후 Docker 컨테이너를 만들고 실행할 수 있습니다.

graph TD A[Docker 설치] --> B[Docker 이미지 생성] B --> C[Docker 컨테이너 실행] C --> D[애플리케이션 배포]

표 1: Docker CLI 명령어

명령어 설명
docker build Dockerfile 에서 Docker 이미지 생성
docker run Docker 컨테이너 실행
docker ps 실행 중인 Docker 컨테이너 목록
docker images Docker 이미지 목록
docker push 레지스트리에 Docker 이미지 업로드
docker pull 레지스트리에서 Docker 이미지 다운로드

이제 Docker 에 대한 기본적인 이해가 생겼으니, 이제 Docker 컨테이너에서 Go 애플리케이션을 구축하는 방법을 알아보겠습니다.

Docker 에서 Go 애플리케이션 구축

Go 애플리케이션 생성

먼저 간단한 Go 애플리케이션을 생성해 보겠습니다. main.go라는 새 파일을 만들고 다음 내용으로 채웁니다.

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, LabEx!")
    })

    fmt.Println("Starting server on :8080")
    http.ListenAndServe(":8080", nil)
}

이 Go 애플리케이션은 8080 번 포트에서 실행되며, 루트 URL(/) 에 요청이 있을 경우 "Hello, LabEx!"라는 메시지를 응답합니다.

Docker 이미지 생성

이 Go 애플리케이션을 Docker 컨테이너에서 실행하려면 Docker 이미지를 생성해야 합니다. Dockerfile이라는 새 파일을 만들고 다음 내용으로 채웁니다.

FROM golang:1.18-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]

이 Dockerfile 은 다음과 같이 동작합니다.

  1. 공식 golang:1.18-alpine 이미지를 기본 이미지로 사용합니다.
  2. 작업 디렉터리를 /app으로 설정합니다.
  3. Go 애플리케이션 코드를 컨테이너로 복사합니다.
  4. Go 애플리케이션을 빌드하고 main이라는 실행 파일을 생성합니다.
  5. 컨테이너가 시작될 때 main 실행 파일을 실행하도록 명령을 설정합니다.

Docker 이미지 빌드

Docker 이미지를 빌드하려면 Dockerfile이 있는 동일한 디렉터리에서 다음 명령어를 실행합니다.

docker build -t my-go-app .

이 명령어는 태그가 my-go-app인 Docker 이미지를 빌드합니다.

Docker 이미지 확인

시스템에서 사용 가능한 Docker 이미지 목록을 확인하려면 다음 명령어를 실행합니다.

docker images

my-go-app 이미지가 목록에 표시되어야 합니다.

이제 Go 애플리케이션에 대한 Docker 이미지가 준비되었으므로 Docker 컨테이너에서 실행해 보겠습니다.

Docker 에서 Go 애플리케이션 실행

Docker 컨테이너 실행

Docker 컨테이너에서 Go 애플리케이션을 실행하려면 다음 명령어를 사용합니다.

docker run -p 8080:8080 my-go-app

이 명령어는 다음과 같이 작동합니다.

  1. my-go-app Docker 이미지를 실행합니다.
  2. 컨테이너의 8080 번 포트를 호스트의 8080 번 포트로 매핑하여 로컬 머신에서 애플리케이션에 접근할 수 있도록 합니다.
graph TD A[Docker 호스트] --> B[Docker 컨테이너] B --> C[Go 애플리케이션] A --"HTTP 8080"--> B

실행 중인 컨테이너 확인

실행 중인 Docker 컨테이너 목록을 확인하려면 다음 명령어를 실행합니다.

docker ps

my-go-app 컨테이너가 목록에 표시되어야 합니다.

Go 애플리케이션 접근

Docker 컨테이너에서 실행 중인 Go 애플리케이션에 접근하려면 웹 브라우저를 열고 http://localhost:8080으로 이동합니다. "Hello, LabEx!" 메시지가 표시되어야 합니다.

Docker 컨테이너 중지

실행 중인 Docker 컨테이너를 중지하려면 다음 명령어를 사용합니다.

docker stop <컨테이너 ID>

<컨테이너 ID>docker ps 명령어를 실행하여 확인할 수 있습니다.

결론

이 튜토리얼에서는 다음을 배웠습니다.

  1. 간단한 Go 애플리케이션 생성
  2. Go 애플리케이션에 대한 Docker 이미지 빌드
  3. Docker 컨테이너에서 Go 애플리케이션 실행
  4. Docker 컨테이너에서 실행 중인 Go 애플리케이션 접근

Docker 를 사용하여 Go 애플리케이션을 컨테이너화하면 다양한 환경에서 일관되고 안정적인 배포를 보장하여 애플리케이션 개발, 테스트 및 배포를 더욱 쉽게 만들 수 있습니다.

요약

이 튜토리얼을 마치면, Docker 컨테이너 내에서 Go 애플리케이션을 구축하고 실행하는 방법에 대한 확실한 이해를 얻게 될 것입니다. 이를 통해 다양한 환경에서 소프트웨어를 배포하고 분배하는 것이 용이해집니다. Docker 의 컨테이너화 기술은 개발 및 배포 프로세스를 단순화하여 훌륭한 코드 작성에 집중할 수 있도록 지원합니다.