Kako namestiti MySQL/MariaDB v Dockerju s trajnim shranjevanjem podatkov
Uvod
V tem vodiču boste uporabili Docker za namestitev MySQL ali MariaDB baze podatkov v kontejnerju z vztrajnim shranjevanjem podatkov. Zagon baz podatkov v kontejnerjih poenostavi namestitev, nadzor različic in prenosljivost med okolji. Do konca tega vodiča boste imeli produkcijsko pripravljeno instanco MySQL ali MariaDB, ki teče v Dockerju, z varno shranjenimi podatki zunaj kontejnerja.
Predpogoji
Ciljna publika: Sistem administratorji s srednjim znanjem
Ocenjen čas za dokončanje: ~30–45 minut
Operacijski sistem
- Ubuntu 24.04 LTS (preizkušeno)
- Prav tako združljivo z: Ubuntu 22.04 LTS, Debian 12 / 13
Programske zahteve
- Docker 24.0.6 ali novejši
- Docker Compose v2 (vključen v sodobne namestitve Dockerja)
Preverite različico Dockerja:
docker --version
Pričakovani izhod: Docker version 24.0.6, build ed223bc
Preverite različico Docker Compose:
docker compose version
Pričakovani izhod: Docker Compose version v5.1.0
Če Docker ni nameščen, ga boste namestili v 1. koraku.
Strojne zahteve
- Najmanj 2 GB RAM
- Vsaj 10 GB prostega prostora na disku
Mrežne zahteve
- Na voljo mora biti vrata 3306 (privzeta vrata za MySQL/MariaDB)
- Požarni zid mora biti nastavljen tako, da omogoča dostop le, če so potrebne zunanje povezave
Dovoljenja
- Uporabnik brez root pravic z
sudoprivilegiji - Uporabnik dodan v skupino
docker(priporočeno)
Predznanje
- Osnovni koncepti Dockerja (slike, kontejnerji, volumni)
- Udobje pri delu z ukazno vrstico
Korak 1: Namestitev in preverjanje Dockerja
Če Docker ni nameščen, ga namestite:
sudo apt update && sudo apt upgrade -y && sudo apt install curl
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
sudo apt install docker-ce docker-compose-plugin -y
Omogočite in zaženite Docker:
sudo systemctl enable docker
sudo systemctl start docker
Preverite, ali Docker deluje:
sudo systemctl status docker
Pričakovani rezultat: Stanje storitve Docker prikazuje active (running).
Dodajte svojega uporabnika v skupino docker, da se izognete uporabi sudo pri uporabi Dockerja:
sudo usermod -aG docker <YOUR_USERNAME>
newgrp docker
Korak 2: Ustvarite vztrajno podatkovno mapo
Bind mount preslika mapo iz gostiteljskega sistema neposredno v kontejner, kar omogoča dostop znotraj datotečnega sistema kontejnerja.
Ustvarite mapo za podatke baze podatkov in nastavite ustrezna dovoljenja:
mkdir -p ~/mysql-docker/data
chmod 750 ~/mysql-docker/data
Ta mapa bo shranjevala datoteke baze podatkov zunaj kontejnerja.
Brez vztrajnega shranjevanja se vsi podatki baze podatkov izgubijo, ko je kontejner odstranjen.
Korak 3: Ustvarite konfiguracijo Docker Compose
Pojdite v svojo projektno mapo:
cd ~/mysql-docker
Ustvarite datoteko docker-compose.yml:
nano docker-compose.yml
Dodajte naslednjo konfiguracijo (primer MySQL):
services: mysql: image: mysql:8.0.36 container_name: mysql-server restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MYSQL_DATABASE: appdb MYSQL_USER: appuser MYSQL_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql
Alternativa za MariaDB — če raje uporabljate MariaDB, uporabite:
services: mariadb: image: mariadb:11.3 container_name: mariadb-server restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MARIADB_DATABASE: appdb MARIADB_USER: appuser MARIADB_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql
Pomembno: Nikoli ne shranjujte pravih gesel v nadzor različic. Uporabite okoljske spremenljivke ali datoteko .env v produkciji. Zamenjajte <YOUR_STRONG_USER_PASSWORD> in <YOUR_STRONG_ROOT_PASSWORD> z vašimi varnimi gesli.
Korak 4: Zaženite kontejner baze podatkov
Zaženite:
docker compose up -d
Pričakovani izhod:
- Docker prenese sliko (če še ni prenesena)
- Kontejner se zažene v načinu v ozadju
Preverite stanje kontejnerja:
docker ps
Pričakovani izhod:
CONTAINER ID IMAGE STATUS PORTS abc123def456 mysql:8.0.36 Up 10 seconds 0.0.0.0:3306->3306/tcp
Korak 5: Preverite funkcionalnost baze podatkov
Povežite se s kontejnerjem
Za MySQL kontejner izvedite:
docker exec -it mysql-server mysql -u root -p
Za MariaDB kontejner izvedite:
docker exec -it mariadb-server mysql -u root -p
Vnesite svoje root geslo.
Pričakovani rezultat: Pojavi se MySQL ukazni poziv: mysql>
Preverite baze podatkov
SHOW DATABASES;
Videti bi morali:
- appdb
- information_schema
- mysql
- performance_schema
- sys
EXIT;
Preizkusite vztrajnost podatkov
Ustvarite testno tabelo
docker exec -it mysql-server mysql -u root -p
Znotraj MySQL ukazne vrstice vnesite naslednje ukaze:
USE appdb;
CREATE TABLE test_table (id INT PRIMARY KEY);
EXIT;
Ustavite in odstranite kontejner
docker compose down
Ponovno zaženite kontejner
docker compose up -d
Preverite, ali tabela še vedno obstaja
docker exec -it mysql-server mysql -u root -p
Znotraj MySQL ukazne vrstice vnesite naslednje ukaze:
USE appdb;
SHOW TABLES;
Pričakovani rezultat: test_table se pojavi. To potrjuje, da vztrajno shranjevanje deluje.
Korak 6: Zavarujte namestitev
Omejite zunanji dostop
Če je dostop do baze podatkov potreben le interno, spremenite vrata v docker-compose.yml:
ports: - "127.0.0.1:3306:3306"
Ponovno zaženite:
docker compose down
docker compose up -d
Pomembno: Izogibajte se javnemu izpostavljanju vrat 3306, razen če je to nujno potrebno.
Uporabite datoteko .env
Ustvarite .env:
nano .env
Primer:
MYSQL_ROOT_PASSWORD=<YOUR_STRONG_ROOT_PASSWORD> MYSQL_PASSWORD=<YOUR_STRONG_USER_PASSWORD>
Sklic v docker-compose.yml:
environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Preverjanje
Preverite, ali vse deluje pravilno, tako da:
- Zaženete
docker ps— kontejner je Up - Povežete se prek MySQL CLI — prijava uspe
- Ponovno zaženete kontejner — podatki ostanejo
- Preverite dnevnike:
docker logs mysql-server
Pričakovani vnosi v dnevnik: "ready for connections".
Vračanje sprememb
Za ustavitev in odstranitev kontejnerja:
docker compose down
Za odstranitev vztrajnih podatkov:
Pomembno: To trajno izbriše vse podatke baze podatkov.
rm -rf ~/mysql-docker/data
Za odstranitev Dockerja:
sudo apt remove docker-ce docker-compose-plugin -y
Odpravljanje težav
Kontejner se ne zažene
Preverite dnevnike:
docker logs mysql-server
Pogosti vzroki:
- Zavrnjeno šibko geslo
- Vrata 3306 so že v uporabi
Preverite uporabo vrat:
sudo ss -tulnp | grep 3306
Napake dovoljenj
Če vidite napake zaradi zavrnjenih dovoljenj:
sudo chown -R 999:999 ~/mysql-docker/data
999 je običajno uporabniški ID MySQL kontejnerja.
Zaključek in naslednji koraki
Uspešno ste namestili MySQL ali MariaDB v Dockerju z vztrajnim shranjevanjem. Baza podatkov zdaj teče v izoliranem kontejnerju, medtem ko varno shranjuje podatke na gostiteljskem sistemu.
Naslednji koraki:
- Konfigurirajte avtomatizirane varnostne kopije
- Implementirajte replikacijo za visoko razpoložljivost
- Integrirajte z aplikacijskimi kontejnerji
- Dodajte nadzor z uporabo Prometheus in Grafana