Kako implementirati MySQL/MariaDB u Dockeru s trajnim pohranom podataka
Uvod
U ovom vodiču implementirate MySQL ili MariaDB bazu podataka u kontejneru koristeći Docker s trajnim pohranom podataka. Pokretanje baza podataka u kontejnerima pojednostavljuje implementaciju, kontrolu verzija i prenosivost između okruženja. Na kraju ovog vodiča imat ćete MySQL ili MariaDB instancu spremnu za produkciju koja radi u Dockeru s podacima sigurno pohranjenim izvan kontejnera.
Preduvjeti
Ciljana publika: Srednje iskusni sistem administratori
Procijenjeno vrijeme za završetak: ~30–45 minuta
Operativni sustav
- Ubuntu 24.04 LTS (testirano)
- Također kompatibilno s: Ubuntu 22.04 LTS, Debian 12 / 13
Softverski zahtjevi
- Docker 24.0.6 ili noviji
- Docker Compose v2 (uključen u moderne Docker instalacije)
Provjerite svoju verziju Dockera:
docker --version
Očekivani ishod: Docker version 24.0.6, build ed223bc
Provjerite verziju Docker Compose:
docker compose version
Očekivani ishod: Docker Compose version v5.1.0
Ako nemate instaliran Docker, instalirat ćete ga tijekom Koraka 1.
Hardverski zahtjevi
- Minimalno 2 GB RAM-a
- Najmanje 10 GB slobodnog prostora na disku
Mrežni zahtjevi
- Dostupan port 3306 (zadani MySQL/MariaDB port)
- Vatrozid konfiguriran da dopušta pristup samo ako su potrebne vanjske veze
Dozvole
- Korisnik koji nije root s
sudoprivilegijama - Korisnik dodan u
dockergrupu (preporučeno)
Pretpostavljeno znanje
- Osnovni Docker koncepti (slike, kontejneri, volumeni)
- Udobnost s radom u komandnoj liniji
Korak 1: Instalirajte i provjerite Docker
Ako Docker nije instaliran, instalirajte ga:
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
Omogućite i pokrenite Docker:
sudo systemctl enable docker
sudo systemctl start docker
Provjerite radi li Docker:
sudo systemctl status docker
Očekivani rezultat: Status Docker servisa pokazuje active (running).
Dodajte svog korisnika u docker grupu kako biste izbjegli korištenje sudo prilikom korištenja Dockera:
sudo usermod -aG docker <YOUR_USERNAME>
newgrp docker
Korak 2: Kreirajte direktorij za trajne podatke
Bind mount mapira direktorij s host sustava izravno u kontejner, čineći ga dostupnim unutar datotečnog sustava kontejnera.
Kreirajte direktorij za podatke baze podataka i postavite odgovarajuće dozvole:
mkdir -p ~/mysql-docker/data
chmod 750 ~/mysql-docker/data
Ovaj direktorij će pohraniti datoteke baze podataka izvan kontejnera.
Bez trajne pohrane, svi podaci baze podataka gube se kada se kontejner ukloni.
Korak 3: Kreirajte Docker Compose konfiguraciju
Navigirajte do svog projekt direktorija:
cd ~/mysql-docker
Kreirajte docker-compose.yml datoteku:
nano docker-compose.yml
Dodajte sljedeću konfiguraciju (primjer za 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 — ako preferirate MariaDB, koristite:
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
Važno: Nikada ne hardkodirajte stvarne lozinke u kontrolu verzija. Koristite varijable okruženja ili .env datoteku u produkciji. Zamijenite <YOUR_STRONG_USER_PASSWORD> i <YOUR_STRONG_ROOT_PASSWORD> s vašim sigurnim lozinkama.
Korak 4: Pokrenite kontejner baze podataka
Pokrenite:
docker compose up -d
Očekivani ishod:
- Docker preuzima sliku (ako već nije preuzeta)
- Kontejner se pokreće u odvojenom načinu rada
Provjerite status kontejnera:
docker ps
Očekivani ishod:
CONTAINER ID IMAGE STATUS PORTS abc123def456 mysql:8.0.36 Up 10 seconds 0.0.0.0:3306->3306/tcp
Korak 5: Provjerite funkcionalnost baze podataka
Povežite se s kontejnerom
Za MySQL kontejner izvršite:
docker exec -it mysql-server mysql -u root -p
Za MariaDB kontejner izvršite:
docker exec -it mariadb-server mysql -u root -p
Unesite svoju root lozinku.
Očekivani rezultat: Pojavljuje se MySQL shell prompt: mysql>
Provjerite baze podataka
SHOW DATABASES;
Trebali biste vidjeti:
- appdb
- information_schema
- mysql
- performance_schema
- sys
EXIT;
Testirajte postojanost podataka
Kreirajte testnu tablicu
docker exec -it mysql-server mysql -u root -p
Unutar MySQL shell-a unesite sljedeće naredbe:
USE appdb;
CREATE TABLE test_table (id INT PRIMARY KEY);
EXIT;
Zaustavite i uklonite kontejner
docker compose down
Ponovno pokrenite kontejner
docker compose up -d
Provjerite da li tablica još uvijek postoji
docker exec -it mysql-server mysql -u root -p
Unutar MySQL shell-a unesite sljedeće naredbe:
USE appdb;
SHOW TABLES;
Očekivani rezultat: test_table se pojavljuje. Ovo potvrđuje da trajna pohrana radi.
Korak 6: Osigurajte implementaciju
Ograničite vanjski pristup
Ako je pristup bazi podataka potreban samo interno, izmijenite portove u docker-compose.yml:
ports: - "127.0.0.1:3306:3306"
Ponovno pokrenite:
docker compose down
docker compose up -d
Važno: Izbjegavajte javno izlaganje porta 3306 osim ako nije apsolutno potrebno.
Koristite .env datoteku
Kreirajte .env:
nano .env
Primjer:
MYSQL_ROOT_PASSWORD=<YOUR_STRONG_ROOT_PASSWORD> MYSQL_PASSWORD=<YOUR_STRONG_USER_PASSWORD>
Referencirajte u docker-compose.yml:
environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Verifikacija
Možete potvrditi da sve radi ispravno:
- Pokretanjem
docker ps— kontejner je Up - Povezivanjem putem MySQL CLI — prijava uspijeva
- Ponovnim pokretanjem kontejnera — podaci ostaju
- Provjerom logova:
docker logs mysql-server
Očekivani unosi u logovima: "ready for connections".
Vraćanje promjena
Za zaustavljanje i uklanjanje kontejnera:
docker compose down
Za uklanjanje trajnih podataka:
Važno: Ovo trajno briše sve podatke baze podataka.
rm -rf ~/mysql-docker/data
Za deinstalaciju Dockera:
sudo apt remove docker-ce docker-compose-plugin -y
Rješavanje problema
Kontejner se ne pokreće
Provjerite logove:
docker logs mysql-server
Uobičajeni uzroci:
- Slaba lozinka odbijena
- Port 3306 već u upotrebi
Provjerite korištenje porta:
sudo ss -tulnp | grep 3306
Greške s dozvolama
Ako vidite greške s odbijenim dozvolama:
sudo chown -R 999:999 ~/mysql-docker/data
999 je obično ID korisnika MySQL kontejnera.
Zaključak i sljedeći koraci
Uspješno ste implementirali MySQL ili MariaDB u Dockeru s trajnom pohranom. Baza podataka sada radi u izoliranom kontejneru dok sigurno pohranjuje podatke na host sustavu.
Sljedeći koraci:
- Konfigurirajte automatske sigurnosne kopije
- Implementirajte replikaciju za visoku dostupnost
- Integrirajte s aplikacijskim kontejnerima
- Dodajte nadzor s Prometheusom i Grafanom