Docker to bardzo fajne narzędzie. Jednym z przypadków użycia jest budowanie aplikacji w oparciu o architekturę mikroserwisów. Zobacz jak chce wykorzystać dobrodziejstwa dockera w swoim projekcie.
Docker w akcji
Każda aplikacji będzie miała osobną bazę danych. Obecna aplikacja korzysta MySQL, dlatego też właśnie na nim się skupię. Za pomocą komendy poniżej zaciągam oficjalny obraz dockera z MySQL.
sudo docker pull mysql
Chwilę potrwa ściągniecie wszystkich zależności.
Teraz mogę postawić pierwszy kontener z MySQL.
Najprostsza komenda, która to zrobi to:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
my-secret-pw zastępujemy oczywiście swoim hasłem dla roota
Masz kontener i co teraz?
W sumie nic, nie zrobiłeś mapowania portów, więc ten serwer mysql nie będzie widoczny ani w twoim komputerze host (komputer na którym uruchamiasz kontenery) ani w innych kontenerach. Możesz jednak odpalić basha na kontenerze oraz podpiąć jego konsole i sprawdzić, że serwer rzeczywiście działa.
sudo docker exec -it id_kontenera /bin/bash
Chcąc stworzyć trochę bardziej użyteczny kontener, przekieruj porty z kontenera na hosta. Aby to zrobić musisz stworzyć kontener na nowo.
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 9001:3306 mysql
dodałem -p 9001:3306 mówi to tyle, że otwórz port 9001 na hoście i przekieruj na porty 3306 w kontenerze (3306 to domyślny port mysql).
Masz teraz kontener i przekierowane porty. Aby jednak móc podłączyć się do mysql z zewnątrz musisz skonfigurować jeszcze sam serwer bazodanowy.
Przejdź do konsoli dockera.
sudo docker exec -it id_kontenera /bin/bash
Zainstaluj w kontenerze VIM’a, przyda się do edycji.
apt-get update apt-get install vim
Edytuj plik /etc/mysql/my.cnf
vim /etc/mysql/my.cnf
Odkomentuj bind-address i zmień na:
bind-address = 0.0.0.0
Zaloguj się do mysql:
mysql -u root -p
Zostaniesz poproszony o hasło.
Musisz jeszcze dać uprawnienia dla użytkownika root aby mógł logować się z dowolnego hosta. Wykonaj:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
To już prawie wszystko. Musisz jeszcze zresetować kontener.
2x CRTL + D aby wyjść z MySQL i konsoli kontenera
sudo docker restart id-kontenera
Powinno już wszystko działać. Jednak ja głowiłem się jeszcze przez godzinę bo jednak mi nie działało. Na hoście próbowałem się zalogować do mysql w taki sposób:
mysql -u root -P 9001 -p
Podawałem poprawne hasło i nic. Nie wiem jeszcze czemu ale zadziało dopiero, gdy wpisałem:
mysql -u root -P 9001 -p -h lokalne-ip-maszyny

Software Developer | .NET and Angular enthusiast | 3D Printing fanatic