ЁЯН╜я╕П рдзрдбрд╛ 04 тАФ Containers рдЪрд╛рд▓рд╡рдгреЗ: рдЬреЗрд╡рдгрд╛рдЪреА рд╡реЗрд│
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдорд╛рдЧреЗ: lesson-03-dockerfile ┬╖ рдкреБрдвреЗ: lesson-05-volumes-networks
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ03, рдЖрдгрд┐ рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп: рд░реЛрдЬрдЪреА рдХреНрд░рд┐рдпрд╛рдкрджреЗ тАФ run, ps, logs, exec,
stop, rm тАФ рдЖрдгрд┐ рддреБрдореНрд╣реА рдХрд╛рдпрдо рдЯрд╛рдЗрдк рдХрд░рд╛рд▓ рдЕрд╕реЗ рджреЛрди flags: -p рдЖрдгрд┐ -e.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЬреЗрд╡рдгрд╛рдЪреА рд╡реЗрд│! ЁЯН╜я╕П рдбрдмреЗ рдЙрдШрдбрдгреНрдпрд╛рдЪреЗ рдХрд╛рд╣реА рдирд┐рдпрдо рдЖрд╣реЗрдд:
- рд╡рд╛рдврд╛рдпрдЪреА рдЦрд┐рдбрдХреА ЁЯкЯ (
-p 3000:3000): рдбрдмрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЯреЗрдмрд▓рд╡рд░ рдЬреЗрд╡рддреЛ (рддреНрдпрд╛рдЪреЗ рдЦрд╛рдЬрдЧреА network). рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрддрд╛ рдпрд╛рд╡реЗ рдореНрд╣рдгреВрди рдХреЕрдиреНрдЯреАрди рдПрдХ рдЦрд┐рдбрдХреА рдЙрдШрдбрддреЗ: "laptop рд╡рд░рдЪреА рдЦрд┐рдбрдХреА 3000 рдбрдмреНрдпрд╛рддрд▓реНрдпрд╛ рдЬрд╛рдЧрд╛ 3000 рдХрдбреЗ рдЬрд╛рддреЗ". рдбрд╛рд╡рд╛ рдЖрдХрдбрд╛ = рддреБрдордЪрд╛ laptop; рдЙрдЬрд╡рд╛ = рдбрдмреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд.-p 8080:3000рд╣реА рдЪрд╛рд▓рддреЗ тАФ рдмрд╛рд╣реЗрд░рдЪреА рдЦрд┐рдбрдХреА 8080, рдЖрддрд▓реА рдЬрд╛рдЧрд╛ рддреАрдЪ. - рдЭрд╛рдХрдгрд╛рд╡рд░рдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдХреНрд╖рдгрд╛рдЪреНрдпрд╛ рдЪрд┐рдареНрдареНрдпрд╛ тЬПя╕П (
-e APP_VERSION=v2): рдбрдмрд╛ рдкреБрдиреНрд╣рд╛ рдкреЕрдХ рди рдХрд░рддрд╛ рдЙрдШрдбрддрд╛рдирд╛ settings рдмрджрд▓рд╛. - рдбреЛрдХрд╛рд╡рдгреЗ ЁЯСА:
docker logs= рдбрдмреНрдпрд╛рдЪреА рд░реЛрдЬрдирд┐рд╢реА рд╡рд╛рдЪрд╛;docker exec -it тАж sh= рдЪрд╛рд▓реВ рдбрдмреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд рд╢рд┐рд░реВрди рдЖрдЬреВрдмрд╛рдЬреВрд▓рд╛ рдкрд╛рд╣рд╛. - рдЖрд╡рд░рд╛рдЖрд╡рд░ ЁЯз╣:
docker stop= рдирдореНрд░рдкрдгреЗ "рдЬреЗрд╡рдг рд╕рдВрдкрд▓реЗ" рд╕рд╛рдВрдЧрдгреЗ (SIGTERM тАФ рдЖрдкрд▓реЗ ре▓рдк "bye ЁЯСЛ" рдореНрд╣рдгрддреЗ);docker rm= рдбрдмрд╛ рдлреЗрдХреВрди рджреЗрдгреЗ;--rm= рд╕реНрд╡рддрдГрдЪ рд╕реНрд╡рддрдГрд▓рд╛ рдлреЗрдХреВрди рджреЗрдгрд╛рд░рд╛ рдбрдмрд╛. рдбрдмреЗ рдлреЗрдХреВрди рджреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЕрд╕рддрд╛рдд тАФ рдХрдзреАрдЪ рдореМрд▓реНрдпрд╡рд╛рди рдирд╛рд╣реАрдд.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
img["ЁЯзК image<br/>hello-school:v1"]
c["ЁЯПГ container<br/>node server.js as PID 1<br/>own filesystem + network"]
win["ЁЯкЯ -p 3000:3000<br/>laptop:3000 тЖТ box:3000"]
tools["ЁЯСА daily verbs<br/>logs ┬╖ exec ┬╖ stop ┬╖ rm"]
img -->|"1 docker run<br/>-e APP_VERSION=v2"| c
win -->|"2 the only way in"| c
tools -.->|"3 watch, enter, end"| c
тЭУ рдХрд╛рдп
docker run IMAGE= container рдмрдирд╡рд╛ + рд╕реБрд░реВ рдХрд░рд╛. рдЙрдкрдпреЛрдЧреА flags:--rm(рд╕реНрд╡рддрдГ рд╕рд╛рдл рд╣реЛрддреЛ),-d(background),--name(рд╢реЛрдзрддрд╛ рдпреЗрддреЛ),-p,-e.- Container рддреНрдпрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп process (PID 1) рдЗрддрдХрд╛рдЪ рдЬрдЧрддреЛ. Process рд╕рдВрдкрд▓реА тЖТ container рд╕рдВрдкрддреЛ. "container рдЪрд╛рд▓реВ рдЖрд╣реЗ рдкрдг ре▓рдк рдмрдВрдж рдЖрд╣реЗ" рдЕрд╕реЗ рдХрд╛рд╣реА рдирд╕рддреЗ тАФ рд╣рд╛рдЪ рддрд░ рдореБрджреНрджрд╛ рдЖрд╣реЗ.
docker ps(рдЪрд╛рд▓реВ),ps -a(рд╕рдВрдкрд▓реЗрд▓реЗрд╣реА),logs -f(рд░реЛрдЬрдирд┐рд╢реА рд╕рддрдд рдкрд╛рд╣рд╛),exec -it NAME sh(рдЖрдд shell),stop(SIGTERM, 10s рд╕рд╡рд▓рдд, рдордЧ KILL).
ЁЯза Container рдЪреЗ рдЬреАрд╡рдирдЪрдХреНрд░
docker create тЖТ created
docker start тЖТ running
docker stop тЖТ stopped (process gone, filesystem kept)
docker rm тЖТ removed (container gone)
рдирд╡рд╢рд┐рдХреЗ рдЧреЛрдВрдзрд│рддрд╛рдд рдЕрд╢реА рддреАрди рдХреНрд░рд┐рдпрд╛рдкрджреЗ:
docker stop = stop the process (container still exists)
docker rm = remove the container (its writable layer is gone)
docker rmi = remove the IMAGE (the template, from your machine)
docker run = рдПрдХрд╛рдЪ рдлрдЯрдХреНрдпрд╛рдд create + start. docker ps -a рддреБрдореНрд╣реА рд╡рд┐рд╕рд░рд▓реЗрд▓реЗ рдерд╛рдВрдмрд▓реЗрд▓реЗ
containers рджрд╛рдЦрд╡рддреЗ; docker system df рдпрд╛ рд╕рдЧрд│реНрдпрд╛рд▓рд╛ disk рд╡рд░ рдХрд┐рддреА рдЬрд╛рдЧрд╛ рд▓рд╛рдЧрддреЗ рддреЗ рджрд╛рдЦрд╡рддреЗ.
ЁЯдФ рдХрд╛
рд╣реА рдХреНрд░рд┐рдпрд╛рдкрджреЗ рдореНрд╣рдгрдЬреЗрдЪ рдкреБрдврдЪреНрдпрд╛ рд╕рдЧрд│реНрдпрд╛рд╕рд╛рдареА рддреБрдордЪрд╛ debugging toolkit: Kubernetes рдордзрд▓рд╛
crash рд╣реЛрдгрд╛рд░рд╛ pod рдпрд╛рдЪ рдХрд▓реНрдкрдирд╛рдВрдиреА рддрдкрд╛рд╕рд▓рд╛ рдЬрд╛рддреЛ (kubectl logs, kubectl exec
рд╣реЗ рдЕрдХреНрд╖рд░рд╢рдГ рдЪреБрд▓рддрднрд╛рдК рдЖрд╣реЗрдд). рдЖрдгрд┐ PID-1/SIGTERM рдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдореБрд│реЗрдЪ рдЖрдкрд▓рд╛
server.js SIGTERM рд╣рд╛рддрд╛рд│рддреЛ тАФ рд╣рд╛рдЪ handler k8s рдХреЛрд░реНрд╕рдордзреНрдпреЗ
zero-downtime rollouts рд╕реБрд░рд│реАрдд рдХрд░рддреЛ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
app/server.js рдкреНрд░рддреНрдпреЗрдХ request log рдХрд░рддреЛ (docker logs рд╕рд╛рдареА),
рдЖрдкрд▓реЗ version рдЫрд╛рдкрддреЛ (-e рд╕рд╛рдареА), рдЖрдгрд┐ SIGTERM рд╣рд╛рддрд╛рд│рддреЛ (docker stop рд╕рд╛рдареА). рддреЛ
рдЕрдЧрджреА рдпрд╛рдЪ рдзрдбреНрдпрд╛рд╕рд╛рдареАрдЪреЗ рдЦреЗрд│рд╛рдЪреЗ рдореИрджрд╛рди рдЖрд╣реЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
docker build -t hello-school:v1 app/
# background + named + windowed + note-on-the-lid:
docker run -d --name lunch -p 3000:3000 -e APP_VERSION=lunch-time hello-school:v1
curl localhost:3000 # version: lunch-time
curl localhost:3000 # visits: 2 тАФ state lives IN the box
docker logs -f lunch # the diary (Ctrl+C to stop following)
docker exec -it lunch sh # climb in: ls, ps, cat server.js, exit
docker stop lunch # watch the diary say "bye ЁЯСЛ" (SIGTERM!)
docker rm lunch # throw the box away
docker run --rm -p 3000:3000 hello-school:v1 # visits: 1 again тАФ new box, fresh memory
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
docker stopтЙаdocker rmтЙаdocker rmiтАФ process, container, image-pрд╡рд┐рд╕рд░рдгреЗ рдЖрдгрд┐localhost:3000рдЧрдкреНрдк рдХрд╛ рдЖрд╣реЗ рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдд рдмрд╕рдгреЗ-dрдиреЗ рдЪрд╛рд▓рд╡рдгреЗ рдЖрдгрд┐ рдХрдзреАрдЪdocker logsрди рд╡рд╛рдЪрдгреЗ тАФ container рдиреЗ "рдХрд╛рд╣реАрдЪ рдХреЗрд▓реЗ рдирд╛рд╣реА" рдХрд╛рд░рдг рддреЛ crash рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛
тПня╕П рдкреБрдвреЗ
"рдирд╡рд╛ рдбрдмрд╛, рддрд╛рдЬреА рд╕реНрдореГрддреА" ре▓рдкреНрд╕рд╕рд╛рдареА рдЫрд╛рди, рдкрдг data рд╕рд╛рдареА рднрдпрдВрдХрд░. рдЖрдгрд┐ рджреЛрди рдбрдмреЗ рдПрдХрдореЗрдХрд╛рдВрд╢реА рдХрд╕реЗ рдмреЛрд▓рддрд╛рдд? Volumes рдЖрдгрд┐ networks.
git checkout lesson-05-volumes-networks