compose 파일이나 Dockerfile 에서 환경 변수를 지정한 적이 있다. 해당 내용은 민감한 정보를 포함하고 있음에도 이미지에서 해당 내용을 직접 볼 수 있다는 단점이 있다
이를 해결하기 위해 별도의 config & secret 을 사용해야 한다
- config 는 사용자 요청 별로 별도의 파일로 생성되며, config 파일 내부의 값을 컨테이너 내부에 적용시킨다. 이를 통해 각 컨테이너 별로 변수나 index.html 과 같은 요소를 컨테이너에 지정해 줄 수 있다
- secret 을 통해 password 를 안전하게 전달해준다
모든 사용자 별로 별도의 환경 변수, index.html , DB Password 를 다르게 하고 싶다면, 그때마다 별도의 이미지를 만들어야 하는 불편함이 있다. 이 경우, 사용자 별로 별도의 config, secret 을 사용하면, 추가 이미지를 생성하는 작업 없이 Password 나 변수 전달이 가능해진다
- config : 변수, 파일
- secret : Password, Key
echo "test123" | docker secret create mysql_password -
- 이를 통해 컨테이너의 소유권을 가진 요청한 사용자만 컨테이너 안에 생성된 파일을 통해 해당 password 와 같은 비밀 정보를 확인할 수 있다
- 파일은 컨테이너의 /run/secrets/ 밑에 지정한 이름으로 저장된다. 한 파일에 하나의 값이 저장된다. 만약, 2 개의 password 를 넣고 싶다면, 2 개의 파일을 생성해서 넣어야 한다
docker service create --name sql --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='testdb' mysql:5.7
docker config create webconfig index.html
docker service create --replicas 1 --constraint node.role==manager --name webcfg -p 8888:80 --config source=webconfig,target=/usr/share/nginx/html/index.html nginx