secret을 생성하려면 docker secret create 명령어를 사용한다.
echo qwer1234 | docker secret create my_mysql_password -
my_mysql_password라는 이름의 secret에 qwer1234라는 값을 설정한다. 파일의 내용을 터미널에 출력해 이를 secret으로 가져올 수 있다. 지금은 echo를 통해 입력했다.
docker secret ls
secret를 조회하면 password가 출력되지 않는다. secret는 매니저 노드 간에 암호화된 상태로 저장된다. 이런 secret 파일은 컨테이너에 배포된 뒤에도 파일 시스템이 아닌 메모리에 저장되서 컨테이너가 삭제될 때 secret도 삭제된다.
docekr service create \\
--name mysql \\
--replicas 1 \\
--secret source=my_mysql_password, target=mysql_root_password \\
--secret source=my_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="wordpress" \\
mysql:5.7
secret을 통해 MYSQL 컨테이너를 생성했다. 전에 생성한 것과 비슷하지만 secret를 사용해서 비밀번호를 컨테이너 내부에 마운트 했다. target에 컨테이너 내부에서 보여질 secret의 이름을 입력한다.
docker service create \\
--name mysql \\
--replicas 1 \\
--secret source=my_mysql_password, target=mysql_root_password \\
--secret source=my_mysql_password, target=mysql_password \\
-e MYSQL_ROOT_PASSWORD_FILE ="/run/secrets/mysql_password" \\
-e MYSQL_PASSWORD_FILE="/run/sercets/mysql_password" \\
-e MYSQL_DATABASE="wordpress" \\
mysql:5.7
—secret 옵션을 통해 컨테이너로 공유된 값은 기본적으로 컨테이너 내부의 /ren/secrets/ 디렉터리에 마운트된다. target의 값이 각각 mysql_root_password, mysql_password로 설정되어 /run/secrets 디렉터리에 해당 이름의 파일이 각각 존재할 것이다.
docker ps
docker exec mysql.1.64gke ls /run/secrets
파일 내용을 확인해 보면 secret를 생성했을 때 입력한 값이 들어간 것을 확인할 수 있다.
docker exec mysql.1.64.gke cat/run/secrets/mysql_password
이런 방식에 주의 점이 애플리케이션이 특정 경로의 파일 값을 참조할 수 있게 설계해야 한다. 애플리케이션을 개발할 때 각종 설정 변수를 파일로부터 동적으로 읽어로 수 있도록 설계하면 secret, config 장점을 활용할 수 있다.
📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] : 도커 스웜 네트워크 (0) | 2022.03.05 |
---|---|
[Docker] : config 사용하기 (0) | 2022.03.05 |
[Docker] : 서비스 컨테이너에 설정 정보 전달하기 : config, secret (0) | 2022.03.04 |
[Docker] : 서비스 롤링 업데이트 (0) | 2022.03.04 |
[Docker] : 스웜 모드의 서비스 장애 복구하기 (0) | 2022.03.04 |
댓글