2 days, 8 ac.hrs, 7 as.hrs.
- Π ΠΎΠ»Ρ
- Π’Π΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Ρ Linux: 0β3
- Π’Π΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Ρ Docker/Podman: 0β3
- ΠΠ°ΠΊ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π½ΠΈΠ½Π³ Π΄Π°Π» ΠΠ°ΠΌ ΡΠ΅Π½Π½ΠΎΡΡΡ?
- Virtual machine for practice @ vra8:
IT Academy Training Group, HDD 50Gb, OS AlmaLinux + local ssh client - ΠΠΎΡΡΡΠΏΠ΅Π½ git repo Ρ Π΄Π°Π½Π½ΡΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ {{ git-repo }}
https://github.com/eugene-krivosheyev/podman - ΠΠΎΡΡΡΠΏΠ΅Π½ {{ registry-host }}
- ΠΠΎΡΡΡΠΏ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ {{ registry-account }} Π½Π° {{ registry-host }}
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Podman ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
sudo dnf update
sudo dnf install -y podman
sudo dnf install -y slirp4netns # for rootless containerssudo dnf install -y bash-completion
source <(podman completion bash)
sudo podman completion -f /etc/bash_completion.d/podman bash- ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΠ: Π·Π°ΠΏΡΡΠΊ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ β dev, test, prod
- ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΠ
- Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
- ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
- Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
- ΠΏΠΎΡΡΡ
- ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ
- ΠΌΠ΅ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅ Π΄Π»Ρ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΠ‘
- Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΠ‘
- overhead ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΠ‘
- Π‘Ρ Π΅ΠΌΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΠΈ
- Host
- Image
- Image Registry
- Container
- Port Mapping
- Mounts
- Pod
puml
@startuml
node "image\nregistry" {
database "disk\nimage" as disk_image
}
node "host" {
rectangle "pod" {
rectangle "infra\ncontainer"
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
volume -# pod
folder -# pod
}
pod #--# host : "port\nmapping"
container #--# host : "port\nmapping"
@enduml
-
pod -
bunch of containers
-
infracontainer -
localhost -
port mappings
-
mounts
-
daemonless
-
rootfull and rootless modes
Hands-on practice quest #00: Prerequisites sound-check and tools install 20 ΠΌΠΈΠ½ ΠΏΠ°ΡΠ½ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ + 10 ΠΌΠΈΠ½ Π΄Π΅Π±ΡΠΈΡ
- ΠΠ°ΡΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Ρ ΡΠ΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ»Π΅ΠΉ Π² ΠΏΠ°ΡΠ΅
- Π€ΠΎΡΠΊ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠΎΠΌΠ΅ΡΠΎΠΊ
- ΠΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈΠ·-ΠΏΠΎΠ΄ ΡΡΠΏΠ΅ΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
sudoΠΈΠ»ΠΈ
su -- ΠΠ°ΠΊ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄?
- ΠΊΠ°ΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΡ Π² Π½ΡΠΆΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
- ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ
- ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ - Hints
- ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
TabΠΈβΠ΄Π»Ρ Π°Π²ΡΠΎΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ - ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄ cli
... --help- podman cli reference
When ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΠΎΠ΄ΠΌΠ°Π½Π°/ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Ρ ΠΎΡΡΠΎΠ²ΠΎΠΉ ΠΠ‘/Π·Π°Π½ΡΡΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ?"
podman version # TODO: ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΊΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
podman system info
podman system df- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ?"
podman logout {{ registry-host }}
podman login {{ registry-host }}-
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ Π½ΡΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π· Π² registry?" ΠΠ°Π»ΠΎΠ³ΠΈΠ½ΠΈΡΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ {{ registry-host }}, Π² ΠΏΠΎΠΈΡΠΊΠ΅ Π½Π°ΠΉΡΠΈ Π½ΡΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ (Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π°Π΄ΡΠ΅Ρ Ρ ΠΎΡΡΠ°).
-
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· ΠΈΠ· ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ?"
podman image pull {{ registry-host }}/{{ os-images-path }}/alpine:3.14
podman system df- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?"
podman container run hello
podman container run --name demo -it {{ registry-host }}/{{ os-images-path }}/alpine:3.14
/# cat /etc/os-release
/# exit - Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ [Π²ΡΠ΅] ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?"
podman container ls [--all]
podman container rm demo- ΠΠ°ΠΊ Π½Π°Π·Π²Π°Π»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ?
- Π£ΡΠΏΠ΅ΡΠ½Π° Π»ΠΈ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Podman?
- ΠΡΠΊΡΠ΄Π° Π²Π·ΡΠ»ΡΡ ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ°?
- Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π·?
- Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?
- ΠΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΎΠ±ΡΠ°Π·Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ?
- ΠΠ°ΠΊΠ°Ρ Π³ΠΎΡΡΠ΅Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°?
- ΠΠ°Π΄Π°ΡΠ° ΡΡΠ΅Π΄Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²: ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΠ ΠΎΡ Ρ ΠΎΡΡΠ°
- ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° Π΄ΠΈΡΠΊ Ρ ΠΎΡΡΠ°: ΠΎΠ±ΡΠ°Π·
- Π§ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
- Π‘ΠΎΡΡΠ°Π² ΠΎΠ±ΡΠ°Π·Π° Π΄ΠΈΡΠΊΠ° (ΠΎΡ
scratchΠ΄ΠΎ prod-ready) - OS libraries
- OS package manager (Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΡΠΆΠ΅Π½ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π°)
- OS commands (Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ ΡΡΠ°Π±Π»ΡΡΡΠΈΠ½Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ)
- Application libraries
- Application executables
- Config files
- Data files
$ podman run --rm -it alpine:3.14 ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/podman/hello latest 577bf902f284 9 hours ago 85.1 kB
<none> <none> 4f391b4bf86f 3 days ago 85.1 kB
docker.io/library/alpine 3.14 376ba31ae3da 2 months ago 5.63 MB
docker.io/library/alpine latest a6215f271958 2 months ago 5.58 MBidΠΊΠ°ΠΊ Ρ Π΅Ρ ΠΎΠ±ΡΠ°Π·Π°Ρ ΠΎΡΡ/Π³ΡΡΠΏΠΏΠ°/ΠΈΠΌΡΠΊΠ°ΠΊ ΠΈΠΌΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ ΠΎΡΡ/Π³ΡΡΠΏΠΏΠ°/ΠΈΠΌΡ:ΡΠ΅Π³ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ
podman container run+ side effects >podman container commit>podman image push# ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ "ΡΡΡΠ½ΠΎΠΉ" ΠΠ¦podman image build>podman image push# ΡΡΠ°ΡΠ½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΠ¦
- Overlay FS
$ podman image history quay.io/podman/hello
ID CREATED CREATED BY SIZE COMMENT
577bf902f284 10 hours ago /bin/sh -c #(nop) LABEL "org.opencontainer... 0 B FROM d2f3fdcf80a2
<missing> 10 hours ago /bin/sh -c #(nop) LABEL "org.opencontainer... 0 B FROM cc07153b17e6
<missing> 10 hours ago /bin/sh -c #(nop) LABEL "org.opencontainer... 0 B FROM d45976f9036e
<missing> 10 hours ago /bin/sh -c #(nop) CMD ["/usr/local/bin/pod... 0 B FROM aeedbc3e44e3
<missing> 10 hours ago /bin/sh -c #(nop) COPY file:d246003209ea6b... 80.9 kB FROM a796bd9429dc
<missing> 10 hours ago /bin/sh -c #(nop) USER 1000 0 B FROM 190f78d5a9fb
<missing> 10 hours ago /bin/sh -c #(nop) LABEL artist="MΓ‘irΓn N... 0 B FROM 78ab72a99b9f
<missing> 10 hours ago /bin/sh -c #(nop) LABEL maintainer="Podman... 0 B$ 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- ΠΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ°Π·Π°ΠΌΠΈ c Crane
- ΠΏΠ°ΡΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ²
When ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ°Π·ΠΎΠ²?"
podman image ls # TODO: ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΊΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· ΠΈΠ· ΡΠ΅ΠΏΡ?"
podman image pull {{ registry-host }}/{{ os-images-path }}/alpine:3.14
podman image ls- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·Π° ΠΈ Π΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ (ΡΠ»ΠΎΠΈ)?"
podman image history {{ registry-host }}/{{ os-images-path }}/alpine:3.14
podman image inspect {{ registry-host }}/{{ os-images-path }}/alpine:3.14 [| jq]- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΡ ?"
podman container run --name demo -it {{ registry-host }}/{{ os-images-path }}/alpine:3.14 # run = pull + start
/# touch side-effect.txt
/# exit
podman container diff demo # ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΎΡΠ°ΡΠΈΡ Git
podman container commit demo {{ registry-host }}/container-training-docker/{{ registry-account }}/demo # ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π·
podman image ls- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ³ Π½Π° ΠΎΠ±ΡΠ°Π·?"
podman image tag {{ registry-host }}/container-training-docker/{{ registry-account }}/demo:latest {{ registry-host }}/container-training-docker/{{ registry-account }}/demo:1.0.0 # Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ
podman image ls- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π· Π² ΡΠ΅ΠΏΡ?"
podman image push {{ registry-host }}/container-training-docker/{{ registry-account }}/demo:1.0.0- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ / ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ±ΡΠ°Π· ΠΈΠ· ΡΠ΅ΠΏΡ?"
podman image ls
podman container rm demo # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
podman image prune # ΡΠ΄Π°Π»ΡΠ΅ΠΌ "ΠΏΠΎΠ΄Π²ΠΈΡΡΠΈΠ΅" ΠΎΠ±ΡΠ°Π·Ρ -> ΠΎΠ±ΡΠ°Π·Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠ³Π°
podman image ls
podman image rm {{ registry-host }}/container-training-docker/{{ registry-account }}/demo:1.0.0 # untag = unlink Π² Linux
podman image ls
podman image rm {{ registry-host }}/container-training-docker/{{ registry-account }}/demo:latest
podman image ls
podman image prune --all # ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅(!) ΠΎΠ±ΡΠ°Π·Ρ = Π½Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π½Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°- ΠΠ°ΠΊ Π½Π°Π·Π²Π°Π»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ?
- ΠΠ°ΠΊΠΎΠΉ ΡΠ΅Π³ Ρ ΠΎΠ±ΡΠ°Π·Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ?
- Π ΡΠ΅ΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ» ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
rm? - ΠΡΠ΅Π³Π΄Π° Π»ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π· ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅
rm? - Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ prune?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ dangling image?
-
container = running process + container data (container layer)
-
Π§ΡΠΎ Π·Π½Π°ΡΠΈΡ "Π·Π°ΠΏΡΡΠΊ" ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°? Π§ΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ?
-
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?
-
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅?
-
Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°?
-
disk image
-
ΠΌΠ΅ΠΏΠΏΠΈΠ½Π³ (ΡΠΎΡΠ²Π°ΡΠ΄ΠΈΠ½Π³) ΠΏΠΎΡΡΠΎΠ²
-
ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (+defaults)
-
virtual network
-
folder | volume mapping
-
guest environment variables
-
command line (image
entrypointoverride) -
command line arguments (image
cmdoverride) -
ΠΠΊΡΡΠ΅ΡΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
-
ΠΠ°Π΄Π°ΡΠΈ ΡΠΊΡΡΠ΅ΡΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
-
Π‘ΠΏΠΎΡΠΎΠ±Ρ:
--envΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ -
ΠΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
-
podman container create+podman container start=podman container run[args] -
podman container commit -
podman container ls [--all] -
podman container logs -
podman container stop&podman container kill -
podman container rm -
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ°Ρ :
-
-ivs-d -
-t -
podman pod create&podman container run --pod [new:] -
podman pod ps -
podman pod ls -
podman pod logs -
podman pod stop -
podman pod rm
- ΠΏΠ°ΡΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ²
When ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠΎΡΠΌΠΈΡΡΡΡ ΡΠ²ΠΎΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²?"
podman container ls --all- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ 'ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ' ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?"
podman container run --rm -it {{ registry-host }}/{{ os-images-path }}/alpine:3.14 # note `--rm`
/# exit
podman container ls --all- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅?"
podman container run --detach --name proxy --publish 8080:80 {{ registry-host }}/{{ software-images-path }}/nginx:1.19.4 # note `--detach` or `-d`
podman container ls
curl localhost:8080- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ 'ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ' ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ?"
podman container logs proxy
podman container attach --sig-proxy=false proxy # otherwise detach key `ctrl-c` will stop container
podman container top proxy
podman container exec -it proxy /bin/sh # run additional process `sh` within _running_ container- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°?"
podman container port proxy
podman container inspect proxy [| jq]- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?"
podman container stop ... # send SIGTERM, and then SIGKILL after grace period
podman container kill ... # send SIGKILL, or specified signal
podman container start ...
podman container restart ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?"
podman container rm --force- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?"
podman container rm ...
podman container prune ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄?"
podman ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² ΠΏΠΎΠ΄?"
podman ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄ΠΎΠ²?"
podman ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π² ΠΏΠΎΠ΄Π΅?"
podman pod ps
podman ps -a --pod
podman pod inspect ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π»ΠΎΠ³ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π² ΠΏΠΎΠ΄Π΅?"
podman logs --latest ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ k8s manifest ΠΈΠ· Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π°?"
podman generate kube ...- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ΄?"
podman ...- ΠΠ°ΠΊΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°?
- ΠΠ°ΠΊΠΎΠ΅ ΠΈΠΌΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ?
- ΠΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΠΏΠΏΠΈΠ½Π³ ΠΏΠΎΡΡΠΎΠ²) β Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄Π°?
- Π§ΡΠΎ Π·Π° Π»ΠΎΠ³ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΠΏΠΎΠ΄Π°?
- Π ΡΠ΅ΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ» ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°?
- Π ΡΠ΅ΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ» ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π°?
- Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ
container prune? - Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ k8s manifest?
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°: Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π·Π° 40
- ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΠ°Π·Π°
- ΠΠ° Π²Ρ
ΠΎΠ΄Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π°
Containerfile/Dockerfile - Π§ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π² ΡΡΠΎΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅?
- ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Containerfile
FROM+--platform=WORKDIRΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈCOPYandADDfrom build context (+.dockerignore)RUN(+shelland preferredexecforms) andSHELLfor non-default shellEXPOSEdocumentationENTRYPOINTandCMD(+ preferredexecand similardefault parameters to ENTRYPOINT,shellforms)LABEL
podman 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
...
$ podman build --tag test .
...
$ podman run --rm test
Hello World
...
$ podman run --rm test Alpine
Hello Alpine-
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π΄Π»Ρ Π±Π°Π·Ρ VS ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ
-
ΠΡΠ°ΡΠΊΠΎ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ:
-
Π‘Π±ΠΎΡΠΊΠ°
FROM scratch, "ΠΏΠΈΠ½ΡΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄" -
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ²
alpine 5.33MB
registry.access.redhat.com/ubi8/ubi-micro 51.6MB
debian:stable-slim 74.3MB- ΠΠΎΠ½ΡΡΠΈΠ΅ build context ΠΈ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ (+ .dockerignore)
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² Π² Dockerfile, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ΅Ρ builder
- ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ², ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΡΠ² ΠΎΠ±ΡΠ°Π·Π°
- Multi-stage build, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ°ΡΠΈΡΡ Π² ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ
- ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΡΠ² ΠΎΠ±ΡΠ°Π·Π° Π² ΠΎΠ΄ΠΈΠ½ ΡΠ»ΠΎΠΉ
- Π‘ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ git repo c ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ
application
βββ backend
βββ Containerfile
βββ dbo-1.0-SNAPSHOT.jar- ΠΠ°Π΄Π°Π½Π° ΡΠ°Π±ΠΎΡΠ°Ρ ΠΏΠ°ΠΏΠΊΠ°
cd application- ΠΡΠΎΠ²Π΅Π΄Π΅Π½Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Podman CLI Π² Registry
podman login ...When ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠΎΡΠΌΠΈΡΡΡΡ ΡΠ²ΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Containerfile?"
vi backend/Containerfile # Replace base image with one that suitable for corporate image registry
podman image build \
--tag {{ registry-host }}/container-training-docker/{{ registry-account }}/app:1.0.0 \ # set up symbolic name for image
./backend # folder where Containerfile located
podman image ls- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ 'ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ' ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π½Π° Π±Π°Π·Π΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ?"
podman container run \
--name backend \
--rm \ # ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ: ΡΠ΄Π°Π»ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
--detach \ # -d
--publish 8080:8080 \ # -p [host address:]8080:8080
--env SPRING_PROFILES_ACTIVE=qa \ # -e: Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
{{ registry-host }}/container-training-docker/{{ registry-account }}/app:1.0.0 \ # ΠΈΠΌΡ ΠΈ ΡΠ΅Π³
--spring.profiles.active=qa # ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅?"
podman container ls --all # Check for status
curl localhost:8080/dbo/actuator/health
open http://localhost:8080/dbo/swagger-ui/- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΌΡΠ³ΠΊΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?"
curl -X POST localhost:8080/dbo/actuator/shutdown- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π· Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ?"
podman image push ...- Π ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Dockerfile?
- Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΡ layers Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° ΡΠ±ΠΎΡΠΊΠ° ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π·Ρ?
- ΠΠΎΠ³Π΄Π° ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?
- Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?
- Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ ΡΠΊΡΡΠ΅ΡΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
- Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΠΎΠ±ΡΠ°Π·Π΅ ΠΏΡΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°?
- ΠΠ°ΠΊ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ±ΡΠ°Π·Π΅?
- ΠΠ°ΠΊ ΠΎΡΠΊΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ±ΡΠ°Π·Π΅?
- ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π° Π΄ΠΈΡΠΊΠ΅ Π²Π½Π΅ ΠΎΠ±ΡΠ°Π·Π°? (stateful containers): mounts
- tmpfs
podman container run
--tmpfs /tmp
--tmpfs /var/log
--tmpfs /dbo/log - shared folders
podman container run --volume "$(pwd)"/folder/file:/folder/file:ro # ΠΏΡΡΠΈ Ρ folder Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅, Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ "/"- volumes
podman container run --volume my_volume:/folder/file:ro # ΠΈΠΌΡ volume Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ "/"- ΠΠΎΠ³ΠΈ
- ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ Π»ΠΎΠ³ΠΈ: stdout/stderr
- ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π² Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ (ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ log driver)
podman logs [--until=10s] ...- Π‘ΠΎΠ±ΡΠ°Π½ ΠΎΠ±ΡΠ°Π· Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ
When ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠΎΡΠΌΠΈΡΡΡΡ ΡΠ²ΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ stateful container c ΠΏΡΠΎΠ±ΡΠΎΡΠΎΠΌ Π½Π° Ρ ΠΎΡΡΠΎΠ²ΡΡ ΠΏΠ°ΠΏΠΊΡ?"
podman container run \
-- ... \ # TODO ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
-- ... \ # TODO ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ: ΡΠ΄Π°Π»ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
-- ... \ # TODO ΡΠΎΠ½ΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ
-- ... \ # TODO ΠΏΡΠΎΠ±ΡΠΎΡ ΠΏΠΎΡΡΠ° Π½Π° Ρ
ΠΎΡΡ
-- ... \ # TODO ΠΏΡΠΎΡΠΈΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Spring 'qa'
--volume $(pwd)/log:/dbo/log \ # -v: ΠΏΠ°ΠΏΠΊΠ° Π² ΠΊΠΎΠ½Π΅ΠΉΠ½Π΅ΡΠ΅ /dbo/log ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° Π½Π° ΠΏΠ°ΠΏΠΊΡ Π½Π° Ρ
ΠΎΡΡΠ΅ /current-path/log. Windows caution for $()!
{{ registry-host }}/container-training-docker/{{ registry-account }}/app:1.0.0
cat $(pwd)/log/dbo.log- Π Π΄Π°Π½Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ mount Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ? tmpfs, shared folder, volume?
- ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Ρ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΡ?
- ΠΠΎΠ½ΡΡΠΈΠ΅ 'ΡΠ΅ΡΠ²ΠΈΡΠ°' Π² ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠ°Ρ
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠ° Compose
- services
- mounts
- virtual networks
cd application
podman-compose up --detach
podman-compose ps
podman-compose logs
podman-compose downHands-on practice quest #05: Multi-component stateful application containerization with Compose 30 + 10
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Podman Compose
sudo dnf install -y pip
pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Compose?"
cd application
podman-compose up --detach- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Compose?"
cd application
podman-compose ps
podman-compose port
podman-compose logs- Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ "ΠΠ°ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ?"
cd application
podman-compose down- ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ podman, Π° Π½Π΅ Compose?
- ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ security ΡΠΈΡΠΊΠΈ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ: Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ + ΠΌΠ΅Π½ΡΡΠ΅ ΡΠΈΡΠΊΠΎΠ²
- ΠΠ°ΠΏΡΡΠΊ Π² rootless mode
- ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π·Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
- Π‘ΠΊΠ°Π½Π΅ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠ²
docker scan --dependency-tree <image> - ΠΠΈΠ½ΡΠ΅ΡΡ Π΄Π»Ρ Dockerfile
- COPY Π²ΠΌΠ΅ΡΡΠΎ ADD + .dockerignore
- Π€ΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ² (Semantic versioning or Unique tags)
- Multi-Stage Build Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π² ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π½Π΅ ΡΡΠ΅ΠΊΠ»ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ : Secrets