рдкрд╛рдпрдерди рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
рдЬрдм рдЖрдк рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдЬреА рдкреИрдХреЗрдЬ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЖрдк рдЗрд╕ рд░рд╣рд╕реНрдп рдХреЛ рдЫрд╡рд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рдЬреЛ рдХреЛрдИ рднреА рдЫрд╡рд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдЙрд╕реЗ рдЖрдкрдХреЗ рдирд┐рдЬреА рднрдВрдбрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓реЗрдЧреАредрдиреЛрдЯ : рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдХреЗрд╡рд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?" рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рд░рдирд╡реЗ рдореЗрдВ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрд▓реЗрдЦ рдЙрди рдмрд┐рд▓реНрдб рд░рд╣рд╕реНрдпреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬреЛ рдбреЙрдХрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
Docker рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ BuildKit рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╣рд╕реНрдп рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ , рдФрд░ 1.25 Docker Compose рдореЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ, рдЖрдк BuildKit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╣реА рдЪрд┐рддреНрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рд░реНрдЪ 2020 рддрдХ, рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ редрддреЛ рдЕрдм рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?рдЖрдЬ рдХреЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдбреЙрдХрдЯрд░ рдХрдВрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рдЧреБрдкреНрдд рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЕрдкрдиреЗ dockerfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк
рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдФрд░ рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЖрдк рдХрдореНрдкреЛрдЬрд╝ рд╕реЗ рдмрд┐рд▓реНрдб рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:version: "3.7"
services:
yourapp:
build:
context: "."
рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:$ docker-compose up
рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдЖрдк рдЫрд╡рд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВредрдЙрддреНрдкрд╛рджрди рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреБрд╢ рдХреЗ рд╕рд╛рде рднреЗрдЬрддреЗ рд╣реИрдВ :$ docker build -t myimage .
$ docker push myimage
рдФрд░ рдЬрдмрдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХ рдЧреБрдкреНрдд рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ (рдЕрд╕реБрд░рдХреНрд╖рд┐рдд)
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЧреБрдкреНрдд рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рджреЗрд╡рдкреАрдЖрдИ рднрдВрдбрд╛рд░ рд╕реЗ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ use-secret.sh
рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдХреА рдорджрдж рд╕реЗ рд░рд╣рд╕реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ ред
set -euo pipefail
echo "Secret is: $THEPASSWORD"
рдЖрдк рдХреЗрд╡рд▓ рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╣рд╕реНрдп рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рд╢рд╛рдорд┐рд▓ рд╣реИрдВредрдиреЛрдЯ : рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд▓реЗрдЦ рдХреЗ рдореБрдЦреНрдп рдЕрд░реНрде рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдбреЙрдХрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдкрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╣реИрдВ:FROM python:3.8-slim-buster
ARG THEPASSWORD
COPY use_secret.sh .
RUN ./use_secret.sh
рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ docker-compose.yml
, рдЬрд┐рд╕реЗ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:version: "3.7"
services:
yourapp:
build:
context: "."
args:
THEPASSWORD: "s3kr!t"
рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдВрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдЪрд▓рд╛ рдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:$ docker-compose build | grep Secret
Secret is: s3kr!t
рдФрд░ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИредрдФрд░ рд╣рдо рдЫрд╡рд┐ рдХреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ, рдбреЛрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:$ docker build -t myimage --build-arg THEPASSWORD=s3krit . | grep Secret
Secret is: s3krit
рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ: рдРрд╕рд╛ рдХрднреА рди рдХрд░реЗрдВ ред рдпрджрд┐ рд╣рдо рдЫрд╡рд┐ рдХреА рдкрд░рддреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдореЗрдВ рдЧреБрдкреНрдд рд░рд╣рд╕реНрдп рджреЗрдЦреЗрдВрдЧреЗ!$ docker history myimage
IMAGE CREATED CREATED BY SIZE
c224231ec30b 47 seconds ago |1 THEPASSWORD=s3krit /bin/sh -c ./use_secreтАж 0B
6aef62acf0db 48 seconds ago /bin/sh -c
f88b19ca8e65 About a minute ago /bin/sh -c
...
рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕ рдЫрд╡рд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЖрдкрдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдкрд╣рдЪрд╛рди рд▓реЗрдЧрд╛ред рддрдм рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд╕реАрдХреНрд░реЗрдЯ (рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рдзрд╛рди)
рдмрд┐рд▓реНрдбрдХрд┐рдЯ, рдбреЛрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ (рдФрд░ рдЕрднреА рднреА рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ) рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред Docker Compose рдХреЗ рдкрд╛рд╕ v1.25 рдХреЗ рдмрд╛рдж BuildKit рд╕рдкреЛрд░реНрдЯ рд╣реИредрд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдЕрднреА рднреА рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЗрд╕ рдкрд░ рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд░реНрдЪ 2020 рддрдХ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИрдВредрдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрди рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:- рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛;
- рдбреЙрдХ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЙрддреНрдкрд╛рджрди рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рд╣рдо рд╕реНрдерд╛рдиреАрдп рдФрд░ рдЙрддреНрдкрд╛рджрди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредBuildKit рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: RUN рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░, рд░рд╣рд╕реНрдпреЛрдВ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдВ /var/secrets/thepassword
ред рдЪреВрдВрдХрд┐ рдпрд╣ RUN рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЖрд░реЛрд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдРрд╕реА рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛрд╣рдо use_secret.sh
рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ ред рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ $THEPASSWORD
ред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред рдпрд╣реА рд╣реИ, рдЗрд╕реЗ $THEPASSWORD
BuildKit рдпрд╛ рдмрд┐рд▓реНрдб рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
set -euo pipefail
if [ -f /run/secrets/thepassword ]; then
export THEPASSWORD=$(cat /run/secrets/thepassword)
fi
echo "Secret is: $THEPASSWORD"
рдлрд┐рд░ рд╣рдо рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд░рд╣рд╕реНрдп рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ:
FROM python:3.8-slim-buster
ARG THEPASSWORD
COPY use_secret.sh .
RUN --mount=type=secret,id=thepassword ./use_secret.sh
docker-compose.yml
рд╣рдо рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрджрд▓рддреЗ:version: "3.7"
services:
yourapp:
build:
context: "."
args:
THEPASSWORD: "s3kr!t"
рдЕрдм рдЖрдкрдХреЛ рджреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдбреЙрдХрд░ рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдпрд╣ рдХрд┐ рдХрдореНрдкреЛрдЬ рдХреЛ рдбреЙрдХрд░ рдХреЗ рд╕реАрдПрд▓рдЖрдИ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░, рдЗрд╕рд▓рд┐рдП, рдмрд┐рд▓реНрдбрдХрд┐рдЯред рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░рд╣рд╕реНрдп рднреА рд▓рд┐рдЦреЗрдВрдЧреЗ:$ export DOCKER_BUILDKIT=1
$ export COMPOSE_DOCKER_CLI_BUILD=1
$ echo 's3krit' > /tmp/mypassword
рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде, рд╣рдо рдмрд┐рд▓реНрдб рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:$ docker-compose build --progress=plain \
--no-cache 2>&1 | grep Secret
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ --no-cache
рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЫрд╡рд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧреАред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред 2>&1
рдЕрдиреБрдкреНрд░реЗрд╖рд┐рдд stderr
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП stdout
рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП grep
редрдЬрдм рд╣рдо рдЙрддреНрдкрд╛рджрди рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдбреЙрдХ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:$ docker build --no-cache -t myimage \
--secret id=thepassword,src=/tmp/mypassword \
--progress=plain . 2>&1 | grep Secret
рдХреНрдпрд╛ рдпреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?
рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд░рд╣рд╕реНрдп рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ:$ docker history myimage
IMAGE CREATED CREATED BY SIZE
a77f3c32b723 25 seconds ago RUN |1 THEPASSWORD= /bin/sh -c ./use_secret.тАж 0B
<missing> 25 seconds ago COPY use_secret.sh .
...
рд╣реБрд░реНрд░реЗ! рд╣рдордиреЗ рдХрдВрдкреЛрдЬ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХреЛ рдЧреБрдкреНрдд рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ docker build
, рдФрд░ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд░рд╣рд╕реНрдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред