Dockerfile 테스트 코드 도입하기 (작성 중)

이민석's avatar
Oct 09, 2024
Dockerfile 테스트 코드 도입하기 (작성 중)

개요

많은 개발자와 DevOps 엔지니어는 Docker를 사용하고 있습니다.
그 중에서도 간단한 앱 배포는 Dockerfile, Docker Compose를 사용하곤 합니다.
이 때, Dockerfile 등을 테스트하여 사이드 이펙트 제어가 가능할까요?

저는 Dockerfile 테스트를 위하여 Gruntwork.io의 Terratest를 선택하였습니다.

Installation

Terratest는 Golang으로 만들어진 라이브러리 입니다.
따라서 적절한 Golang만 설치가 되어 있다면 편하게 Terratest 도입이 가능합니다.
MacOS를 사용하기 때문에 다음과 같이 Golang을 설치했습니다. - [Ref]

brew install go

이후 다음과 같이 Golang 프로젝트 셋업이 필요합니다.

go mod init "<MODULE_NAME>"
go mod tidy

이후 테스트 코드를 쓰고 다음과 같이 실행이 가능합니다.

go test -v timeout 30m <File Name>
go test -v timeout 30m ./...

샘플 예제

Terratest에서 제공해주는 Dockerfile이 있습니다. - [Ref]

FROM ubuntu:18.04

RUN echo 'Hello, World!' > /test.txt

해당 Dockerfile에 대해서 테스트 코드를 작성할 수 있습니다.
아래에는 성공 케이스만 적었지만 실패 케이스에 대해서도 이곳 에서 볼 수 있습니다.

// ... module imports

func TestSuccessExample(t *testing.T) {
	tag := "gruntwork/docker-hello-world-example"
	buildOptions := &docker.BuildOptions{
		Tags: []string{tag},
	}
	docker.Build(t, "./", buildOptions)

	opts := &docker.RunOptions{Command: []string{"cat", "/test.txt"}}
	output := docker.Run(t, tag, opts)
	assert.Equal(t, "Hello, World!", output)
}

웹 서버 예제

실제로 8080포트에서 가동되는 웹 서버를 테스트는 어떻게 진행할 수 있을까요?
간단한 express.js 어플리케이션을 만든 테스트 케이스를 이곳 에서 볼 수 있습니다.

Share article

Unchaptered