Docker/환경 구성

[Docker] Dockerfile을 이용한 Vault 배포 환경 구성 및 실행방법

adjh54 2024. 2. 3. 14:36
728x170
해당 글에서는 이전에 터미널로 작업을 하였던 Vault 구성을 Dockerfile로 간단히 구성하는 방법에 대해 알아봅니다.





 

💡 [참고] 이전에 터미널 명령어로 Docker Vault 부분에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
 

[Docker] Docker로 Vault 로컬 환경 구성 방법

해당 글에서는 Docker 환경에서 Vault를 로컬 환경에 구축하는 방법에 대해서 알아봅니다. 1) Vault 💡 Vault - HashCorp 사에서 만든 Vault는 다양한 환경에서 애플리케이션의 외부 비밀 속성(예: 데이터베

adjh54.tistory.com

 

 

 

💡 [참고] Docker에 대해 더 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
분류 설명 링크
이해하기 Docker 환경 설치 및 실행 방법 https://adjh54.tistory.com/350
이해하기 Docker 기초 이론(아키텍처, 흐름, 주요 용어) https://adjh54.tistory.com/352
이해하기 Docker 컨테이너 라이프 사이클 & CLI https://adjh54.tistory.com/359
이해하기 DockerFile 이론 + Nginx 환경 구성 및 배포 방법 https://adjh54.tistory.com/414
환경구성 DockerFile + Vault 환경 구성 및 배포 방법 https://adjh54.tistory.com/415
환경구성 DockerFile + React 환경 구성 및 배포 방법 https://adjh54.tistory.com/417
환경구성 DockerFile + Spring Boot 환경 구성 및 배포 방법 https://adjh54.tistory.com/420

 

 

 

1) Vault


💡 Vault

- HashCorp 사에서 만든 Vault는 다양한 환경에서 애플리케이션의 외부 비밀 속성(예: 데이터베이스 비밀번호, 비밀번호, API 키 등)을 외부화된 구성으로 중앙에서 관리할 수 있습니다.


- Spring Boot 환경에서 Vault로부터 시크릿 정보를 읽어오며 Vault에 시크릿 정보를 쓰는 것도 가능합니다. 이러한 방식으로 애플리케이션의 중요한 정보는 코드에서 분리되어 보안이 보장됩니다.
- 기밀정보의 동적인 제공, 중앙 집중식 시크릿 관리, 즉각적인 액세스 제어, 감사 추적 기능 등을 제공하여, 기업의 보안 정책을 준수하는 데 도움이 됩니다.

https://www.vaultproject.io/

 

2) Dockerfile


💡 도커 파일(Dockerfile)

- 도커 이미지를 만들고 빌드하기 위한 ‘텍스트 파일’을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다.

- 도커 파일을 사용하면 반복적이고 일관적인 컨테이너 이미지 빌드 프로세스를 자동화할 수 있습니다.

 

 

1. Dockerfile 수행과정


💡 Dockerfile 수행과정

1. Dockerfile

- 도커파일에서 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 또한 이미지를 지정하고 필요한 패키지를 설치하고 파일을 복사하여 명령을 실행하는 등의 작업을 수행합니다.


2. Dockerfile → (Build)

- 도커 엔진이 도커 파일을 한 줄씩 읽어서 이미지를 빌드합니다 : Dockerfile Layer


3. Docker Image → (Run) → Docker Container

- 빌드된 이미지를 실행하여 도커 컨테이너를 구성합니다.

 

 

 

2) Dockerfile + Vault 사용예시 : 구성하기


💡 Dockerfile + Vault 구성하기

- 해당 부분에서는 Dockerfile을 통해 Vault를 구성하고 Vault 관리자 페이지에 접근하는 것을 목표로 합니다.

 

 

1. 프로젝트 구조 구성


파일 및 디렉터리 설명
Dockerfile 해당 파일을 실행시켜 레이어를 구성하고 hashicorp/vault 이미지를 받아 재구성에 사용할 파일입니다.
config 설정 파일을 관리하는 디렉터리로 docker의 vault/logs와 마운팅 됩니다.
config/config.json hashicorp/vault를 실행하기 위한 환경설정이 구성된 파일입니다.
file vault의 백엔드 스토리지로 사용되는 디렉터리로 docker의 vault/logs와 마운팅 됩니다.
logs vault의 로그 스토리지로 사용되는 디렉터리로 docker의 vault/logs와 마운팅 됩니다.

 

 

[ 더 알아보기 ]

💡 Vault를 사용하는 것이 아닌 hashicorp/vault 이미지를 사용하는 이유는?


- 'vault'는 Docker Hub에서 공식적으로 제공되는 Vault 이미지이며, 'hashicorp/vault'는 HashiCorp가 관리하는 Vault 이미지입니다. 두 이미지 모두 Vault 애플리케이션을 실행하는 데 사용할 수 있습니다. 그러나 'hashicorp/vault'는 보통 최신 기능과 업데이트를 더 자주 제공하므로, 최신 Vault 기능을 사용하려면 'hashicorp/vault'를 사용하는 것이 좋습니다.


💡 Docker에서 디렉터리 마운팅은 무슨 말인가?

- 호스트 시스템의 특정 디렉토리를 Docker 컨테이너 내부의 디렉터리에 연결하는 것을 의미합니다. 이렇게 하면 컨테이너가 호스트의 파일 시스템에 접근할 수 있게 됩니다. 이를 통해 데이터를 영구적으로 저장하거나, 컨테이너 간에 데이터를 공유하거나, 컨테이너와 호스트 간에 데이터를 이동하는 등의 작업을 수행할 수 있습니다.

 

 

 

2. Dockerfile 구성


💡 Dockerfile 구성

- 해당 Dockerfile은 Vault 환경을 구성하기 위한 설정으로 구성되어 있습니다.
FROM hashicorp/vault

COPY ./config /vault/config

COPY ./file /vault/file

COPY ./logs /vault/logs

EXPOSE 8200

CMD ["vault", "server", "-config=/vault/config"]
Dockerfile 명령어 설명
FROM hashicorp/vault hashicorp/vault 이미지를 기반으로 새 Docker 이미지를 생성
COPY ./config /vault/config 현재 디렉토리의 config 폴더를 Docker 이미지의 /vault/config 위치에 복사
COPY ./file /vault/file 현재 디렉토리의 file 폴더를 Docker 이미지의 /vault/file 위치에 복사
COPY ./logs /vault/logs 현재 디렉토리의 logs 폴더를 Docker 이미지의 /vault/logs 위치에 복사
EXPOSE 8200 Docker 컨테이너의 8200번 포트를 열어 외부에서 접근 가능하게 함
CMD ["vault", "server", "-config=/vault/config" Docker 컨테이너가 실행될 때 vault server -config=/vault/config 명령어를 실행. 이 명령어는 Vault 서버를 시작하고, /vault/config 위치의 설정 파일을 사용하도록 지시

 

 

 

 

3. config.json


💡 config.json

- vault의 설정 파일을 구성합니다.
{
  "listener": {
    "tcp": {
      "address": "0.0.0.0:8200",
      "tls_disable": 1
    }
  },
  "backend": {
    "file": {
      "path": "../file"
    }
  },
  "default_lease_ttl": "876000h",
  "max_lease_ttl": "876000h",
  "ui": true,
  "log_level": "info"
}

Vault 설정 요소 설명
listener Vault 서버가 어떤 프로토콜과 주소로 통신을 받을지를 설정합니다. 여기서는 TCP 프로토콜을 사용하며, 모든 IP의 8200 포트에서 통신을 받습니다. TLS는 비활성화 상태입니다.
backend Vault의 데이터 저장 방식을 설정합니다. 여기서는 파일 시스템을 사용하며, 데이터는../file 경로에 저장됩니다.
default_lease_ttl과 max_lease_ttl Vault에서 관리하는 비밀키의 기본 및 최대 유효기간을 설정합니다. 여기서는 각각 876000시간으로 설정되어 있습니다.
ui Vault의 사용자 인터페이스를 활성화합니다.
log_level Vault의 로그 레벨을 설정합니다. 여기서는 정보 수준(info)의 로그를 출력합니다.

 

 

 

 

4. file, logs


💡 file, logs

- 해당 폴더는 구조만 생성하고 다른 파일을 구성하지는 않습니다. 추후 Dockerfile을 수행하며 생성되는 Dockerfile에 디렉터리 마운팅을 수행합니다.

 

 

3) Dockerfile + Vault 사용예시 : 실행하기


 

1. 컨테이너 이미지 생성


💡 컨테이너 이미지 생성

- dockefile을 통해 구성한 컨테이너 이미지를 생성합니다.
# format
$ docker build -t <컨테이너 이미지 이름> .

# 컨테이너 이미지 생성
$ docker build -t hashicorp/vault .

 

 

💡 [참고] Docker Desktop에서 생성된 컨테이너 이미지를 확인합니다.

 

 

 

2. 컨테이너 생성 및 실행


💡 컨테이너 생성 및 실행

 

# format
$ docker run -d --cap-add IPC_LOCK --name <컨테이너 이름> -p 8200:8200 <실행할 이미지 이름>

# 컨테이너 생성 및 실행
$ docker run -d --cap-add IPC_LOCK --name vault -p 8200:8200 hashicorp/vault
명령어 설명
docker run Docker 이미지를 기반으로 새로운 컨테이너를 만들고 실행합니다.
-d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력합니다.
-cap-add IPC_LOCK 컨테이너가 IPC_LOCK 권한을 가질 수 있도록 합니다. 이는 Vault가 메모리에서 중요 정보를 안전하게 보호하는 데 필요합니다.
-name vault 생성된 컨테이너의 이름을 'vault'로 지정합니다.
-p 8200:8200 호스트의 8200 포트와 컨테이너의 8200 포트를 연결합니다. 이렇게 하면 호스트 머신에서 8200 포트로 Vault에 접근할 수 있게 됩니다.
hashicorp/vault 실행할 Docker 이미지의 이름입니다.

 

 

 

💡 [참고] Docker Desktop에서 생성된 컨테이너 상태를 확인합니다.

 

 

 

 

💡 [참고] Docker 컨테이너 상태를 확인합니다
$ docker ps

 

 

3. Vault 관리자 페이지를 확인합니다.


💡 Vault 관리자 페이지를 확인합니다

- 구성한 http://localhost:8200으로 접근하여 구성이 잘됨을 확인합니다.

 

 

 

💡 Vault의 추후 수행방법은 아래의 페이지를 참고하시면 관리자 구성까지 완료하실 수 있습니다.
 

[Docker] Docker로 Vault 로컬 환경 구성 방법

해당 글에서는 Docker 환경에서 Vault를 로컬 환경에 구축하는 방법에 대해서 알아봅니다. 1) Vault 💡 Vault - HashCorp 사에서 만든 Vault는 다양한 환경에서 애플리케이션의 외부 비밀 속성(예: 데이터베

adjh54.tistory.com

 

 

💡 [참고] 해당 예시는 아래의 Github에서 확인이 가능합니다.
 

GitHub - adjh54ir/multiflex-docker: Docker 실습을 위한 패키지입니다.

Docker 실습을 위한 패키지입니다. Contribute to adjh54ir/multiflex-docker development by creating an account on GitHub.

github.com

 

 

 

 

 

오늘도 감사합니다. 😀
 

 

 

 

그리드형