Docker Π½Π° Ubuntu: ΠΡΠ»Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅
Docker Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ, ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠΈ, Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»ΡΡ ΡΠ΄ΡΠΎΡΠΎ Π½Π° Ρ ΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΈ ΠΏΡΠ°Π²ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π»Π΅ΠΊΠΈ, ΠΏΠΎ-Π±ΡΡΠ·ΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ β ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²ΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Π² ΡΡΠ΅Π΄Π° Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³, ΠΊΡΠ΄Π΅ΡΠΎ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΠΏΡΡΠΊΠΎ Π²Π»ΠΈΡΡΡ Π²ΡΡΡ Ρ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
Π’ΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎΠ±Ρ Π²Π°ΡΠ° ΠΏΡΠ»Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Docker Π½Π° Ubuntu 20.04, 22.04 ΠΈ 24.04 LTS, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΊΡΠ΅ΠΏΠ²Π°Π½Π΅ ΡΠ»Π΅Π΄ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ°, ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Ρ Docker Compose ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΎ-ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΡΠΎΡΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Ρ.
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ Π΄ΠΎΡΠΈ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠ΅ΡΡΠΈΡ Π½Π° Ubuntu: 20.04 LTS (Focal), 22.04 LTS (Jammy) ΠΈΠ»ΠΈ 24.04 LTS (Noble). ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° `lsb_release -cs`, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ Π²Π°ΡΠ΅ΡΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎ ΠΈΠΌΠ΅.
- ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°: `amd64`, `arm64` ΠΈΠ»ΠΈ `armhf` β Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° Docker.
- ΠΠ΅ΡΡΠΈΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ: Docker ΠΈΠ·ΠΈΡΠΊΠ²Π° Linux ΡΠ΄ΡΠΎ 3.10 ΠΈΠ»ΠΈ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΎ. ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ `uname -r` Π·Π° ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅.
- ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ: `sudo` ΠΈΠ»ΠΈ root Π΄ΠΎΡΡΡΠΏ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π΅ΠΌΠΎΠ½Π°.
- ΠΠΈΡΠΊΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ: ΠΠΈΠ½ΠΈΠΌΡΠΌ 2 GB ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° Π΄ΡΠ»Π°, ΡΡΠ΄ΡΡΠΆΠ°Ρ `/var/lib/docker`, ΠΊΡΠ΄Π΅ΡΠΎ Docker ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΡΠΎΠΌΠΎΠ²Π΅ ΠΈ ΠΊΠ΅Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. ΠΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΌΠΎΠ½ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°Π·ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ Π΄ΡΠ» ΠΈΠ»ΠΈ ΡΠΎΠΌ.
ΠΡΠΈΡΠΈΡΠ½Π° ΡΡΡΠΏΠΊΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ°: ΠΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ Docker ΠΎΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ `apt` ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Ubuntu (ΠΏΠ°ΠΊΠ΅ΡΡΡ `docker.io`), ΠΏΡΡΠ²ΠΎ Π³ΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΡΠ΅, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ Ρ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Docker CE:
β`bash
sudo apt remove docker docker-engine docker.io containerd runc
β`
Π‘ΡΡΠΏΠΊΠ° 1: ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ
ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π΄ΠΎ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠΌ Π²Π΅ΡΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅:
β`bash
sudo apt update
sudo apt upgrade -y
β`
Π’ΠΎΠ²Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΡΠ΅Π·ΠΎΠ»Π²Π΅ΡΡΡ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π° `apt` ΡΠ°Π±ΠΎΡΠΈ ΡΠΏΡΡΠΌΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΈ ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° Π±Π°Π·ΠΎΠ²Π°ΡΠ° Π²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠ° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ β ΡΠ΅ΡΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° ΡΠΈΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π‘ΡΡΠΏΠΊΠ° 2: ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Docker Engine ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΡΠ° `apt` ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Ubuntu ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΠ°ΠΊΠ΅Ρ, Π½Π°ΡΠ΅ΡΠ΅Π½ `docker.io`, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ ΠΎΡ Canonical ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Ρ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π΅ΡΡΠΈΠΈ Π·Π°Π΄ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° Docker. ΠΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° Docker.
2.1 ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΈ ΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
β`bash
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release -y
β`
ΠΠ°ΡΠΎ `gnupg`? ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ Ρ Ubuntu 22.04, `gpg` Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡΠΈΡΡΡΡΠ²Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° Π±Π΅Π·ΡΡΠΌΠ½ΠΎΡΠΎ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° GPG ΠΊΠ»ΡΡΠ°.
2.2 ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ GPG ΠΊΠ»ΡΡ Π½Π° Docker
β`bash
sudo install -m 0755 -d /usr/share/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg βdearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
β`
Π‘ΡΡΠΏΠΊΠ°ΡΠ° `chmod a+r` ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ° Π² ΡΡΠΎΡΠΈΡΠ΅, Π½ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ `apt` ΡΠ°Π±ΠΎΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» β Π±Π΅Π· Π½Π΅Ρ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ ΠΊΠ»ΡΡΠΎΠ΄ΡΡΠΆΠ°ΡΠ΅Π»Ρ ΠΈ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π³ΡΠ΅ΡΠΊΠ° `NO_PUBKEY` ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° `apt update`.
2.3 ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° Docker
β`bash
echo
"deb [arch=$(dpkg βprint-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
β`
ΠΠ°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ `arch=$(dpkg βprint-architecture)` Π΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ARM. Π’Π²ΡΡΠ΄ΠΎΡΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° `amd64` ΡΡΠΊ Π΅ ΡΠ΅ΡΡΠ° Π³ΡΠ΅ΡΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° Π±Π΅Π·ΡΡΠΌΠ½ΠΈ Π½Π΅ΡΡΠΏΠ΅Ρ ΠΈ ΠΏΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π° ARM ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ.
2.4 ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Docker Engine, CLI ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ
β`bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
β`
Π Π°Π·Π±ΠΈΠ²ΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅:
| ΠΠ°ΠΊΠ΅Ρ | Π ΠΎΠ»Ρ |
|---|---|
| `docker-ce` | ΠΠ΅ΠΌΠΎΠ½ Π½Π° Docker Engine (`dockerd`) |
| `docker-ce-cli` | ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ CLI (ΠΊΠΎΠΌΠ°Π½Π΄Π° `docker`) |
| `containerd.io` | Π‘ΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ (ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ OCI) |
| `docker-buildx-plugin` | Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ (ΠΌΡΠ»ΡΠΈ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, BuildKit) |
| `docker-compose-plugin` | Compose V2 ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΏΠ»ΡΠ³ΠΈΠ½ Π·Π° Docker CLI |
ΠΠ΅Π»Π΅ΠΆΠΊΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ `containerd.io`: Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΡΡΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° `containerd` Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Ubuntu. `containerd.io` Π½Π° Docker Π΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π°, ΡΠ΅ΡΡΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ containerd. Π‘ΠΌΠ΅ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π΅ΡΠ΅ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π΅ΠΌΠΎΠ½Π°.
Π‘ΡΡΠΏΠΊΠ° 3: ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ°
ΠΠΎΡΠ²ΡΡΠ΄Π΅ΡΠ΅, ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΈ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅:
β`bash
sudo systemctl status docker
sudo systemctl enable docker
β`
ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
β`bash
sudo docker βversion
sudo docker info
β`
`docker info` Π΅ ΠΏΠΎ-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π΅Π½ ΠΎΡ `βversion` ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ β ΡΠ°Π·ΠΊΡΠΈΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ `overlay2`), Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π·Π° cgroup (`systemd` ΡΡΠ΅ΡΡ `cgroupfs`) ΠΈ Π±ΡΠΎΡ Π½Π° CPU ΠΈ ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π΄ΠΎ ΠΊΠΎΠΈΡΠΎ Docker ΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏ.
ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΡΠ΅ΡΡ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°:
β`bash
sudo docker run hello-world
β`
ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΠΎΡΠΏΠ΅ΡΠ°ΡΠ²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ βHello from Docker!β ΠΈ ΡΠ΅ ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π°, ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ Π½Π° Docker, ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π· ΠΎΡ Docker Hub ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
Π‘ΡΡΠΏΠΊΠ° 4: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Docker Π·Π° Π΄ΠΎΡΡΡΠΏ Π±Π΅Π· root ΠΏΡΠ°Π²Π°
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Docker ΡΠΎΠΊΠ΅ΡΡΡ (`/var/run/docker.sock`) Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡ Π½Π° `root` ΠΈ Π³ΡΡΠΏΠ°ΡΠ° `docker`. ΠΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ Π½Π΅ Π΅ Π² Π³ΡΡΠΏΠ°ΡΠ° `docker`, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° `sudo` Π·Π° Π²ΡΡΠΊΠ° Docker ΠΊΠΎΠΌΠ°Π½Π΄Π°.
β`bash
sudo usermod -aG docker $USER
β`
ΠΡΠΈΠ»ΠΎΠΆΠ΅ΡΠ΅ ΡΠ»Π΅Π½ΡΡΠ²ΠΎΡΠΎ Π² Π³ΡΡΠΏΠ°ΡΠ° Π±Π΅Π· ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°:
β`bash
newgrp docker
β`
ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅:
β`bash
docker run hello-world
β`
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ: Π§Π»Π΅Π½ΡΡΠ²ΠΎΡΠΎ Π² Π³ΡΡΠΏΠ°ΡΠ° `docker` Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π½Π° `sudo` Π±Π΅Π· ΠΏΠ°ΡΠΎΠ»Π°. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π² Π³ΡΡΠΏΠ°ΡΠ° `docker` ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΌΠΎΠ½ΡΠΈΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° Ρ ΠΎΡΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈ Π·Π° Π΄ΠΎΡΡΡΠΏ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ, ΠΏΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° rootless Docker:
β`bash
dockerd-rootless-setuptool.sh install
β`
Π Π΅ΠΆΠΈΠΌΡΡ Π±Π΅Π· root ΠΏΡΠ°Π²Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Docker ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π² Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, Π΄ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ ΠΏΠΎΠ²ΡΡΡ Π½ΠΎΡΡΡΠ° Π·Π° Π°ΡΠ°ΠΊΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° Π²ΡΡΠΊΠ° ΡΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠΏΠΎΠ΄Π΅Π»ΡΡ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Ρ ΠΎΡΡ.
Π‘ΡΡΠΏΠΊΠ° 5: Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Docker ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ
β`bash
Pull a specific image version from Docker Hub
docker pull nginx:1.27-alpine
List locally cached images
docker images
Remove a specific image
docker rmi nginx:1.27-alpine
Remove all dangling (untagged) images to reclaim disk space
docker image prune
Remove all unused images (not just dangling)
docker image prune -a
β`
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ ΡΡΠ²Π΅Ρ: ΠΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΡΠ΅Π³Π»ΡΠΉΡΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½ΠΈ ΡΠ°Π³ΠΎΠ²Π΅ (Π½Π°ΠΏΡ. `nginx:1.27-alpine`), Π° Π½Π΅ `latest` Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ. Π’Π°Π³ΡΡ `latest` Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ² β ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΡΠΈ ΠΊΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΎΠ±ΡΠ°Π· ΡΠ»Π΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ°, Π½Π°ΡΡΡΠ°Π²Π°ΠΉΠΊΠΈ Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ°.
ΠΠΈΠ·Π½Π΅Π½ ΡΠΈΠΊΡΠ» Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
β`bash
Run a container interactively with a pseudo-TTY
docker run -it ubuntu:22.04 /bin/bash
Run a container in detached mode with port mapping and a name
docker run -d -p 8080:80 βname my-nginx nginx:1.27-alpine
List running containers
docker ps
List all containers (including stopped)
docker ps -a
Stop a running container gracefully (SIGTERM, then SIGKILL after timeout)
docker stop my-nginx
Start a stopped container
docker start my-nginx
Remove a stopped container
docker rm my-nginx
Force-remove a running container (sends SIGKILL immediately)
docker rm -f my-nginx
View real-time logs
docker logs -f my-nginx
Execute a command inside a running container
docker exec -it my-nginx /bin/sh
β`
ΠΠ½ΡΠΏΠ΅ΠΊΡΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°
β`bash
Display real-time resource usage statistics
docker stats
Inspect detailed container metadata (JSON)
docker inspect my-nginx
Display disk usage by Docker objects
docker system df
Remove all stopped containers, unused networks, dangling images, and build cache
docker system prune
β`
`docker system prune` Π΅ Π΅Π΄Π½Π° ΠΎΡ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π΄ΡΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΡΡΠ²ΡΡΠΈ. ΠΠ΅Π· ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅, ΠΊΠ΅ΡΡΡ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Docker ΠΈ ΡΠΏΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°Π΅ΠΌΠ°Ρ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡΠΈ Π½Π° Π°ΠΊΡΠΈΠ²Π΅Π½ Ρ ΠΎΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ»ΠΈ CI.
Π‘ΡΡΠΏΠΊΠ° 6: Docker Compose β ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Docker Compose V2 (`docker-compose-plugin`, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΏΠΎ-ΡΠ°Π½ΠΎ) ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΊΠ°ΡΠΎ `docker compose` (Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»), Π° Π½Π΅ ΠΊΠ°ΡΠΎ Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈΡ `docker-compose` (Ρ ΡΠΈΡΠ΅). Π Π΄Π²Π°ΡΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ°Π±ΠΎΡΡΡ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΏΠ»ΡΠ³ΠΈΠ½Π°, Π½ΠΎ V2 Π΅ ΡΠ΅ΠΊΡΡΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡ.
6.1 Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Compose ΡΠ°ΠΉΠ»Π°
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΠ°ΠΉΠ» `compose.yml` (ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ»Π° Π² Compose V2; `docker-compose.yml` ΠΎΡΡΠ°Π²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ):
β`bash
mkdir ~/my-web-app && cd ~/my-web-app
nano compose.yml
β`
Π Π΅Π°Π»ΠΈΡΡΠΈΡΠ΅Π½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Nginx ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ ΡΡΠ»ΡΠ³Π°:
β`yaml
services:
web:
image: nginx:1.27-alpine
ports:
- "8080:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./html:/usr/share/nginx/html:ro
depends_on:
- app
restart: unless-stopped
app:
image: node:20-alpine
working_dir: /usr/src/app
volumes:
- ./app:/usr/src/app
command: node server.js
environment:
- NODE_ENV=production
restart: unless-stopped
β`
ΠΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈ Π½Π° Compose:
- `restart: unless-stopped` β ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ»Π΅Π΄ ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠΏΡΡΠ½ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° Π΄ΡΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΡΠ»ΡΠ³ΠΈ; `always` ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° Π΄ΠΎΡΠΈ ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ ΡΠΏΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.
- `depends_on` β ΠΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠ΅Π΄Π° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π½ΠΎ Π½Π΅ ΠΈΠ·ΡΠ°ΠΊΠ²Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π΄Π° Π΅ *Π³ΠΎΡΠΎΠ²Π°* (Π½Π°ΠΏΡ. Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΏΡΠΈΠ΅ΠΌΠ°ΡΠ° Π²ΡΡΠ·ΠΊΠΈ). ΠΠ° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `healthcheck` Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ρ `condition: service_healthy`.
- `volumes` Ρ `:ro` β ΠΠΎΠ½ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠ°Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ.
6.2 ΠΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° Compose
β`bash
Start all services in detached mode
docker compose up -d
View logs for all services
docker compose logs -f
View logs for a specific service
docker compose logs -f web
List running Compose services
docker compose ps
Scale a specific service to multiple replicas
docker compose up -d βscale app=3
Stop services without removing containers
docker compose stop
Stop and remove containers, networks, and volumes
docker compose down βvolumes
Rebuild images before starting (useful after code changes)
docker compose up -d βbuild
β`
6.3 ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π°
β`bash
curl -I http://localhost:8080
β`
ΠΡΠ³ΠΎΠ²ΠΎΡ `200 OK` ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π°, ΡΠ΅ Nginx ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. ΠΠ° ΡΡΠ»ΡΠ³ΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ VPS Π₯ΠΎΡΡΠΈΠ½Π³ ΠΈΠ½ΡΡΠ°Π½Ρ, Π·Π°ΠΌΠ΅Π½Π΅ΡΠ΅ `localhost` Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ IP Π°Π΄ΡΠ΅Ρ Π½Π° Π²Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ ΠΈ ΡΠ΅ ΡΠ²Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΡ ΠΏΠΎΡΡ Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π² Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π° (`ufw allow 8080/tcp`).
Π‘ΡΡΠΏΠΊΠ° 7: ΠΡΠ½ΠΎΠ²ΠΈ Π½Π° Docker ΠΌΡΠ΅ΠΆΠΈΡΠ΅
Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΠΌΠΎΠ΄Π΅Π» Π½Π° Docker Π΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°Ρ ΡΠΈΠ³ΡΡΠ½ΠΎ.
ΠΡΠ΅ΠΆΠΎΠ²ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
| ΠΡΠ°ΠΉΠ²Π΅Ρ | Π‘Π»ΡΡΠ°ΠΉ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° |
|---|---|
| `bridge` | ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ; ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ ΠΎΡΡΠ° |
| `host` | ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ Π½Π° Ρ ΠΎΡΡΠ°; ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, Π½ΡΠ»Π΅Π²Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ |
| `none` | ΠΠ΅Π· ΠΌΡΠ΅ΠΆΠΎΠ² Π΄ΠΎΡΡΡΠΏ; ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ»ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ, ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΡΠΌ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° |
| `overlay` | ΠΠ½ΠΎΠ³ΠΎΡ ΠΎΡΡΠΎΠ²Π° ΠΌΡΠ΅ΠΆΠ° Π·Π° Docker Swarm ΠΊΠ»ΡΡΡΠ΅ΡΠΈ |
| `macvlan` | ΠΡΠΈΡΠ²ΠΎΡΠ²Π° MAC Π°Π΄ΡΠ΅Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°; ΠΏΠΎΡΠ²ΡΠ²Π° ΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° |
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° bridge ΠΌΡΠ΅ΠΆΠ°:
β`bash
Create an isolated network
docker network create my-app-network
Run containers attached to the custom network
docker run -d βname db βnetwork my-app-network postgres:16-alpine
docker run -d βname api βnetwork my-app-network my-api-image
Containers on the same custom bridge network can resolve each other by name
Inside 'api', you can connect to 'db' using the hostname 'db'
β`
ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ bridge ΠΌΡΠ΅ΠΆΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ DNS ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΡΠ΅ΠΆΠ°ΡΠ° `bridge` ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ β ΡΠΎΠ²Π° Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ, ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π°Ρ Π΅Π΄ΠΈΠ½ Π΄ΡΡΠ³ ΠΏΠΎ ΠΈΠΌΠ΅.
Π‘ΡΡΠΏΠΊΠ° 8: ΠΠΎΡΡΠΎΡΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ Ρ Docker ΡΠΎΠΌΠΎΠ²Π΅
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ° Π΅ΡΠ΅ΠΌΠ΅ΡΠ½ΠΈ ΠΏΠΎ ΡΠ²ΠΎΡΡΠ° ΡΡΡΠ½ΠΎΡΡ. ΠΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ, Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π²ΡΡΡΠ΅ Π² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ΅ Π³ΡΠ±ΡΡ ΠΏΡΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ ΠΌΡ. ΠΠ° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΎΠΌΠΎΠ²Π΅ ΠΈΠ»ΠΈ bind ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈΡ.
β`bash
Create a named volume
docker volume create pgdata
Use the volume with a container
docker run -d
βname postgres-db
-e POSTGRES_PASSWORD=securepassword
-v pgdata:/var/lib/postgresql/data
postgres:16-alpine
List volumes
docker volume ls
Inspect a volume (shows mount point on host)
docker volume inspect pgdata
Remove unused volumes
docker volume prune
β`
Π’ΠΎΠΌΠΎΠ²Π΅ ΡΡΠ΅ΡΡ bind ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈΡ:
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½ ΡΠΎΠΌ | Bind ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅ |
|---|---|---|
| Π£ΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ ΠΎΡ Docker | ΠΠ° | ΠΠ΅ |
| ΠΠ·ΠΈΡΠΊΠ²Π° ΡΠ΅ Ρ ΠΎΡΡ ΠΏΡΡ | ΠΠ΅ | ΠΠ° |
| ΠΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΌΠ΅ΠΆΠ΄Ρ Ρ ΠΎΡΡΠΎΠ²Π΅ | ΠΠ° (Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ Π·Π° ΡΠΎΠΌΠΎΠ²Π΅) | ΠΠ΅ |
| ΠΠ°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° | ΠΠ°Π½Π½ΠΈ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ | ΠΠΎΠ΄ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ |
| ΠΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅ | `docker run βvolumes-from` | Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ° |
Π‘ΡΡΠΏΠΊΠ° 9: ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Docker Π°ΠΊΡΡΠ°Π»Π΅Π½
ΠΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° Docker ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ ΡΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ `apt`:
β`bash
sudo apt update
sudo apt upgrade -y
β`
ΠΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Docker, Π±Π΅Π· Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΠ»Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°:
β`bash
sudo apt install βonly-upgrade docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
β`
ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π±Π΅Π»Π΅ΠΆΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker ΠΏΡΠ΅Π΄ΠΈ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° cgroup ΠΈΠ»ΠΈ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° API, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°ΡΠ΅Π³Π½Π°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ `compose.yml`.
Docker ΡΡΠ΅ΡΡ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡ
| Π€ΡΠ½ΠΊΡΠΈΡ | Docker Engine | Podman | LXC/LXD | containerd (ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π΅Π½) |
|---|---|---|---|---|
| ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° Π΄Π΅ΠΌΠΎΠ½Π° | Π¦Π΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΄Π΅ΠΌΠΎΠ½ | ΠΠ΅Π· Π΄Π΅ΠΌΠΎΠ½ | ΠΠ°Π·ΠΈΡΠ°Π½ Π½Π° Π΄Π΅ΠΌΠΎΠ½ | ΠΠ°Π·ΠΈΡΠ°Π½ Π½Π° Π΄Π΅ΠΌΠΎΠ½ |
| ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π±Π΅Π· root ΠΏΡΠ°Π²Π° | ΠΠ° (v20+) | ΠΠ³ΡΠ°Π΄Π΅Π½Π° | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° | ΠΠ° |
| ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Docker Compose | ΠΠ³ΡΠ°Π΄Π΅Π½Π° | Π§ΡΠ΅Π· `podman-compose` | ΠΠ΅ | ΠΠ΅ |
| OCI ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ | ΠΠ° | ΠΠ° | ΠΠ΅ (LXC ΡΠΎΡΠΌΠ°Ρ) | ΠΠ° |
| ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Kubernetes | Π§ΡΠ΅Π· CRI-dockerd shim | ΠΠ³ΡΠ°Π΄Π΅Π½ CRI | ΠΠ΅ | ΠΠ³ΡΠ°Π΄Π΅Π½ CRI |
| ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Windows/macOS | Docker Desktop | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° | ΠΠ΅ | ΠΠ΅ |
| ΠΠ°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° | ΠΠ±ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ | Π€ΠΎΠΊΡΡΠΈΡΠ°Π½ Π²ΡΡΡ Ρ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, Π±Π΅Π· root ΠΏΡΠ°Π²Π° | Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ | Kubernetes Π²ΡΠ·Π»ΠΈ |
ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Π² ΠΌΠ°ΡΠ°Π± Π½Π° bare metal, ΡΡΠ΅Π΄Π°ΡΠ° Dedicated Servers Π²ΠΈ Π΄Π°Π²Π° ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° I/O Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ β Π²ΡΠΈΡΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΏΡΡΠΊΠΎ Π²Π»ΠΈΡΡΡ Π²ΡΡΡ Ρ ΠΏΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
ΠΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ Π·Π° ΡΠΊΡΠ΅ΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Docker Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΡΠ΅Π΄Π°, Π°Π΄ΡΠ΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π΄Π΅ΠΌΠΎΠ½Π° (`/etc/docker/daemon.json`):
β`json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"userns-remap": "default",
"live-restore": true,
"no-new-privileges": true
}
β`
- `log-opts` Ρ `max-size` ΠΈ `max-file`: ΠΠ΅Π· ΡΠΎΡΠ°ΡΠΈΡ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, JSON Π»ΠΎΠ³ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° Docker ΡΠ΅ Π·Π°ΠΏΡΠ»Π½ΡΡ Π΄ΠΈΡΠΊΠ° Π²ΠΈ. Π’ΠΎΠ²Π° Π΅ Π΅Π΄Π½Π° ΠΎΡ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΈΡΠ΅ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΡΠ²ΡΡΠΈ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅.
- `userns-remap: "default"`: ΠΠΊΡΠΈΠ²ΠΈΡΠ° ΠΏΡΠ΅Π½Π°Π·Π½Π°ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΡΠ°ΠΊΠ° ΡΠ΅ root Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (UID 0) Π΄Π° ΡΠ΅ ΡΡΠΏΠΎΡΡΠ°Π²ΠΈ Ρ Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ UID Π½Π° Ρ ΠΎΡΡΠ°.
- `live-restore: true`: ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ, Π°ΠΊΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡ Π½Π° Docker ΡΠ΅ ΡΡΠΈΠ½Π΅ ΠΈΠ»ΠΈ Π±ΡΠ΄Π΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ β ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π±Π΅Π· ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅.
- `no-new-privileges: true`: ΠΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΠ΅Π· Π΄Π²ΠΎΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ `setuid` ΠΈΠ»ΠΈ `setgid`.
ΠΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π°:
Docker ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ° `iptables` Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° `ufw`. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ ΠΏΠΎΡΡ (`-p 8080:80`) ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π΄ΠΎΡΠΈ Π°ΠΊΠΎ `ufw deny 8080` Π΅ Π·Π°Π΄Π°Π΄Π΅Π½. ΠΠ° Π΄Π° Π½Π°Π»ΠΎΠΆΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° `ufw` Π½Π°Π΄ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΡΡΠ° Π½Π° `iptables` ΠΎΡ Docker, Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ `"iptables": false` ΠΊΡΠΌ `daemon.json` ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΠΉΡΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ ΡΡΡΠ½ΠΎ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `βnetwork host` Π½Π° Docker Ρ ΠΈΠ·ΡΠΈΡΠ½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° `ufw`.
ΠΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ HTTPS ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½Π΅, ΡΠ΄Π²ΠΎΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΎΡΠΎ ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ (Nginx ΠΈΠ»ΠΈ Traefik) ΠΈ Π²Π°Π»ΠΈΠ΄Π΅Π½ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ. SSL Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ°Π²ΠΊΠ° Π·Π° Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΠ΅Π± ΡΡΠ»ΡΠ³Π°, ΡΠ°Π±ΠΎΡΠ΅ΡΠ° Π·Π°Π΄ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ ΡΡΠ΅ΠΊ.
ΠΠΊΠΎ Π²Π°ΡΠ΅ΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π²ΠΊΠ»ΡΡΠ²Π° ΠΈΠ·Π²ΠΎΠ΄ Π·Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ GPU-ΡΡΠΊΠΎΡΠ΅Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, NVIDIA Container Toolkit ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ Docker Engine. GPU Π₯ΠΎΡΡΠΈΠ½Π³ΡΡ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Ρ Π°ΡΠ΄ΡΠ΅Ρ Π·Π° ΡΠ΅Π·ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ.
ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΡΠ΅Π±-Π±Π°Π·ΠΈΡΠ°Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, VPS Ρ cPanel ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° ΡΡΠ΅Π΄Π° Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π», ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈΡΠ΅ Π½Π° Docker Π²Π½Π΅Π΄ΡΡΠ²Π°Π½ΠΈΡ Π·Π° ΠΏΠΎ-ΠΏΡΠΎΡΡΠΈ ΡΡΠ΅ΠΊΠΎΠ²Π΅ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ»ΡΡΠΎΠ²ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΡΠ° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠΎΠ³Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Docker Π½Π° VPS ΡΡΠ΅ΡΡ dedicated ΡΡΡΠ²ΡΡ:
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ VPS Π·Π° ΡΡΠ΅Π΄ΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Ρ Π½ΠΈΡΠΊΠΎ Π΄ΠΎ ΡΡΠ΅Π΄Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π΅ 10β50 ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ dedicated ΡΡΡΠ²ΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π° 50 ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠ° I/O ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ (Π±Π΅Π· Π΅ΡΠ΅ΠΊΡ Π½Π° ΡΡΠΌΠ΅Π½ ΡΡΡΠ΅Π΄) ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ (`sysctl`) Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π·Π° Π²Π°ΡΠ΅ΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΡΠΊΠ°Π½Π΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ:
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠΎΡΠ°ΡΠΈΡ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π² `daemon.json` (`max-size`, `max-file`)
- ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ `live-restore` Π·Π° ΠΎΡΠ΅Π»ΡΠ²Π°Π½Π΅ ΠΏΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π΅ΠΌΠΎΠ½Π° Π±Π΅Π· ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΡΠΎΠΌΠΎΠ²Π΅, Π° Π½Π΅ bind ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈΡ, Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈ ΡΡΡ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅
- Π€ΠΈΠΊΡΠΈΡΠ°ΠΉΡΠ΅ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ `compose.yml` β Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `latest` Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ
- ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ `userns-remap` ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ rootless Docker Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅
- ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° `iptables` ΡΠ»Π΅Π΄ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° Π½Π° Docker, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅, ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π° Π½Π΅ Π΅ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π΅Π½Π°
- ΠΠ°Π΄Π°ΠΉΡΠ΅ `restart: unless-stopped` Π½Π° Π²ΡΠΈΡΠΊΠΈ Π΄ΡΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΡΠ»ΡΠ³ΠΈ
- ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΡΠ΅ `docker system prune` ΠΏΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ΠΎ cron Π·Π°Π΄Π°Π½ΠΈΠ΅, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΠ΅ ΠΈΠ·ΡΠ΅ΡΠΏΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠΊΠ°
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ bridge ΠΌΡΠ΅ΠΆΠΈ Π·Π° Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ β Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΠ°Π·ΡΠΈΡΠ°ΠΉΡΠ΅ Π½Π° bridge ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈ
Π§Π΅ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ
ΠΠ·ΠΏΠΎΠ»Π·Π²Π° Π»ΠΈ Docker Π½Π° Ubuntu `systemd` ΠΈΠ»ΠΈ `cgroupfs` ΠΊΠ°ΡΠΎ cgroup Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅?
ΠΡ Docker Engine 20.10, cgroup Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° `systemd` (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ Ubuntu LTS ΠΈΠ·Π΄Π°Π½ΠΈΡ) Π΅ `systemd`. Π’ΠΎΠ²Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° Kubernetes ΠΈ ΠΈΠ·Π±ΡΠ³Π²Π° Π½Π΅ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ°, ΠΏΡΠΈΡΠΈΠ½Π΅Π½Π° ΠΎΡ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ° Π½Π° cgroup. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Ρ `docker info | grep -i cgroup`.
ΠΠ°ΠΊΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ `docker compose down` ΠΈ `docker compose stop`?
`docker compose stop` ΡΠΏΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, Π½ΠΎ Π³ΠΈ Π·Π°ΠΏΠ°Π·Π²Π° Π·Π°Π΅Π΄Π½ΠΎ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π°ΡΠΎΡΠΈΠΈΡΠ°Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ. `docker compose down` ΡΠΏΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³ΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΌΡΠ΅ΠΆΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ Compose. ΠΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° `βvolumes` ΠΊΡΠΌ `down` ΡΡΡΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈΡΠ΅ ΡΠΎΠΌΠΎΠ²Π΅, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π² Compose ΡΠ°ΠΉΠ»Π° β ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ»Π°Π³ Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠΉ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΡΡΠΈΠ²Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.
ΠΠ°ΡΠΎ Docker Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π° `ufw` Π½Π° Ubuntu?
Docker Π²ΠΌΡΠΊΠ²Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° `iptables` Π² Π²Π΅ΡΠΈΠ³ΠΈΡΠ΅ `DOCKER` ΠΈ `DOCKER-USER`, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΡΠ΅Π½ΡΠ²Π°Ρ ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° Π²Π΅ΡΠΈΠ³Π°ΡΠ° `INPUT` Π½Π° `ufw`. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΠΎΡΡ, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Ρ `-p`, Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° `ufw`. ΠΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΡΠΌ Π²Π΅ΡΠΈΠ³Π°ΡΠ° `DOCKER-USER` ΠΈΠ»ΠΈ Π΄Π° ΠΎΠ±Π²ΡΡΠΆΠ΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠΎΠ²Π΅ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (Π½Π°ΠΏΡ. `-p 127.0.0.1:8080:80`), ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠ½ΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ.
ΠΠ°ΠΊ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΡ CPU ΠΈ ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ?
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅: `docker run βmemory="512m" βcpus="1.5" my-image`. Π Compose Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΠ΅Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ ΠΊΠ»ΡΡΠ° `deploy.resources` (Compose V2) ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π½Π°ΠΉ-Π³ΠΎΡΠ½ΠΎ Π½ΠΈΠ²ΠΎ `mem_limit` ΠΈ `cpus`. ΠΠ΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π΅Π΄ΠΈΠ½ Π½Π΅ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅ΡΠΏΠΈ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° Ρ ΠΎΡΡΠ° ΠΈ Π΄Π° ΡΡΠΈΠ½Π΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π½Π° ΡΡΡΠΈΡ Ρ ΠΎΡΡ.
ΠΠΎΠ³Π° Π»ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌ Docker Π²ΡΡΡΠ΅ Π² Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (Docker-in-Docker)?
ΠΠ°, Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΡΠΈΠ»Π½ΠΎ ΠΎΠ±Π΅Π·ΠΊΡΡΠ°ΠΆΠ΅Π½ΠΎ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. Π§Π΅ΡΡΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° CI ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ Π΅ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Ρ ΠΎΡΡ Docker ΡΠΎΠΊΠ΅ΡΠ° (`-v /var/run/docker.sock:/var/run/docker.sock`) Π² CI ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π΄Π°Π²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Docker Π½Π° Ρ ΠΎΡΡΠ° β Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΡΠΈΡΠΊ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°. ΠΠΎ-Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ»Π°Π³Π° `βallow security.insecure` Π½Π° BuildKit ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ Kaniko ΠΈΠ»ΠΈ Buildah, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ OCI ΠΎΠ±ΡΠ°Π·ΠΈ Π±Π΅Π· Π½ΡΠΆΠ΄Π° ΠΎΡ Docker Π΄Π΅ΠΌΠΎΠ½.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ