Kako implementirati MySQL/MariaDB u Dockeru s trajnim pohranom podataka | INTROSERV
EUR
european

EUR

usa

USD

Croatia Hr
Ex. VAT Ex. VAT 0%

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

Tip

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 sudo privilegijama
  • Korisnik dodan u docker grupu (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.

Info

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

Info

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

Info

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:

Info

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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA