2.packer로 이미지 생성하기
Packer로 이미지 생성하기
- 이번에는 Packer로 실제 이미지를 만들어보고, Dockerfile 방식과 어떤 차이가 있는지도 같이 살펴보겠습니다.
- Packer의 장점은 이미지 생성 과정에 패키지 설치나 설정 반영 같은 작업을 함께 넣을 수 있다는 점입니다.
즉, 단순히 이미지만 만드는 것이 아니라, 원하는 상태를 코드로 정의해서 반복 생성할 수 있습니다.
이미지 생성 예제
-
아래는 Docker 이미지를 생성하는 간단한 Packer 예시입니다.
packer { required_plugins { docker = { version = ">= 1.0.0" source = "github.com/hashicorp/docker" } } } source "docker" "nginx" { image = "ubuntu:22.04" commit = true } build { sources = ["source.docker.nginx"] provisioner "shell" { inline = [ "apt-get update", "apt-get install -y nginx", "echo 'hello packer' > /var/www/html/index.html" ] } } -
실행하기
$ packer init . $ packer build .- 빌드가 끝나면 nginx가 포함된 새로운 Docker 이미지가 생성됩니다.
Dockerfile과 비교
- Dockerfile 방식은 이미지 생성 자체에 집중합니다.
- Packer는 이미지 생성 과정에 provisioning 단계를 붙여서 좀 더 자동화된 흐름으로 만들 수 있습니다.
| 항목 | Dockerfile | Packer |
|---|---|---|
| 주 목적 | 컨테이너 이미지 빌드 | 이미지 생성 자동화 |
| 주 사용 대상 | 애플리케이션 컨테이너 이미지 | VM 이미지, AMI, Docker 이미지 등 |
| 빌드 방식 | 레이어 기반 빌드 | builder + provisioner 기반 |
| 설정 방식 | Dockerfile 한 파일 중심 | HCL 또는 JSON 템플릿 중심 |
| 장점 | 단순하고 익숙함, 빌드 속도가 빠름 | 여러 플랫폼에 동일한 방식 적용 가능, 이미지 생성 과정 자동화에 강함 |
| 확장성 | 컨테이너 중심 | 컨테이너 + VM + 클라우드 이미지까지 폭넓음 |
| 프로비저닝 | RUN 명령으로 구성 | shell, Ansible 등 다양한 프로비저너 사용 가능 |
| 결과물 | Docker image | Docker image, AMI, VM image 등 |
| 재현성 | Dockerfile로 비교적 높음 | 템플릿 기반으로 높음 |
| 대표 활용 | 서비스 컨테이너 빌드 | 골든 이미지, 표준화된 VM/AMI 생성 |
이미지 push
- 이미지가 만들어졌으면 레지스트리에 등록할 수 있습니다.
-
Docker 저장소를 사용하는 예시는 아래처럼 구성할 수 있습니다.
source "docker" "nginx" { image = "ubuntu:22.04" commit = true changes = [ "EXPOSE 80" ] } build { sources = ["source.docker.nginx"] provisioner "shell" { inline = [ "apt-get update", "apt-get install -y nginx", "echo 'hello packer' > /var/www/html/index.html" ] } post-processors { post-processor "docker-tag" { repository = "localhost:5000/my-nginx" tags = ["v1"] } } } -
이미지를 푸시하는 흐름은 보통 다음과 같습니다.
- Packer로 이미지 생성.
- 태그 지정.
- 레지스트리에 push.
- 다른 서버에서 pull 후 실행.
$ docker push localhost:5000/my-nginx:v1
실행하기
- 생성된 이미지는 일반 Docker 이미지처럼 실행할 수 있습니다.
$ docker run -d --name my-nginx -p 8080:80 localhost:5000/my-nginx:v1- 정상 실행 후 웹브라우저에서 확인하면 Packer로 만든 이미지가 동작하는 것을 볼 수 있습니다.
마무리 하며...
- Packer는 이미지 생성 자동화 도구입니다.
- Dockerfile보다 넓은 범위의 이미지 제작에 적합합니다.
- provisioning과 post-processing을 함께 넣을 수 있어 반복 작업에 강합니다.
- 이미지 빌드 후 레지스트리 등록과 실행까지 한 흐름으로 가져갈 수 있습니다.
![]() |
|---|
| perplexity에서 생성한 AI이미지 |
작성일: 2026년 7월 23일
,
마지막 업데이트: 2026년 7월 23일
