반응형
해당 글에서는 이전에 터미널로 작업을 하였던 Vault 구성을 Dockerfile로 간단히 구성하는 방법에 대해 알아봅니다.
💡 [참고] 이전에 터미널 명령어로 Docker Vault 부분에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
💡 [참고] 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에 시크릿 정보를 쓰는 것도 가능합니다. 이러한 방식으로 애플리케이션의 중요한 정보는 코드에서 분리되어 보안이 보장됩니다.
- 기밀정보의 동적인 제공, 중앙 집중식 시크릿 관리, 즉각적인 액세스 제어, 감사 추적 기능 등을 제공하여, 기업의 보안 정책을 준수하는 데 도움이 됩니다.
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의 추후 수행방법은 아래의 페이지를 참고하시면 관리자 구성까지 완료하실 수 있습니다.
💡 [참고] 해당 예시는 아래의 Github에서 확인이 가능합니다.
오늘도 감사합니다. 😀
반응형
'Docker > 환경설정 및 구성' 카테고리의 다른 글
[Docker] Dockerfile을 이용한 Spring Boot App 환경 구성 및 실행방법 (1) | 2024.02.05 |
---|---|
[Docker] Dockerfile을 이용한 React App 배포 환경 구성 및 실행방법 (0) | 2024.02.03 |
[Docker] Vault에서 Unseal Key를 잃어버린 경우 초기화 방법 (0) | 2024.01.18 |
[Docker] Docker로 Vault 로컬 환경 구성 방법 (0) | 2024.01.18 |
[Docker] Docker로 SonarQube 로컬 설치 및 검증 수행 방법 (0) | 2023.12.28 |