유비무환
Docker Config, Secret 본문
Docker Config, Secret 란?
config 나 secret 은 스웜 서비스에서 사용 가능한 방식으로 이미지나 컨테이너 외부에 파일을 저장하는 방식을 의미합니다. 두 방식 모두 서비스에 자유롭게 추가하거나 제거할 수 있습니다.
스웜에 config 나 secret을 추가하게 되면 도커가 TLS 연결을 통해서 해당 파일을 스웜 관리자에게 보냅니다. 이렇게 보내진 파일을 Raft 로그에 저장되고, 해당 로그는 암호화됩니다.
※ Raft 알고리즘 : 분산 시스템 내에서 합의 과정 중에 발생할 수 있는 문제를 해결하기 위한 알고리즘의 한 종류
Config
config는 레지스트리나 구성 파일과 같이 암호화가 필요하지 않은 정보를 저장하는 방식을 의미합니다.
// config 생성
echo "This is a config" | docker config create my-config -
// 생성된 config 확인
docker config ls

// config 정보 확인
docker config inspect my-config

Spec에 존재하는 Data는 Base64 인코딩 된 값으로 디코딩을 통해 확인할 수 있습니다.
// Base64 디코딩
echo VGhpcyBpcyBhIGNvbmZpZwo= | base64 -d

// config를 사용해서 서비스 생성
docker service create --name redis --config my-config redis:alpine

// 컨테이너에 있는 config의 내용을 확인
docker exec -it {container_id} sh
cat /my-config

config는 기본적으로 컨테이너 내부의 /<config-name>에 마운트 됩니다.
// 서비스 update를 통해 config를 추가
docker service update \
--config-add source=test-config,target=/etc/configs/test-config \
redis
cat /etc/configs/test-config

// config 삭제
docker config rm test-config

test-config를 사용하고 있는 서비스가 존재하기 때문에 config를 삭제할 수 없습니다.
// 서비스에서 config 제거
docker service update --config-rm test-config redis
서비스에서 test-config 를 제거하고 다시 삭제를 시도하면 config 가 제거됩니다.
또는 서비스 자체를 제거하고 config 를 삭제할 수도 있습니다.
docker service rm redis
// Rotate a config
docker service update \
--config-rm A.config \
--config-add B.config \
redis
Secret
비밀번호나 SSH 키, 인증서 키와 같이 보안에 민감한 데이터를 전송하기 위해서 사용됩니다.
// secret 생성
echo "This is a secret" | docker secret create my_secret -
// 생성된 secret 확인
docker secret ls

// secret 정보 확인
docker secret inspect my_secret

config와 달리 Spec에 Data 항목이 존재하지 않습니다.
// secret를 사용해서 서비스 생성
docker service create --name redis2 --secret my_secret redis:alpine

// 컨테이너에 있는 secret의 내용을 확인
docker exec -it {container_id} sh
cat /run/secrets/my_secret

secret 은 기본적으로 컨테이너 내부의 /run/secrets/<secret_name>에 마운트 됩니다.
// secret 삭제
docker secret rm my_secret

my_secret을 사용하고 있는 서비스가 존재하기 때문에 secret 을 삭제할 수 없습니다.
// 서비스에서 secret 제거
docker service update --secret-rm my_secret redis2
서비스에서 my_secret 을 제거하고 다시 삭제를 시도하면 secret 이 제거됩니다.
또는 서비스 자체를 제거하고 secret 을 삭제할 수도 있습니다.
docker service rm redis2
// secret 생성
echo qwe123 | docker secret create mysql_password -
// mysql 서비스 생성
docker service create \
--name mysql \
--replicas 1 \
--secret source=mysql_password,target=mysql_root_password \
--secret source=mysql_password,target=mysql_password \
-e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \
-e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password" \
-e MYSQL_DATABASE="test" \
mysql:latest
// mysql 접속 후 database 확인
mysql -u root -p
Enter password: qwe123

참고
https://book.naver.com/bookdb/book_detail.naver?bid=16850447
도커/쿠버네티스
쿠버네티스와 도커의 기본 사용 방법을 정확히 이해하는 것을 목표로 합니다!도커 컨테이너는 애플리케이션을 배포하기 위한 새로운 패러다임을 제시하는 가상화 패러다임입니다. 컨테이너 자
book.naver.com
'IT > 도커' 카테고리의 다른 글
Docker Desktop 설치 실패 이슈 (0) | 2022.03.04 |
---|---|
도커 네트워크 (0) | 2021.10.26 |