Docker secrets
Docker BuildKit agregó “Secrets”; un feature que sirve para agregar archivos o variables secretos, la ventaja de usar este nuevo modo es que te tus secretos no se van a quedar en las capas de docker. Anteriormente cualquier secreto se quedaba en las capas de docker, lo que permite a terceros a leer estos secretos; lo cual es muy peligroso. En el siguiente ejemplo vamos a usar una imagen de docker que clona un repositorio privado; el cual requiere de una llave ssh para poder ser clonado. Hay que recordar que para usar estos nuevos features; es necesario activar BuildKit.
Como Activar BuildKit?
Puedes activarlo de dos diferentes maneras; desde .bash_profile
o desde la configuración de docker.
Bash Profile
echo "export DOCKER_BUILDKIT=1" >> ~/.bashrc
Si estás usando zsh entonces será de la siguiente manera
echo "export DOCKER_BUILDKIT=1" >> ~/.zshrc
Si estás usando docker for desktop puedes dar click en preferencias; después en docker engine y agregar el siguiente feature
{
"features": {
"buildkit": true
}
}
una vez activado estamos listo para comenzar a usarlo, recuerda reiniciar docker después de hacer los cambios
Usando BuildKit Secrets
Como ya lo mencioné antes; lo que queremos hacer es clonar un repo privado dentro de una imagen de docker sin dejar
la llave ssh dentro de la imagen. git clone
necesita tener acceso a la llave ssh y lo vamos a hacer de la siguiente
manera:
RUN --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa git clone git@github.com:richistron/privado.git
Esta imagen es nuestro ejemplo completo:
FROM ruby:2.7.1-alpine
RUN apk update \
&& apk add --update --no-cache bash openssh-client git \
&& rm -rf /var/cache/apk/*
RUN mkdir -p -m 0600 /root/.ssh
RUN ssh-keyscan -H github.com >> /root/.ssh/known_hosts
RUN --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa git clone git@github.com:richistron/privado.git
Ahora vamos a hacer build de la imagen
docker build -t deployer --secret id=ssh,src=/path/to/id_rsa .
Listo! ya tienes una imagen de docker que no tiene secretos dentro de las capas.
Links
Te dejo unos links con documentación que te pueden ayudar a entender un poco el concepto de secrets