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.

Te dejo unos links con documentación que te pueden ayudar a entender un poco el concepto de secrets