рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рд╕реНрдп

рдкрд╛рдпрдерди рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред




рдЬрдм рдЖрдк рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдЬреА рдкреИрдХреЗрдЬ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЖрдк рдЗрд╕ рд░рд╣рд╕реНрдп рдХреЛ рдЫрд╡рд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рдЬреЛ рдХреЛрдИ рднреА рдЫрд╡рд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдЙрд╕реЗ рдЖрдкрдХреЗ рдирд┐рдЬреА рднрдВрдбрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓реЗрдЧреАред
рдиреЛрдЯ : рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдХреЗрд╡рд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?" рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рд░рдирд╡реЗ рдореЗрдВ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрд▓реЗрдЦ рдЙрди рдмрд┐рд▓реНрдб рд░рд╣рд╕реНрдпреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬреЛ рдбреЙрдХрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
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рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдХреА рдорджрдж рд╕реЗ рд░рд╣рд╕реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ ред

#!/bin/bash
set -euo pipefail

echo "Secret is: $THEPASSWORD"

рдЖрдк рдХреЗрд╡рд▓ рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╣рд╕реНрдп рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдиреЛрдЯ : рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд▓реЗрдЦ рдХреЗ рдореБрдЦреНрдп рдЕрд░реНрде рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдбреЙрдХрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдкрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╣реИрдВ:


FROM python:3.8-slim-buster
# Using ARG for build secrets is INSECURE!
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 #(nop) COPY file:7aa28bbe6595e0d5тАж   62B
f88b19ca8e65        About a minute ago   /bin/sh -c #(nop)  ARG THEPASSWORD              0B
...

рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕ рдЫрд╡рд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЖрдкрдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдкрд╣рдЪрд╛рди рд▓реЗрдЧрд╛ред рддрдм рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд╕реАрдХреНрд░реЗрдЯ (рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рдзрд╛рди)


рдмрд┐рд▓реНрдбрдХрд┐рдЯ, рдбреЛрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ (рдФрд░ рдЕрднреА рднреА рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ) рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред Docker Compose рдХреЗ рдкрд╛рд╕ v1.25 рдХреЗ рдмрд╛рдж BuildKit рд╕рдкреЛрд░реНрдЯ рд╣реИред

рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдЕрднреА рднреА рдмрд┐рд▓реНрдбрдХрд┐рдЯ рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЗрд╕ рдкрд░ рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд░реНрдЪ 2020 рддрдХ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрди рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:

  • рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛;
  • рдбреЙрдХ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЙрддреНрдкрд╛рджрди рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рд╣рдо рд╕реНрдерд╛рдиреАрдп рдФрд░ рдЙрддреНрдкрд╛рджрди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
BuildKit рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: RUN рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░, рд░рд╣рд╕реНрдпреЛрдВ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдВ /var/secrets/thepasswordред рдЪреВрдВрдХрд┐ рдпрд╣ RUN рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЖрд░реЛрд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдРрд╕реА рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛ

рд╣рдо use_secret.shрдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ ред рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ $THEPASSWORDред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред рдпрд╣реА рд╣реИ, рдЗрд╕реЗ $THEPASSWORDBuildKit рдпрд╛ рдмрд┐рд▓реНрдб рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

#!/bin/bash
set -euo pipefail
if [ -f /run/secrets/thepassword ]; then
   export THEPASSWORD=$(cat /run/secrets/thepassword)
fi

echo "Secret is: $THEPASSWORD"

рдлрд┐рд░ рд╣рдо рдмрд┐рд▓реНрдбрдХрд┐рдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд░рд╣рд╕реНрдп рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ:

# syntax = docker/dockerfile:1.0-experimental
FROM python:3.8-slim-buster
# Only use the build arg for local development:
ARG THEPASSWORD
COPY use_secret.sh .
# Mount the secret to /run/secrets:
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
#12 0.347 Secret is: s3kr!t

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ --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
#12 0.359 Secret is: s3krit

рдХреНрдпрд╛ рдпреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?


рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд░рд╣рд╕реНрдп рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ:

$ 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 . # buildkit                 160B
...

рд╣реБрд░реНрд░реЗ! рд╣рдордиреЗ рдХрдВрдкреЛрдЬ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХреЛ рдЧреБрдкреНрдд рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ docker build, рдФрд░ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд░рд╣рд╕реНрдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред



рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред



All Articles