Skip to content

sparkforreg/docker

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Intro to Docker

8 часов, 2 Π°ΠΊ. дня.

Prerequisites

  • RAM β‰₯ 4Gb
  • ΠŸΡ€Π°Π²Π° локального Π°Π΄ΠΌΠΈΠ½Π° для Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° участника
  • ДоступСн git repo с Π΄Π°Π½Π½Ρ‹ΠΌ руководством {{ git-repo }} https://github.com/eugene-krivosheyev/docker
  • ДоступСн {{ registry-host }} https://hub.docker.com (Docker Hub)
  • ЗарСгистрирована учСтная запись {{ registry-account }} Π½Π° {{ registry-host }}
  • УстановлСн Docker CE ΠΈΠ»ΠΈ совмСстимый ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (e.g. Podman)
sudo dnf install -y docker

Agenda

7:20

Π€ΠΎΡ€ΠΌΠ°Ρ‚

  • Π΄Π²Π΅ части курса: ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ базовая для всСх Ρ€ΠΎΠ»Π΅ΠΉ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ большС Π² сторону эксплуатации

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Docker (15)

  • Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Docker? ΠœΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π° морского ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
  • ΠšΠ°ΠΊΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ инструмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ?
  • development environment?
  • testing environment?
  • production environment?
  • Виртуализация (инфраструктуры) VS контСйнСризация (прилоТСния)?
  • мСсто Π½Π° дискС для гостСвой ОБ
  • врСмя запуска гостСвой ОБ
  • overhead ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ гостСвой ОБ
  • ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ – процСсс ОБ "Π½Π° стСроидах": ΠΊΠ°ΠΊΠΈΠ΅ рСсурсы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ?
  • Π‘Ρ…Π΅ΠΌΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • dockerd
  • docker cli
  • disk image provisioning tool (dockercli) and Dockerfile
  • disk image
  • disk image registries: docker hub and corporate registries
  • container = running process + container data (container layer)
puml
@startuml
node "container\nregistry" {
  database "disk\nimage" as disk_image
}

node "host" {
  rectangle "container" {
    component "application"
    database "container\nlayer" as layer
  }
  database "disk" {
    database "image"
    file "volume"
    folder "shared\nfolder" as folder
    disk_image - image
  }
  image --layer
  volume -# container
  folder -# container
}

container #--# host : "port\nmapping"
@enduml
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ UI

  • docker cli

  • podman cli

  • GUI Π² дистрибутивС для MacOS

  • GUI Π² IDEA

  • ...

  • Π˜Ρ‚ΠΎΠ³ΠΎ

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ – это Π½ΠΎΠ²Ρ‹ΠΉ экзСшник. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΡ‹ΠΉ, бСзопасный ΠΈ управляСмый.

Hands-on practice quest #00: prerequisites sound-check (15+5)

  • Given

  • сдСлан Ρ„ΠΎΡ€ΠΊ Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства для собствСнных ΠΏΠΎΠΌΠ΅Ρ‚ΠΎΠΊ

  • Ρ„ΠΎΡ€ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ для внСсСния ΠΏΠΎΠΌΠ΅Ρ‚ΠΎΠΊ

  • для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с copy+paste для рСсурсов Ρ€Π°Π·Π΄Π΅Π»Π° Prerequisites плСйсхолдСры Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями

  • Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠ°Ρ€Ρ‹ участников с Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€ΠΎΠ»Π΅ΠΉ Π² ΠΏΠ°Ρ€Π΅

  • Hint: синонимы ΠΊΠΎΠΌΠ°Π½Π΄ docker cli

  • Hint: ... --help

  • Hint: docker cli reference

  • Hint: ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Tab ΠΈ ↑ для автоподстановки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

  • "Как ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ сцСнарий использования ΠΊΠΎΠΌΠ°Π½Π΄?"

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС:
- ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ систСмы ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ
- ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ дСйствия
- ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΈ коррСктности дСйствия 
  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "How to check system information?"
docker version # How to check docker and api version?
docker system info # docker info like dokker root folder, plugins
docker system df #docker disk usage

docker events
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?" (Π² Π½ΠΎΠ²ΠΎΠΌ ssh shell, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ docker events)
docker logout
open https://hub.docker.com/settings/security # to make Access Token
docker login -u {{ registry-account }} -p {{ access-token }} # login default hub.docker.com registry
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "How to pull image?"
docker image pull alpine
docker system df
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "How to work with containers?"
docker container ls [--all] # SHow all containers default running and -a all
docker container run --name demo -it alpine
/# cat /etc/os-release
/# exit 
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker container ls [--all]
docker container rm [--force] demo # --force remove running container
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • УспСшна Π»ΠΈ сконфигурирована систСма для использования docker?
  • Какая вСрсия API?
  • ΠžΡ‚ΠΊΡƒΠ΄Π° взялся ΠΎΠ±Ρ€Π°Π· диска?
  • Бколько мСста Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·?
  • Бколько мСста Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?
  • Какая вСрсия ΠΎΠ±Ρ€Π°Π·Π° скачиваСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?
  • Какая гостСвая ΠΊΠΎΠΌΠ°Π½Π΄Π° запускаСтся ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° (40)

ΠžΠ±Ρ€Π°Π·

  • Π—Π°Π΄Π°Ρ‡Π° срСды исполнСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²: изоляция диска
  • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ диска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° диск хостовой систСмы: ΠΎΠ±Ρ€Π°Π·
  • Π§Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π° дискС для запуска ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния?
  • Бостав ΠΎΠ±Ρ€Π°Π·Π° диска (ΠΎΡ‚ scratch Π΄ΠΎ prod-ready)
  • OS libraries
  • OS executables
  • Application libraries
  • Application executables
  • Config files
  • Data files
$ docker run --rm -it alpine ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var

Π–Π—Π›

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:
  • id ΠΊΠ°ΠΊ Ρ…Π΅Ρˆ [слоя] ΠΎΠ±Ρ€Π°Π·Π°
  • хост/Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ/имя:Ρ‚Π΅Π³
  • хост/Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ/Π³Ρ€ΡƒΠΏΠΏΠ°/имя:Ρ‚Π΅Π³
  • Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π·Π° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с git
  • docker container run + side effects > docker container commit > docker image push # Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ "Ρ€ΡƒΡ‡Π½ΠΎΠΉ" Π–Π¦
  • docker image build > docker image push > docker image pull | docker container run # ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π–Π¦

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°

$ docker image ls [--all]
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
alpine        latest    b0e47758dc53   6 weeks ago     5.33MB
hello-world   latest    a29f45ccde2a   19 months ago   9.14kB


$ docker image history ekr26/backend:1.0.0
IMAGE          CREATED      CREATED BY                                      SIZE      COMMENT
e96641ea7cdf   2 days ago   COPY dbo-1.0-SNAPSHOT.jar /dbo # buildkit       65.9MB    buildkit.dockerfile.v0
<missing>      2 days ago   ENTRYPOINT ["java" "-jar" "dbo-1.0-SNAPSHOT.…   0B        buildkit.dockerfile.v0
<missing>      2 days ago   WORKDIR /dbo                                    0B        buildkit.dockerfile.v0
<missing>      2 days ago   RUN /bin/sh -c mkdir -p /dbo # buildkit         0B        buildkit.dockerfile.v0
<missing>      2 days ago   EXPOSE map[8080/tcp:{}]                         0B        buildkit.dockerfile.v0
<missing>      5 days ago   /bin/sh -c #(nop)  ENV JAVA_HOME=/opt/java/o…   0B        
<missing>      5 days ago   /bin/sh -c set -eux;     apk add --no-cache …   96.9MB    
<missing>      5 days ago   /bin/sh -c #(nop) COPY multi:b8938281d618ac3…   16.7kB    
<missing>      5 days ago   /bin/sh -c #(nop)  ENV JAVA_VERSION=jdk8u282…   0B        
<missing>      5 days ago   /bin/sh -c apk add --no-cache tzdata --virtu…   14.2MB    
<missing>      5 days ago   /bin/sh -c #(nop)  ENV LANG=en_US.UTF-8 LANG…   0B        
<missing>      6 days ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      6 days ago   /bin/sh -c #(nop) ADD file:f77db8e5b937d8ebb…   5.58MB


$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nate/dockviz images -t
β”œβ”€<missing> Virtual Size: 5.6 MB
β”‚ └─<missing> Virtual Size: 5.6 MB
β”‚   └─<missing> Virtual Size: 5.6 MB
β”‚     └─<missing> Virtual Size: 19.8 MB
β”‚       └─<missing> Virtual Size: 19.8 MB
β”‚         └─<missing> Virtual Size: 19.8 MB
β”‚           └─<missing> Virtual Size: 116.7 MB
β”‚             └─<missing> Virtual Size: 116.7 MB
β”‚               β”œβ”€<missing> Virtual Size: 116.7 MB
β”‚               β”‚ └─<missing> Virtual Size: 116.7 MB
β”‚               β”‚   └─<missing> Virtual Size: 116.7 MB
β”‚               β”‚     └─<missing> Virtual Size: 136.7 MB
β”‚               β”‚       └─<missing> Virtual Size: 136.7 MB
β”‚               β”‚         └─3c1355b22f16 Virtual Size: 136.7 MB Tags: training-docker/ekr-stub:1.0.0
β”‚               └─<missing> Virtual Size: 116.7 MB
β”‚                 └─<missing> Virtual Size: 116.7 MB
β”‚                   └─<missing> Virtual Size: 116.7 MB
β”‚                     └─<missing> Virtual Size: 116.7 MB
β”‚                       └─e96641ea7cdf Virtual Size: 182.6 MB Tags: training-docker/ekr-backend:1.0.0

Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ слои

  • docker image history + docker image inspect
  • Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹
  • docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nate/dockviz images -t
  • docker run -v /var/run/docker.sock:/run/docker.sock -ti -e TERM tomastomecek/sen
  • dive
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства слоСв: 127

Hands-on practice quest #01: pre-built disk image lifecycle (15+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"

docker image ls # TODO: собствСнныС ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ участников для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ использования Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker image pull alpine
docker image ls
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker image history alpine

docker image inspect alpine
docker image inspect --format='{{.Id}} -> {{.Parent}}' alpine
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker container run --name demo -it alpine
/# touch side-effect.txt
/# exit
docker container diff demo
docker container commit demo {{ registry-account }}/demo
docker image ls
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker image tag {{ registry-account }}/demo:latest {{ registry-account }}/demo:1.0.0
docker image ls
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker image push {{ registry-account }}/demo:1.0.0
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker image ls
docker container rm demo
docker image prune
docker image ls
docker image rm {{ registry-account }}/demo:1.0.0
docker image ls
docker image rm {{ registry-account }}/demo:latest
docker image ls
docker image prune --all
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • КакиС способы ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π·Π°?
  • Какой Ρ‚Π΅Π³ Ρƒ ΠΎΠ±Ρ€Π°Π·Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ?
  • Какой Ρ‚Π΅Π³ Ρƒ ΠΎΠ±Ρ€Π°Π·Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ pull?
  • Π’ Ρ‡Π΅ΠΌ физичСский смысл удалСния ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ rm?
  • ВсСгда Π»ΠΈ удаляСтся ΠΎΠ±Ρ€Π°Π· ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ rm?
  • Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ prune?
  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dangling image?

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (20)

  • container = running process + container data (container layer)

  • Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ "запуск" ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°? Π§Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΌ запускаСтся?

  • Как ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Π΅ΠΌΡƒΡŽ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅?

  • Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

  • Π€ΠΎΡ€Π²Π°Ρ€Π΄ΠΈΠ½Π³ ΠΏΠΎΡ€Ρ‚ΠΎΠ²

  • имя ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (+defaults)

  • disk image

  • virtual network

  • folder | volume mapping

  • entry point (image entrypoint override)

  • guest environment variables

  • command line arguments (image cmd override)

  • ЭкстСрнализация ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ прилоТСния ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

  • Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

  • docker container create + docker container start = docker container run [args]

  • docker container pause, docker container unpause

  • docker container commit

  • просмотр Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΈ остановлСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker container ls [--all]

  • ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ

  • просмотр Π»ΠΎΠ³Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

  • docker container stop

  • docker container rm

  • Запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…: -d vs -it

  • Бколько ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?

  • МоТно Π»ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ нСсколько сСрвисов Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅?

  • отслСТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСсс c PID 1 (ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ENTRYPOINT + CMD) ΠΈ ΠΏΠΎ Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠΆΠ΅, ТСстко останавливая ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ процСссы

  • поэтому тСхничСски ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Ссли ΠΎΡ‡Π΅Π½ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свой ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ процСссов ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ процСссами

  • Π² Ρ†Π΅Π»ΠΎΠΌ вся философия, инструмСнтарий ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Docker Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ "service per container"

  • ΠΈΠ½Π°Ρ‡Π΅ слоТно ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ, Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ рСсурсы ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ падСния сСрвисов

  • для управлСния Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ оркСстраторы

Hands-on practice quest #02: container lifecycle (15+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • [optional] sudo yum install -y jq # json cli viewer

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΈ остановлСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²?"

docker container ls --all
docker container ls --format '{{.ID}} | {{.Names}} | {{.Status}} | {{.Image}}' 
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ 'ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ' ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"
docker container run --rm -it alpine # note `--rm`
/# exit
docker container ls
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅?"
docker container run --detach --name proxy --publish 80:80 nginx:1.19.4 # note `--detach`
docker container ls
curl localhost:80
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как 'ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ' ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ?"
docker container logs
docker container attach --sig-proxy=false # otherwise detach key `ctrl-c` will stop container 
docker container top
docker container exec -it /bin/sh
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ свойства ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?"
docker container port
docker container inspect [| jq]
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"
docker container pause
docker container unpause
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с сСрвисом Π±Π΅Π· запуска?"
docker container create
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ созданный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"
docker container start
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ снова Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"
docker container start
docker container restart
docker container stop # send SIGTERM, and then SIGKILL after grace period
docker container kill # send SIGKILL, or specified signal
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"
docker container rm --force
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ остановлСнный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"
docker container rm
docker container prune
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ container data (container layer)?"
docker container diff
docker container commit
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ сцСнарий "Как ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ?"
docker container cp
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • КакиС способы ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?
  • КакоС имя Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?
  • Π’ Ρ‡Π΅ΠΌ физичСский смысл удалСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?
  • Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ prune?
  • Бколько Π½ΠΎΠ²Ρ‹Ρ… layers Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° commit ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρƒ?

РСтроспСктива (10)

  • Π¦Π΅Π½Π½ΠΎΡΡ‚ΡŒ
  • Π§Ρ‚ΠΎ Π½Π° производство
  • Π§Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ
  • КакиС вопросы Π΄ΠΎΠ·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ простого сСрвиса: автоматичСская сборка ΠΎΠ±Ρ€Π°Π·Π° "с нуля" (30)

  • АвтоматичСская сборка – "это Π΄Ρ€ΡƒΠ³ΠΎΠ΅!"
  • Ρ‡Π°ΡΡ‚ΡŒ CI/CD pipeline:
  • трСбования ΠΊ частотС сборок
  • трСбования ΠΊ скорости сборок
  • трСбования ΠΊ рСсурсоСмкости
  • КакиС дСйствия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·Π° Π² случаС автоматичСской сборки?
  • ЭкстСрнализация ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ прилоТСния ΠΏΡ€ΠΈ сборкС ΠΎΠ±Ρ€Π°Π·Π°
  • Команда сборки ΠΎΠ±Ρ€Π°Π·Π° docker [image] build
  • ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ build context
  • ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ сборкС (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ --pull, --no-cache)
$ docker image build .
Uploading context  6.76 MB
Step 1/2 : FROM busybox
 ---> 769b9341d937
Step 2/2 : CMD echo Hello world
 ---> Using cache
 ---> 99cc1ad10469
Successfully built 99cc1ad10469
docker container run [--entrypoint Dockerfile's ENTRYPOINT override] IMAGE [Dockerfile's CMD defaults override] 
FROM alpine
ENTRYPOINT ["echo", "Hello"]
CMD ["World"] # 'default parameters to ENTRYPOINT' form
...
$ docker build --tag test .
...
$ docker run --rm test
Hello World
...
$ docker run --rm test Alpine
Hello Alpine
  • БистСмныС ΠΎΠ±Ρ€Π°Π·Ρ‹ для Π±Π°Π·Ρ‹ VS ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ с прилоТСниями

  • Dockerfile should specify at least one of CMD or ENTRYPOINT commands

  • ENTRYPOINT should be defined when using the container as an executable.

  • CMD should be used as a way of defining default arguments for an ENTRYPOINT command or for executing an ad-hoc command in a container

  • CMD will be overridden when running the container with alternative arguments

  • If CMD is defined from the base image, setting ENTRYPOINT will reset CMD to an empty value

  • ВСрсионированиС создаваСмого ΠΎΠ±Ρ€Π°Π·Π° Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Π³ΠΈ

  • ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ :latest

  • semantic versioning

  • unique tags

Hands-on practice quest #03-1: preparing base image with JRE (15)

  • Given ΠΏΠ°Ρ€Ρ‹ участников
  • Будущая структура ΠΏΠ°ΠΏΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ участники создадут Π² процСссС этой ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ
application
β”œβ”€β”€ backend
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ dbo-1.0-SNAPSHOT-sources.zip
β”‚   └── dbo-1.0-SNAPSHOT.jar
β”œβ”€β”€ db
β”‚   └── Dockerfile
β”œβ”€β”€ proxy
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── nginx.conf
β”œβ”€β”€ stub
β”‚   β”œβ”€β”€ mappings
β”‚   β”‚   └── legacyAccountingSystemResponse.json
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── wiremock-standalone-2.27.2.jar
└── docker-compose.yml
  • Π‘ΠΎΠ·Π΄Π°Π½Π° рабочая ΠΏΠ°ΠΏΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
mkdir application
  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ собствСнный ΠΎΠ±Ρ€Π°Π· Π½Π° основС Dockerfile?"
cd application
cat backend/Dockerfile # check it for reference of new base/Dockerfile

mkdir base
nano base/Dockerfile #TODO describe image that based on CentOS fixed fresh available version and install java-1.8.0-openjdk-headless with `yum install -y`

docker image build --tag {{ registry-account }}/base:1.0.0 ./base # where Dockerfile located
docker image push {{ registry-account }}/base:1.0.0

Hands-on practice quest #03-2: simple application containerization (15+5)

  • Given

  • ΠΏΠ°Ρ€Ρ‹ участников

  • ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄

  • Dockerfiles для основных сСрвисов прилоТСния

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π·Π°Π΄Π°Ρ‚ΡŒ "Ρ‡ΡƒΠΆΠΎΠΉ" ΠΎΠ±Ρ€Π°Π· ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ для своих ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ²?"

cd application
nano backend/Dockerfile # TODO fix FROM for new base image
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ provision ΠΎΠ±Ρ€Π°Π·Π° Π² Dockerfile?"
cd application/backend
cat Dockerfile # check out application's default configuration
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ свой ΠΎΠ±Ρ€Π°Π· с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Π±Π°Π·Π΅ Dockerfile?"
cd application
docker image build --tag {{ registry-account }}/backend:1.0.0 ./backend
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ?"
docker login
docker image push
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ "ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ" ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° Π±Π°Π·Π΅ своСго ΠΎΠ±Ρ€Π°Π·Π° с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ?"
docker container run \
 --name backend \
 --rm \ # ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ: удалится послС остановки
 --detach \ # -d
 --publish 8080:8080 \ # [host address:]8080:8080
 --env SPRING_PROFILES_ACTIVE=qa \ # Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ дСйствуСт пСрСмСнная окруТСния
 --volume $(pwd)/log:/dbo/log \ # ΠΏΠ°ΠΏΠΊΠ° Π² ΠΊΠΎΠ½Π΅ΠΉΠ½Π΅Ρ€Π΅ /dbo/log ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° ΠΏΠ°ΠΏΠΊΡƒ Π½Π° хостС /current-path/log
 {{ registry-account }}/backend:1.0.0 \ #  Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Ρ‚Π΅Π³
 --spring.profiles.active=qa # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

curl localhost:8080/dbo/actuator/health
curl -X POST localhost:8080/dbo/actuator/shutdown

docker container ls --all 
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • Π’ ΠΊΠ°ΠΊΠΎΠΌ порядкС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Dockerfile?
  • Бколько Π½ΠΎΠ²Ρ‹Ρ… layers Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° сборка ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρƒ?
  • Когда ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ остановился ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?
  • Бколько Ρ€Π°Π· Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с настройкой экстСрнализированной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ прилоТСния?
  • КакиС ΠΏΡ€ΠΈΠΎΡ€ΠΈΠ΅Ρ‚Ρ‹ Ρƒ этих Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ?
  • Π§Ρ‚ΠΎ случится ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки docker run ... --spring.profiles.active=preprod ?

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ составного прилоТСния (15)

  • Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для цСлостной Ρ€Π°Π±ΠΎΡ‚Ρ‹ multi-container прилоТСния?
  • ЦСлостная сборка ΠΎΠ±Ρ€Π°Π·ΠΎΠ² (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)
  • ЦСлостный запуск, Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅
  • КакиС рСсурсы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ?
  • network
  • volumes/folders
  • ΠžΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€Ρ‹: compose, swarm, k8s (+minikube) ΠΈ ΠΈΡ… ограничСния
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ оркСстраторов: Docker Compose (+build) ΠΈ Docker Stack over Swarm/k8s/minikube (-build)
  • Π”Π΅ΠΌΠΎ cat docker-compose.yml

Hands-on practice quest #04: multi-component application containerization (25+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"

cd application/backend
nano Dockerfile # TODO fix active Spring profile to `preprod` instead of `qa`
docker image build --tag {{ registry-account }}/backend:1.0.0 ./backend

cd application/stub
nano Dockerfile # TODO fix FROM for new custom base image
docker image build --tag {{ registry-account }}/stub:1.0.0 ./stub
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
cd application

docker container run \
 --detach \
 --name db \
 --publish 5432:5432 \
 --volume db:/var/lib/postgresql/data \
 --env POSTGRES_DB=dbo-db \
 --env POSTGRES_USER=dbo \
 --env POSTGRES_PASSWORD=dbo \
 postgres:11-alpine
 
docker container run \
 --detach \
 --name stub \
 --publish 8888:8888 \
 {{ registry-account }}/stub:1.0.0
curl localhost:8888/api/account [| jq]

docker container run \
 --detach \
 --name backend \
 --publish 8080:8080 \
 --env SPRING_PROFILES_ACTIVE=preprod \ # Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, установили ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² Dockerfile
 --env SPRING_DATASOURCE_URL="jdbc:postgresql://$(hostname -i)/dbo-db" \
 --env SPRING_DATASOURCE_USERNAME=dbo \
 --env SPRING_DATASOURCE_PASSWORD=dbo \
 --env SPRING_INTEGRATION_LEGACYACCOUNTINGSYSTEM_BASEURL="http://$(hostname -i):8888/api" \
 {{ registry-account }}/backend:1.0.0
curl -H "X-API-VERSION:1" localhost:8080/dbo/actuator/health [| jq]
curl -H "X-API-VERSION:1" localhost:8080/dbo/api/account [| jq]

open http://{{ external host ip }}:8080/dbo/swagger-ui.html

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker container ls [--all]
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"
docker container stop
docker container rm [--force]
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • По ΠΊΠ°ΠΊΠΎΠΌΡƒ URL ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ доступ ΠΊ Π²Π΅Π±-интСрфСйсу прилоТСния для тСстирования работоспособности?
  • БистСма работоспособна?
  • Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· экстСрнализированных настроСк, ΠΊΠ°ΠΊ связаны ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ систСмы?
  • КакиС рСсурсы Π±Ρ‹Π»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹?
  • Какой оркСстратор использовался?

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… (15)

  • Π§Ρ‚ΠΎ происходит с измСнСниями Π² ΠΎΠ±Ρ€Π°Π·Π΅ ΠΏΡ€ΠΈ остановкС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?
  • Как Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π² ΠΎΠ±Ρ€Π°Π·Π΅?
  • Как ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ измСнСния Π² ΠΎΠ±Ρ€Π°Π·Π΅?
  • Как ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ измСнСния Π½Π° дискС Π²Π½Π΅ ΠΎΠ±Ρ€Π°Π·Π°?
  • Stateful VS Stateless containers
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° хостовой машинС
  • Shared folders ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ FS
cd application
docker container run --volume "$(pwd)"/folder/file:/folder/file:ro # ΠΏΡƒΡ‚ΠΈ Ρƒ folder Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с "/"
  • Volumes ΠΊΠ°ΠΊ Π±Π»ΠΎΡ‡Π½Ρ‹Π΅ устройства
cd application
docker container run --volume my_volume:/folder/file:ro # имя volume Π½Π΅ начинаСтся с "/"
  • Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» docker volume
  • docker volume create | docker run --volume | docker build + Dockerfile
  • docker volume ls
  • docker volume inspect
  • docker volume rm | docker volume prune

Hands-on practice quest #05: multi-component stateful application containerization (15+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ shared folder с хостовой систСмы Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?"

docker container run -v # TODO Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ proxy/Dockerfile Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ: ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ nginx.conf ΠΊΠ°ΠΊ read-only Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ proxy ΠΏΡ€ΠΈ Π΅Π³ΠΎ запускС (Π½Π΅ ΠΏΡ€ΠΈ сборкС)
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ volumes/folders ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?"
docker container inspect # "Mounts"
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ volumes?"
docker volume ...
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ volume?"
docker volume ...
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ volume ΠΈ shared folder Π² docker-compose?"
cd application
nano docker-compose.yml
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • Π“Π΄Π΅ физичСски Ρ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ volume?
  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ "Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅" volume?

Виртуализация сСти (15)

  • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚ΠΎΠ²
  • Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ сСтСвой Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ адрСсов ΠΈ ΠΈΠΌΠ΅Π½ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях
  • --name default hostname
  • --hostname explicit hostname
  • localhost issue
  • ΡΠ»ΡƒΡˆΠ°ΠΉΡ‚Π΅ 0.0.0.0

Hands-on practice quest #06: networked multi-component stateful application containerization (0)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • Π’ случаС podman для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ хостов Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ dnsname

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ?"

docker network ...
docker container run \
 --detach \
 --network my_deployment \
 --name db \
 --volume db:/var/lib/postgresql/data \
 --env POSTGRES_DB=dbo-db \
 --env POSTGRES_USER=dbo \
 --env POSTGRES_PASSWORD=dbo \
 postgres:11-alpine
 
docker container run \
 --detach \
 --network my_deployment \
 --name stub \
 {{ registry-account }}/stub:1.0.0
 
docker container run \
 --detach \
 --network my_deployment \
 --name backend \
 --env SPRING_PROFILES_ACTIVE=preprod \ # Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, установили ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² Dockerfile
 --env SPRING_DATASOURCE_URL="jdbc:postgresql://db/dbo-db" \ # hostname instead of external ip is the result of virtualizing network
 --env SPRING_DATASOURCE_USERNAME=dbo \
 --env SPRING_DATASOURCE_PASSWORD=dbo \
 --env SPRING_INTEGRATION_LEGACYACCOUNTINGSYSTEM_BASEURL="http://stub:8888/api" \ # hostname instead of external ip is the result of virtualizing network
 {{ registry-account }}/backend:1.0.0
cd application
nano proxy/nginx.conf #TODOs

docker image build --tag {{ registry-account }}/proxy:1.0.0 ./proxy

docker container run \
 --detach \
 --network my_deployment \
 --name proxy \
 --publish 80:80 \
 {{ registry-account }}/proxy:1.0.0
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ сСтям?"
docker network connect 
docker network disconnect
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ состояниС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтСй?"
docker network ls 
docker network inspect
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ?"
docker network rm
docker network prune
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСтями Π² docker-compose?"
cd application
nano docker-compose.yml
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • Какая сСтСвая топология опрСдСляСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?
  • Для ΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠ΅ΠΏΠΏΠΈΠ½Π³ ΠΏΠΎΡ€Ρ‚ΠΎΠ²? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ для всСх?
  • Как ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ хосты Π² экстСрнализированной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ ip?

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ хостовых рСсурсов (20)

Hands-on practice quest #07: networked multi-component stateful application resource-limited containerization (10+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов?"

docker stats
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π»ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?"
docker container run # ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ CPU ΠΈ памяти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ OOME
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как Π»ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы Π² docker-compose?"
cd application
nano docker-compose.yml # ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ CPU, Ρ‡Ρ‚ΠΎΠ± Π½Π΅ Π±Π°Π»ΠΎΠ²Π°Π» ΠΈ ΠΏΠΎ памяти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ OOME
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • КакиС Π»ΠΈΠΌΠΈΡ‚Ρ‹ Π½Π° рСсурсы ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Docker ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?
  • КакоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈ OOME ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ сборки ΠΎΠ±Ρ€Π°Π·ΠΎΠ² (20)

  • Как ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π·Π°? Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ сборку ΠΎΠ±Ρ€Π°Π·Π°?
  • Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Dockerfile ΠΊΠ°ΠΊ слои ΠΎΠ±Ρ€Π°Π·Π°
  • каТдая Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° выполняСтся своим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ
  • RUN, COPY, ADD create layers
  • Other instructions create temporary intermediate images, and do not increase the size of the build
docker image build --tag stub ./stub
[+] Building 2.2s (10/10) FINISHED                                                                                                                                                                                                                      
 => [internal] load build definition from Dockerfile                                                                                                                                                                                               0.0s
 => => transferring dockerfile: 328B                                                                                                                                                                                                               0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                  0.0s
 => => transferring context: 34B                                                                                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/openjdk:8-jre-slim                                                                                                                                                                              1.3s
 => [1/5] FROM docker.io/library/openjdk:8-jre-slim@sha256:0330883ffeb5e14c4c15271004cdf6a2df21e827420b71dca01c34e41a23690d                                                                                                                        0.1s
 => => resolve docker.io/library/openjdk:8-jre-slim@sha256:0330883ffeb5e14c4c15271004cdf6a2df21e827420b71dca01c34e41a23690d                                                                                                                        0.0s
 => => sha256:5563c7e505fa828bd868ae99f24c5a56bb0bd5488a10184f7175d10f167b0898 1.16kB / 1.16kB                                                                                                                                                     0.0s
 => => sha256:a6c8e47b54ca34cb71f873f586aaac09f73ace9bffe1b5b62eb2b05f8c974deb 7.14kB / 7.14kB                                                                                                                                                     0.0s
 => => sha256:0330883ffeb5e14c4c15271004cdf6a2df21e827420b71dca01c34e41a23690d 320B / 320B                                                                                                                                                         0.0s
 => [internal] load build context                                                                                                                                                                                                                  0.4s
 => => transferring context: 20.00MB                                                                                                                                                                                                               0.4s
 => [2/5] RUN mkdir -p /stub/mappings                                                                                                                                                                                                              0.5s
 => [3/5] WORKDIR /stub                                                                                                                                                                                                                            0.0s
 => [4/5] COPY mappings/* mappings/                                                                                                                                                                                                                0.0s
 => [5/5] COPY wiremock-standalone-2.27.2.jar /stub                                                                                                                                                                                                0.1s
 => exporting to image                                                                                                                                                                                                                             0.1s
 => => exporting layers                                                                                                                                                                                                                            0.1s
 => => writing image sha256:0a8dfafa48b9c717b862532fe441e8f2db7146a6deb8380768e6a713c75a6da4                                                                                                                                                       0.0s
 => => naming to docker.io/library/stub
  • ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²
docker image build --tag stub ./stub
[+] Building 1.9s (11/11) FINISHED                                                                                                                                                                                                                      
 => [internal] load build definition from Dockerfile                                                                                                                                                                                               0.0s
 => => transferring dockerfile: 328B                                                                                                                                                                                                               0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                  0.0s
 => => transferring context: 32B                                                                                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/openjdk:8-jre-slim                                                                                                                                                                              1.8s
 => [auth] library/openjdk:pull token for registry-1.docker.io                                                                                                                                                                                     0.0s
 => [1/5] FROM docker.io/library/openjdk:8-jre-slim@sha256:0330883ffeb5e14c4c15271004cdf6a2df21e827420b71dca01c34e41a23690d                                                                                                                        0.0s
 => [internal] load build context                                                                                                                                                                                                                  0.0s
 => => transferring context: 689B                                                                                                                                                                                                                  0.0s
 => CACHED [2/5] RUN mkdir -p /stub/mappings                                                                                                                                                                                                       0.0s
 => CACHED [3/5] WORKDIR /stub                                                                                                                                                                                                                     0.0s
 => CACHED [4/5] COPY mappings/* mappings/                                                                                                                                                                                                         0.0s
 => CACHED [5/5] COPY wiremock-standalone-2.27.2.jar /stub                                                                                                                                                                                         0.0s
 => exporting to image                                                                                                                                                                                                                             0.0s
 => => exporting layers                                                                                                                                                                                                                            0.0s
 => => writing image sha256:1b7c6f374f61947cd1e96233307f4fa56dfc3c0e5fd6bf228b0e7e27803ca011                                                                                                                                                       0.0s
 => => naming to docker.io/library/stub

Hands-on practice quest #08: build-optimized networked multi-component stateful application resource-limited containerization (15+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборку?"

nano application/backend/Dockerfile # TODO ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборку ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ускорСнии
nano application/proxy/Dockerfile
nano application/stub/Dockerfile
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ кСшСм сборки?"
docker builder prune [--all]
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • Насколько ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборки Π² измСряСмых ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°Ρ…?
  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹: быстрСС ΠΈ мСньшС зависимостСй + мСньшС рисков
  2. Запуск Π² rootless mode ΠΈΠ»ΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ привилСгиями с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈ запускС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²
  3. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ подписи
  4. Π‘ΠΊΠ°Π½Π΅Ρ€Ρ‹ уязвимостСй для ΠΎΠ±Ρ€Π°Π·ΠΎΠ² docker scan --dependency-tree <image>
  5. Π›ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹ для Dockerfile
  6. COPY вмСсто ADD
  7. Аккуратно с рСкурсивным ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ + .dockerignore
  8. ЀиксированныС Ρ‚Π΅Π³ΠΈ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² (Semantic versioning vs Unique tags)
  1. docker logging drivers
  2. dedicated logs shared folders/volumes
  3. remote log collectors

Hands-on practice quest #09: build-optimized networked multi-component stateful application resource-limited best practice based containerization (10+5)

  • Given ΠΏΠ°Ρ€Ρ‹ участников

  • When участники ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ сцСнарии, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ...?"

docker info --format '{{.LoggingDriver}}'
docker container run -it --log-driver local --log-opt mode=non-blocking --log-opt max-buffer-size=4m 
docker inspect -f '{{.HostConfig.LogConfig.Type}}'
docker logs 
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ "Как ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ multi-stage сборку ΠΎΠ±Ρ€Π°Π·Π°?"
cd application/backend
nano Dockerfile # TODO: BUILD stage with `mvn clean verify` and QA stage with `java -jar ... --spring.profiles.active=qa` 
  • Then участники дСлятся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° вопросы
  • Как ΠΏΡ€ΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ сцСнарии?
  • КакиС интСрСсныС Π’Π°ΠΌ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΠΌΠ°Ρ‚ΡŒ?

Docker + QA = β™‘ (10)

  • Как Docker ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС
  • ВСрсионированиС ΠΊΠ°ΠΊ дисциплина
  • ΠžΠ±Ρ€Π°Π· для Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ тСстирования с ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ тСстовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
  • Π›Π΅Π³ΠΊΠΈΠΉ старт Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ окруТСния on demand
  • ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ тСстирования большС Π½Π΅ ΡƒΠ·ΠΊΠΎΠ΅ мСсто
  • Как Docker ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ тСстированиС
  • TestContainers

Docker Π² срСдС Kubernetes (5)

Ѐинальная рСтроспСктива (10)

  • Π¦Π΅Π½Π½ΠΎΡΡ‚ΡŒ
  • Π§Ρ‚ΠΎ Π½Π° производство
  • Π§Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ
  • КакиС вопросы Π΄ΠΎΠ·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ

Π”ΠΎΠΌΠ°ΡˆΠΊΠ°

Для ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ…:

  • ΠŸΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π½Π° stand-alone containers
  • ΠŸΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° с использованиСм оркСстратора (docker-compose.yml compliant: docker compose, docker stack in default swarm mode, podman compose)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dockerfile 100.0%