Kako namestiti MySQL/MariaDB v Dockerju s trajnim shranjevanjem podatkov | INTROSERV
EUR
european

EUR

usa

USD

Slovenia Sl
Ex. VAT Ex. VAT 0%

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

Tip

Č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 sudo privilegiji
  • 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.

Info

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

Info

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

Info

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:

Info

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

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