Tworzenie kontenerów

Kontenery służą do uruchamiania aplikacji w kontenerze. Aplikacje instalujemy na naszym komputerze, ale w izolowanym, dedykowanym środowisku dostarczonym przez Dockera.

Obraz to paczka zawierająca biblioteki systemu bazowego. Np. może to być system CentOS, Ubuntu czy inny Debian, z zainstalowanym serwerem WWW. Dla projektu Docker powstało bogate repozytorium z obrazami, w którym użytkownicy mogą znaleźć coś dla siebie. Można tam także publikować swoje obrazy.

Interesujących Nas obrazów możemy szukać na dwa sposoby: przez interfejs WWW lub korzystając z interfejsu CLI.

Interfejs WWW:

Kontener z Postgresem zdj.1

Drugi sposób zawiera polecenie docker search, które pozwala w szybki sposób znaleźć coś dla siebie.

Kontener z Postgresem zdj.2
Warto zwrócić uwagę na kolumnę Official. Wartość [OK] oznacza, że obraz jest utrzymywany przez sprawdzony zespół i że jest to oficjalna dystrybucja tej aplikacji. Można użyć innych obrazów, ale nie będziemy mieli pewności, że wszystko będzie działało poprawnie.

Jeśli wejdziemy na stronę projektu mysql to możemy zobaczyć przez kogo projekt jest utrzymywany, jakie są wspierane wersje Dockera dla tego projektu, możemy znaleźć komendę do instalacji obrazu oraz zobaczyć, że obraz występuje w kilku wariantach (tagach). Mechanizm tagów używany jest przez twórców obrazów, aby można było pobierać obrazy w różnych wersjach (z różnymi funkcjonalnościami).Kontener z Postgresem zdj.3

Po wykonaniu poniższego polecenia, narzędzie pobierze obraz kontenera. Jeżeli nie dokleimy nazwy taga do nazwy obrazu to docker użyje domyślnej nazwy tagu (latest).

Kontener z Postgresem zdj.4

Sprawdzamy listę naszych obrazów:

Kontener z Postgresem zdj.5

W Dockerze używany jest system plików AUFS, dlatego obrazy składają się z warstw, które często są współdzielone między różnymi obrazami. Np. jeżeli kiedyś będziemy chcieli ściągnąć najnowszą wersję obrazu mysql, ściągnięte zostaną tylko te warstwy, których nie mamy lokalnie.

Uruchamianie obrazu

Do uruchamiania obrazów służy polecenie docker run. Polecenie te wykorzystuje wybrany obraz, dokłada do systemu plików dodatkową warstwę, która może być modyfikowana (warstwy wchodzące w skład obrazu nigdy nie są modyfikowane!) i nakazuje w ramach tak utworzonego nowego kontenera, wykonanie wybranego polecenia. By było łatwiej, twórcy obrazów często w konfiguracji ustalają domyślne polecenie (np. start serwera WWW), więc nie trzeba się o nie martwić.  Możemy teraz postawić pierwszy kontener z MySQL.

Możemy użyć następującej komendy:

Kontener z Postgresem zdj.6

Sprawdzamy, czy nasz kontener jest widoczny:

Kontener z Postgresem zdj.7

Ponieważ nie zrobiliśmy mapowania portów, nasz serwer mysql nie będzie widoczny ani w naszym komputerze hoście (jest to komputer, na którym uruchamiamy kontenery) ani w innych kontenerach. Zawsze możemy uruchomić basha na kontenerze oraz podpiąć jego konsolę, aby sprawdzić, czy kontener odpowiada. Jeśli jako rezultat zobaczymy wpis rozpoczynający się od root@id_kontenera, to znaczy, że kontener odpowiada na nasze pytania. Wpisujemyexit, aby zamknąć basha.

Kontener z Postgresem zdj.8Chcąc stworzyć trochę bardziej użyteczny kontener, przekierujemy porty z kontenera na hosta. Aby to zrobić musimy stworzyć kontener na nowo.

Kontener z Postgresem zdj.9

Poniższy błąd oznacza, że mamy już kontener o nazwie mysql1. Możemy stworzyć nowy (dodatkowy) kontener lub usunąć stary i stworzyć nowy.

Aby usunąć stary kontener i stworzyć nowy kontener, najpierw uruchamiamy polecenie wyświetlające nasze kontenery, aby znaleźć id naszego kontenera.

Jeśli kontener jest uruchomiony (a nasz jest), to musimy go zatrzymać za pomocą polecenia poniżej. Po słowie stop podajemy albo id_kontenera albo jego nazwę.

Następnie uruchamiamy polecenie, które usunie nasz kontener.

Na koniec sprawdzamy, czy nasz kontener został faktycznie usunięty.

Kontener z Postgresem zdj.10

Teraz możemy jeszcze raz wykonać wcześniejsze polecenie:

Dodatkowy parametr -p 9001:3306 otwiera port 9001 na hoście i przekierowuje na porty 3306 w kontenerze (3306 to domyślny port mysql). Możemy teraz zauważyć, że wpis w kolumnie porty wygląda inaczej niż wcześniej.

Kontener z Postgresem zdj.11

Mamy teraz kontener i przekierowane porty. Aby jednak móc podłączyć się do mysql z zewnątrz musimy skonfigurować jeszcze sam serwer bazodanowy.

Przechodzimy do konsoli Dockera za pomocą poniższego polecenia (musimy pamiętać, że nowy kontener ma nowe id):

Instalujemy w kontenerze VIM’a, który przydaje się przy edycji plików.

(W rzeczywistości kodu jest dużo więcej niż na zdjęciu!).

Czasami, aby móc łączyć się zdalnie z serwerem musimy wyedytować plik konfiguracyjny /etc/mysql/mysql.conf.d/mysqld.cnf lub /etc/mysql/my.cnf (zależy od wersji Ubuntu):

Odkomentowujemy bind-address i zmień domyślny adres 127.0.0.1 na 0.0.0.0. Jeśli takiego wpisu nie ma to dodajemy taki wpis do pliku:

Kontener z MySQL zdj.13

Logujemy się do mysql:

Podczas logowania zostajemy poproszeni o hasło. Po wpisaniu hasła logujemy się do MySQLa.

Kontener z Postgresem zdj.15

Musimy jeszcze nadać uprawnienia dla użytkownika root, aby mógł logować się z dowolnego hosta. Wykonujemy następujące polecenia:

Kontener z Postgresem zdj.14Aby zapisać zmiany, musimy zresetować kontener.

Klikamy 2x CRTL + D, aby wyjść z MySQL i konsoli kontenera.

Potem wpisujemy komendę.

Po tych wszystkich operacjach mamy już wstępnie skonfigurowany mysql.

Źródła

  • Repozytorium obrazów Dockera: https://registry.hub.docker.com/
  • Dokumentacja referencyjna CLI Dockera: http://docs.docker.com/reference/commandline/cli/

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *