Kesinlikle bir sorun. Docker dosyaları genellikle depolara teslim edilir ve başkalarıyla paylaşılır. Bir alternatif, çalışma zamanında ortam değişkenleri olarak herhangi bir kimlik bilgisini (kullanıcı adları, şifreler, jetonlar, hassas her şey) sağlamaktır . Bu, -e
(CLI'daki bireysel değişkenler için) veya --env-file
(bir dosyadaki birden çok değişken için ) bağımsız değişkeni ile mümkündür docker run
. Docker-compose ile çevre kullanımı için bunu okuyun .
Kullanımı --env-file
kesinlikle daha güvenli bir seçenektir, çünkü bu, ps
eğer kullanılıyorsa, günlüklerde veya günlüklerde gösterilen sırlara karşı korur set -x
.
Ancak, env değişkenleri de özellikle güvenli değildir. Bunlar üzerinden görülebilir docker inspect
ve bu nedenle docker
komut çalıştırabilen herhangi bir kullanıcı tarafından kullanılabilir . (Tabii ki, docker
ana bilgisayarda erişimi olan herhangi bir kullanıcının yine de kökü vardır .)
Tercih ettiğim desen, ENTRYPOINT
veya olarak bir sarmalayıcı komut dosyası kullanmaktır CMD
. Sarma betiği, ilk olarak, çalışma zamanında kapsayıcıya dış bir konumdan kapsayıcıya aktarabilir, ardından sırları sağlayarak uygulamayı yürütebilir. Bunun tam mekaniği, çalışma zamanı ortamınıza bağlı olarak değişir. AWS'de, şifrelenmiş sırları bir S3 kovasında saklamak için IAM rollerinin, Anahtar Yönetim Hizmetinin ve S3'ün bir birleşimini kullanabilirsiniz . HashiCorp Vault veya credstash gibi bir şey başka bir seçenektir.
AFAIK, hassas verilerin oluşturma sürecinin bir parçası olarak kullanılması için en uygun kalıp yoktur. Aslında, bu konuda bir SO sorum var. Görüntüdeki katmanları kaldırmak için docker-squash kullanabilirsiniz . Ancak Docker'da bu amaçla yerel bir işlevsellik yoktur.
Yapılandırmalarda utangaç yorumları kapsayıcılarda yararlı bulabilirsiniz.