БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Администрация

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 EnginePodmanLXC/LXDcontainerd (самостоятСлСн)
АрхитСктура Π½Π° Π΄Π΅ΠΌΠΎΠ½Π°Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΄Π΅ΠΌΠΎΠ½Π‘Π΅Π· Π΄Π΅ΠΌΠΎΠ½Π‘Π°Π·ΠΈΡ€Π°Π½ Π½Π° Π΄Π΅ΠΌΠΎΠ½Π‘Π°Π·ΠΈΡ€Π°Π½ Π½Π° Π΄Π΅ΠΌΠΎΠ½
ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π±Π΅Π· root ΠΏΡ€Π°Π²Π°Π”Π° (v20+)Π’Π³Ρ€Π°Π΄Π΅Π½Π°ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°Π”Π°
ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Docker ComposeΠ’Π³Ρ€Π°Π΄Π΅Π½Π°Π§Ρ€Π΅Π· `podman-compose`НСНС
OCI ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅Π”Π°Π”Π°ΠΠ΅ (LXC Ρ„ΠΎΡ€ΠΌΠ°Ρ‚)Π”Π°
Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с KubernetesΠ§Ρ€Π΅Π· CRI-dockerd shimΠ’Π³Ρ€Π°Π΄Π΅Π½ CRIНСВградСн CRI
ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Windows/macOSDocker 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 Π΄Π΅ΠΌΠΎΠ½.