Docker ir docker compose diegimas VPS serveryje
Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):
curl -sSL https://cp.lv/scripts/ustanovit-docker-vps.sh | sudo bash…arba su wget:
wget -qO- https://cp.lv/scripts/ustanovit-docker-vps.sh | sudo bashSkripto turinys ustanovit-docker-vps.sh:
#!/usr/bin/env bash
set -e
export DEBIAN_FRONTEND=noninteractive
# 1. Remove old versions
sudo apt-get remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true
# 2. Official Docker repository
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 3. Install Docker Engine and plugins
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
# 4. Run without sudo (takes effect after a new SSH login)
sudo usermod -aG docker $USER
# 5. Cap container log size
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
sudo systemctl restart docker
# 6. Verify
sudo docker run hello-world
docker compose version
echo "Docker is ready. Log in over SSH again to use it without sudo."
Docker supakuoja programą ir jos priklausomybes į konteinerį, kuris vienodai veikia bet kuriame serveryje. Žemiau — Docker Engine ir docker compose papildinio diegimas iš oficialios saugyklos Ubuntu 22.04/24.04. Nenaudokite paketo docker.io iš standartinės Ubuntu saugyklos — jis dažnai pasenęs.
1 žingsnis. Senų versijų pašalinimas
sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null
sudo apt update
2 žingsnis. Oficialios Docker saugyklos prijungimas
sudo apt install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3 žingsnis. Docker Engine ir papildinių diegimas
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin -y
Įjunkite automatinį paleidimą ir patikrinkite veikimą:
sudo systemctl enable --now docker
sudo docker run hello-world
Jei pasirodė „Hello from Docker!“ — variklis veikia.
4 žingsnis. Docker paleidimas be sudo
Pridėkite savo vartotoją į grupę docker, kad prieš kiekvieną komandą nereikėtų rašyti sudo:
sudo usermod -aG docker $USER
newgrp docker
docker ps
Grupės pakeitimas įsigalioja po naujo prisijungimo prie SSH sesijos.
5 žingsnis. docker compose patikra
Šiuolaikiniame Docker compose yra pokomandė, o ne atskiras dvejetainis failas:
docker compose version
Sukurkite paprastą steką. Failas docker-compose.yml:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
restart: unless-stopped
volumes:
- ./site:/usr/share/nginx/html:ro
Paleidimas ir patikra:
mkdir site && echo "<h1>It works</h1>" > site/index.html
docker compose up -d
curl http://localhost:8080
Sustabdyti ir pašalinti steką:
docker compose down
Naudingos kasdienės komandos
| Užduotis | Komanda |
|---|---|
| Konteinerių sąrašas | docker ps -a |
| Serviso žurnalai | docker compose logs -f web |
| Atnaujinti atvaizdus | docker compose pull && docker compose up -d |
| Išvalyti šiukšles | docker system prune -a |
| Disko naudojimas | docker system df |
Atnaujinimai ir saugumas
- Apribokite žurnalų dydį, kad konteineriai neužpildytų disko. Atidarykite failą
/etc/docker/daemon.jsonredaktoriuje:
sudo nano /etc/docker/daemon.json
Failo turinys:
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
Arba sukurkite visą failą viena komanda — nukopijuokite ir įklijuokite į konsolę:
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
Po pakeitimo: sudo systemctl restart docker.
- Be reikalo neskelbkite duomenų bazių prievadų į išorę (
5432,3306) — palikite juos vidiniame compose tinkle. - Reguliariai atnaujinkite atvaizdus: pažeidžiamumai dažniausiai slypi pasenusiose versijose.
Dažni klausimai
Kuo skiriasi docker-compose nuo docker compose?
Senasis docker-compose (su brūkšneliu) — atskiras Python dvejetainis failas v1, nebepalaikomas. Naujasis docker compose (v2 papildinys) diegiamas kartu su varikliu ir yra rekomenduojamas.
Ar Docker reikia swap? Serveryje su nedideliu RAM kiekiu swap padeda ištverti atvaizdų kūrimo pikus. Paprastai užtenka 1–2 GB swap.
Kaip automatiškai paleisti konteinerius po perkrovimo?
Nurodykite restart: unless-stopped compose faile ir įsitikinkite, kad Docker servisas įjungtas: systemctl is-enabled docker.
Docker užėmė visą diską — kaip išvalyti?
docker system prune -a pašalins nenaudojamus atvaizdus, konteinerius ir tinklus. Tomai šalinami vėliavėle --volumes (atsargiai su duomenimis).
Docker mėgsta greitą diską ir atsargą atminties kūrimo procesams. Tinkamas konfigūracijas rasite puslapyje VPS serverio nuoma, o konteinerių projektams rinkitės Docker VPS.