рдЧреЛ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдореАрдЯрд╕реНрдкрд╛рд╕реЗрдк рдирд┐рдХ рдЧреЙрдерд┐рдпрд░ рд╕реЗрд╡рд╛ рдХреЗ рд╕рдВрд╕реНрдерд╛рдкрдХ "рдЧреЛ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдорд┐рдирд┐рдорд▓ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░" рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдХреЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП 10 рдорд┐рдирдЯ

рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (рдЧреЛ рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рдХрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдФрд░ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ-рд╕рдорд░реНрдерд┐рдд рдХрдВрдЯреЗрдирд░ рджреЛрдиреЛрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛рдлреА рдмрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЧреЛ рдПрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдмреЗрд╣рдж рдЫреЛрдЯреЗ рд╕реНрдЯреЗрдЯрд┐рдХ рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдЧреЛ рдПрдк рдХреИрд╕реЗ рдмрдирд╛рдПрдВ

рднрд╛рдЧ 1: рд╣рдорд╛рд░рд╛ "рдЖрд╡реЗрджрди"


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП google.com рдлреЛрд░реНрдХ рдХрд░реЗрдВ рдФрд░ HTML рдЖрдХрд╛рд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВред

package main import ( "fmt" "io/ioutil" "net/http" "os" ) func main() { resp, err := http.Get("https://google.com") check(err) body, err := ioutil.ReadAll(resp.Body) check(err) fmt.Println(len(body)) } func check(err error) { if err != nil { fmt.Println(err) os.Exit(1) } } 

рдпрджрд┐ рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрднрдЧ 17K рдорд┐рд▓рд╛ред рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рдКрдВрдЧрд╛ред

рднрд╛рдЧ 2: рдбреЙрдХрдЯрд░рд╛рдЗрдЬреЗрд╢рди


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧреЛ рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ "рдСрдирдмрд┐рд▓реНрдб" рдбреЙрдХрд░рдлрд╛рдЗрд▓:

 FROM golang:onbuild 

"Onbuild" рдЫрд╡рд┐ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдорд╛рдирдХ рдЧреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдорд╛рдирдХ рдЧреЛ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 FROM golang:latest RUN mkdir /app ADD . /app/ WORKDIR /app RUN go build -o main . CMD ["/app/main"] 

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

 REPOSITORY SIZE TAG IMAGE ID CREATED VIRTUAL SIZE example-onbuild latest 9dfb1bbac2b8 19 minutes ago 520.7MB example-golang latest 02e19291523e 19 minutes ago 520.7MB golang onbuild 3be7ee2ec1ae 9 days ago 514.9MB golang 1.4.2 121a93c90463 9 days ago 514.9MB golang latest 121a93c90463 9 days ago 514.9MB 

рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдореЗрдВ 514.9 рдПрдордмреА рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдПрдХ рдФрд░ 5.8 рдПрдордмреА рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдХрд▓рд┐рдд рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП 515MB рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЧреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЙрд╕реЗ рдЧреЛ рдирд┐рд░реНрднрд░рддрд╛, рд╕рд╛рде рд╣реА рдПрдХ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реЗ рдУрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЧреЛрд▓рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ: 1.4, рдпрд╣ рдбреЗрдмрд┐рдпрди рдЬреЗрд╕реА рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬреАрд╕реАрд╕реА рд╕рдВрдХрд▓рдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдбрд╛рдЙрдирд▓реЛрдб рдЬрд╛рдУ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рдбреЗрдмрд┐рдпрди рд╕рд░реНрд╡рд░ рдФрд░ рдЧреЛ рдЯреВрд▓рдХрд┐рдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рднрд╛рдЧ 3: рд╕рдВрдХрд▓рди!


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

 go build -o main . docker build -t example-scratch -f Dockerfile.scratch . 

рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг Dockerfile.scratch:

 FROM scratch ADD main / CMD ["/main"] 

рдЦрд░реЛрдВрдЪ рдХреНрдпрд╛ рд╣реИ? рд╕реНрдХреНрд░реИрдЪ docker рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд┐рдХреНрдд рдЫрд╡рд┐ рд╣реИред рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 0B рд╣реИ:

 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE example-scratch latest ca1ad50c9256 About a minute ago 5.60MB scratch latest 511136ea3c5a 22 months ago 0B 

рдирддреАрдЬрддрди, рд╣рдорд╛рд░рд╛ рдХрдВрдЯреЗрдирд░ рдХреЗрд╡рд▓ 5.6 рдПрдордмреА рд▓реЗрддрд╛ рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

 $ docker run -it example-scratch no such file or directory 

рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреЛ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рдереЗ рдЬреЛ рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рдерд╛ред рд╣рдордиреЗ рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛рдиреА, рд╕рднреА C рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЦрд░реЛрдВрдЪ рдЦрд╛рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рд▓реЛрдбрд┐рдВрдЧ рдкрде рдирд╣реАрдВ рд╣реИрдВред рд╣рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . 

рд╣рдо рдХреЙрдЧреЛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдмрд╛рдЗрдирд░реА рджреЗрддрд╛ рд╣реИред рд╣рдо рд▓рд┐рдирдХреНрд╕ рдХреЛ рдУрдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдХреЛрдИ рдЗрд╕реЗ рдореИрдХ рдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИ)ред -A рдзреНрд╡рдЬ рдХрд╛ рдЕрд░реНрде рд╣реИ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛, рдЬреЛ рдХрд┐ рд╡рд┐рдХрд▓рд╛рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдЖрдпрд╛рддреЛрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рдмрд╛рдЗрдирд░реА рд╣реИред рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ:

 $ docker run -it example-scratch Get https://google.com: x509: failed to load system roots and no roots provided 

рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп "рдХреЗрдВрдЯ" рд╣реИ: рдПрд╕рдПрд╕рдПрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░реВрдЯ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ?
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ /etc/ssl/certs/ca-certports.crt рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ (рдпрд╛ рдПрдХ рд▓рд┐рдирдХреНрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди, рдпрд╛ рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкреНрд░рджрд╛рддрд╛) рд╕реЗ рд╕реАрдП-рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЙрдкреА рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ADD рдХреЛ рдЕрдкрдиреЗ рдбреЙрдХрдлрд╝рд┐рд▓ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ Go рдХреЛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ:

 FROM scratch ADD ca-certificates.crt /etc/ssl/certs/ ADD main / CMD ["/main"] 

рдЕрдм рдмрд╕ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЖрдЗрдП рдЕрдм рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░ рджреЗрдЦреЗрдВ:

 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE example-scratch latest ca1ad50c9256 About a minute ago 6.12MB example-onbuild latest 9dfb1bbac2b8 19 minutes ago 520.7MB example-golang latest 02e19291523e 19 minutes ago 520.7MB golang onbuild 3be7ee2ec1ae 9 days ago 514.9MB golang 1.4.2 121a93c90463 9 days ago 514.9MB golang latest 121a93c90463 9 days ago 514.9MB scratch latest 511136ea3c5a 22 months ago 0B 

рд╣рдордиреЗ рдЖрдзрд╛ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рд╛ (рдФрд░ рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдФрд░ рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗ рдирд╣реАрдВ)ред рд╣рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдХрдВрдЯреЗрдирд░ рдорд┐рд▓рд╛ - рдЗрд╕реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


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

Source: https://habr.com/ru/post/hi460535/


All Articles