Tag Archive for: ubuntu

Instalacja MySQL i phpMyAdmin na Ubuntu 16.04 przy użyciu Dockera

Poniżej krótki tutorial pokazujący, jak zainstalować MySQL w kontenerze Dockera i połączyć z phpMyAdmin.
Instrukcja została stworzona na systemie Ubuntu 16.04.
Sprawdzamy, jakie aktualnie obrazy mamy lokalnie.

$ sudo docker images

Docker i phpMyAdmin zdj.1
Teraz pobieramy obraz mysql. Ja pobieram ostatnią wersję:

$ sudo docker pull mysql

Docker i phpMyAdmin zdj.2
Następnie pobieramy obraz phpmyadmin:

$ sudo docker pull phpmyadmin/phpmyadmin

Docker i phpMyAdmin zdj.3
Tworzymy nowy kontener z obrazem mysql. Jako hasło ja podaję: 1q2w3e4r:

$ sudo docker run --name demomysql -e MYSQL_ROOT_PASSWORD=1q2w3e4r -d mysql

Docker i phpMyAdmin zdj.4
Sprawdzamy, czy kontener z obrazem mysql został utworzony i czy jest aktywny:

$ sudo docker ps

Docker i phpMyAdmin zdj.5
Teraz dodajemy kontener z obrazem phpmyadmin i łączymy go z naszym kontenerem z mysql’em:

$ sudo docker run --name demophpmyadmin -d --link demomysql:db -p 8080:80 phpmyadmin/phpmyadmin

Docker i phpMyAdmin zdj.6
Sprawdzamy, czy nasz kontener z phpmyadmin jest aktywny i jaki ma przypisany port:

$ sudo docker ps

Docker i phpMyAdmin zdj.7
Uruchamiamy basha na kontenerze z obrazem mysql:

$ sudo docker exec -it demomysql bash

Następnie logujemy się do mysql’a jako użytkownik root:

mysql -u root -p

Po tym poleceniu bash poprosi Nas o podanie hasła.
Hasło możemy podać od razu w poleceniu:

mysql -u root -p 1q2w3e4r

Docker i phpMyAdmin zdj.8
Aktualizujemy użytkownika root i ustawiamy mu hasło:

ALTER USER root IDENTIFIED WITH mysql_native_password BY '1q2w3e4r';

Docker i phpMyAdmin zdj.9
Wylogowujemy się z basha i z kontenera demomysql wpisując podwójnie polecenie exit lub 2 razy używając skrótu klawiszowego ctrl + d:

exit

Docker i phpMyAdmin zdj.10
Uruchamiamy wybraną przez Nas przeglądarkę i wpisujemy w pasek URL następujące dane:

0.0.0.0:8080

Docker i phpMyAdmin zdj.11

W sekcji Log in podajemy poniższe dane i klikamy przycisk Go:
Username: root

Password: 1q2w3e4r
Docker i phpMyAdmin zdj.12
Po podaniu prawidłowej nazwy użytkownika i hasła mamy dostęp do naszego serwera:
Docker i phpMyAdmin zdj.13
Teraz możemy wykonywać już dowolne operacje, np. stworzyć nową bazę danych:
Docker i phpMyAdmin zdj.14
Po wykonaniu wszystkich kroków mamy połączony serwer MySQL z phpMyAdmin, a to wszystko zrobione na kontenerach Dockera.

Uruchomianie kontenera z serwerem MySQL na Dockerze

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.

$ sudo docker search mysql 
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).

$ sudo docker pull mysql 

Kontener z Postgresem zdj.4
Sprawdzamy listę naszych obrazów:

$ sudo docker images

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:

$ sudo docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=H@sl0MySQL -d mysql
Kontener z Postgresem zdj.6

Sprawdzamy, czy nasz kontener jest widoczny:

$ sudo docker ps

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.

$ sudo docker exec -it 5aa3a769250d /bin/bash

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.

$ sudo docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=H@sl0MySQL -d -p 9001:3306 mysql

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.

$ sudo docker ps

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ę.

$ sudo docker stop mysql1

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

$ sudo docker rm 5aa3a769250d

Na koniec sprawdzamy, czy nasz kontener został faktycznie usunięty.
Kontener z Postgresem zdj.10
Teraz możemy jeszcze raz wykonać wcześniejsze polecenie:

$ sudo docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=H@sl0MySQL -d -p 9001:3306 mysql 

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):

$ sudo docker exec -it e0f6e793d78f /bin/bash

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

$ sudo apt-get update
$ sudo apt-get install vim

(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):

vim /etc/mysql/mysql.conf.d/mysqld.cnf

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:

bind-address = 0.0.0.0

Kontener z MySQL zdj.13
Logujemy się do mysql:

mysql -u root -p

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:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

Kontener z Postgresem zdj.14Aby zapisać zmiany, musimy zresetować kontener.
Klikamy 2x CRTL + D, aby wyjść z MySQL i konsoli kontenera.
Potem wpisujemy komendę.

$ sudo docker restart e0f6e793d78f 

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/

Instalacja Dockera na serwerze Ubuntu

Instalacja Dockera na Ubuntu

Instrukcja, jak zainstalować serwer Ubuntu dla Dockera na maszynie wirtualnej Azure znajduje się tutaj.

Otwieramy maszynę wirtualną z zainstalowanym serwerem Ubuntu i zapisujemy adres IP (klikamy link dockerdemo-ip). Możemy przypisać opcjonalnie etykietę nazwy DNS i/lub zamienić adres IP na statyczny (zakładka Konfiguracja).

Docker Ubuntu Azure zdj.20

Możemy się połączyć z serwerem Ubuntu za pomocą poleceń ssh:

Uwierzytelnianie SSH:

ssh username@IPAddress -i ~/privatekey

Password Authentication:

ssh username@IPAddress

Docker Ubuntu Azure zdj.21

Usunięcie innych instalacji Dockera

Usuwamy Dockera (jeśli wcześniej był zainstalowany):

$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get remove docker docker-engine docker.io containerd runc

Docker Ubuntu Azure zdj.22
Aktualizujemy indeksy pakietu apt:

$ sudo apt-get update

Docker Ubuntu Azure zdj.27

Instalujemy pakiety, aby pozwolić apt na używanie repozytoriów poprzez HTTPs. Jeśli wcześniej już instalowaliśmy jakieś pakiety, to będzie sprawdzona ich zgodność z najnowszymi wersjami.

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

Docker Ubuntu Azure zdj.23

Dodajemy oficjalny klucz GPG Dockera:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Docker Ubuntu Azure zdj.24
Weryfikujemy, że teraz mamy klucz z  fingerprintem 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, poprzez przeszukanie ostatnich 8 znaków.

$ sudo apt-key fingerprint 0EBFCD88

Docker Ubuntu Azure zdj.26
Używamy następującego polecenia, aby skonfigurować stabilne (ang. stable) repozytorium. Zawsze potrzebujemy stabilnego repozytorium, nawet jeśli chcemy zainstalować kompilacje (ang. builds) z repozytoriami brzegowym (ang. edge) lub testowym (ang. test). Aby dodać repozytoria brzegowe lub testowe, dodajemy słowo edge lub test (lub oba) po słowie stable w poleceniach poniżej.

Ważne: Polecenie lsb_release -cs poniżej zwraca nazwę naszej dystrybucji Ubuntu, na przykład xenial. Czasami, w dystrybucji takiej jak Linux Mint, możemy potrzebować zmienić $(lsb_release -cs)na naszą macierzystą dystrybucję Ubuntu. Na przykład, jeśli korzystamy z Linux Mint Tessa, możemy użyć bionic.

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Ważne: Począwszy od Dockera 17.06, stabilne (ang. stable) wydania są również przekazywane do repozytorów brzegowych (ang. edge) i testowych (ang. test).

Docker Ubuntu Azure zdj.28

Aktualizujemy raz jeszcze:

$ sudo apt-get update

Docker Ubuntu Azure zdj.29

Instalujemy ostatnią wersję Docker CE lub przechodzimy do następnego kroku, aby zainstalować specyficzną wersję:

$ sudo apt-get install docker-ce

Docker Ubuntu Azure zdj.30
To install a specific version of Docker CE, list the available versions in the repo, then select and install:
Aby zainstalować konkretną wersję programu Docker CE, wyświetlamy listę dostępnych wersji w repozytorium, a następnie wybieramy i instalujemy:
a. Sprawdzamy wersje dostępne w repozytorium:

$ apt-cache madison docker-ce

Docker Ubuntu Azure zdj.32
b. Instalujemy konkretną wersję, używając ciągu wersji z drugiej kolumny, na przykład: 5:18.09.1~3-0~ubuntu-xenial.

$ sudo apt-get install docker-ce=<VERSION_STRING>

Sprawdzamy, czy Docker CE jest poprawnie zainstalowany, uruchamiając obraz hello-world.

$ sudo docker run hello-world

Powininniśmy zobaczyć rezultat podobny do poniższego, jeśli wszystko działa poprawnie:

Docker Ubuntu Azure zdj.31

Tworzenie maszyny wirtualnej na Azurze z serwerem Ubuntu

Azure Docker Ubuntu zdj.1
Poniżej znajduje się instrukcja, jak stworzyć na Azurze maszynę wirtualną z serwerem Ubuntu, na której można zainstalować Dockera.

Stworzenie nowej maszyny wirtualnej z serwerem Ubuntu

Logujemy się na portal Azure i klikamy przycisk Utwórz zasób. W sekcji Popularne wybieramy Ubuntu Server 18.04 VM lub wpisujemy Ubuntu w pole wyszukiwania.
Docker Ubuntu Azure zdj.2
Podajemy niezbędne informacje:

  • wybieramy subscrypcję,
  • używamy istniejącej lub tworzymy nową grupę zasobów,
  • podajemy nazwę maszyny wirtualnej,
  • wybieramy region, w którym nasza maszyna ma być przechowywana,
  • opcjonalnie wybieramy opcje dostępności,
  • wybieramy obraz Ubuntu (ja mam dostępne Ubuntu Server 16.04 LTS i Ubuntu Server 18.04 LTS),
  • rozmiar maszyny.

Docker Ubuntu Azure zdj.3
Następnie tworzymy konto dla administratora i wybieramy preferowany tryb uwierzytelniania. Jeśli wybierzemy SSH to musimy wygenerować publiczny klucz SSH.

Stworzenie publicznego klucza SSH

Otwieramy Terminal (na Mac’u) lub Git Bash (na Windowsie) i wpisujemy polecenie:

ssh-keygen -t rsa -b 4096 -C "twoj_email@domena.com".

Kopiujemy publiczny klucz przy użyciu poleceń:

Mac:

pbcopy < ~/.ssh/dockerdemo.pub

Git Bash:

clip < ~/dockerdemo.pub

Docker Ubuntu Azure zdj.4
Podajemy nazwę użytkownika.

Wklejamy skopiowany klucz w pole Klucz publiczny SSH.

Docker Ubuntu Azure zdj.5
Możemy też wybrać uwierzytelnianie za pomocą hasła.
Docker Ubuntu Azure zdj.6

Reguły portów wejściowych

Wybieramy, które porty sieciowe maszyny wirtualnej są dostępne z publicznego Internetu. Na karcie Sieć możemy określić bardziej lub mniej ograniczony dostęp sieciowy.
Docker Ubuntu Azure zdj.7
Mamy też możliwość na wskazanie wybranych portów spośród kilku dostępnych opcji. Ja do celów demo wybieram wszystkie porty.
Docker Ubuntu Azure zdj.8
Po wybraniu portów pojawia się ostrzeżenie o tym, że porty będą widoczne z poziomu Internetu.
Po wybraniu portów klikamy przycisk Następny: Dyski.

DYSKI

Maszyny wirtualne platformy Azure mają jeden dysk systemu operacyjnego i dysk tymczasowy na potrzeby przechowywania krótkoterminowego. Możemy do tych maszyn dołączać dodatkowe dyski danych. Rozmiar maszyny wirtualnej określa typ magazynu, którego można używać oraz liczbę dozwolonych dysków danych. Mamy tutaj możliwość wyboru OPCJI DYSKU z trzech wariantów: SSD w warstwie Premium, SSD w warstwie Standardowa i HDD w warstwie Standardowa. Jeśli istnieje taka potrzeba możemy dodać i skonfigurować dodatkowe dyski danych dla maszyny wirtualnej lub dołączyć istniejące dyski w sekcji DYSKI Z DANYMI . Ta maszyna wirtualna zawiera również dysk tymczasowy.
W sekcji ZAAWANSOWANE możemy dodać usługę Managed Disks.
Docker Ubuntu Azure zdj.9
Klikamy przycisk Następny: Sieć.

SIEĆ

Na zakładce Sieć możemy zdefiniować łączność sieciową dla swojej maszyny wirtualnej, konfigurując ustawienia karty sieciowej. Możemy kontrolować porty oraz łączność przychodzącą i wychodzącą za pomocą reguł grupy zabezpieczeń lub umieścić maszynę za istniejącym rozwiązaniem do równoważenia obciążenia.
Docker Ubuntu Azure zdj.10
Możemy też zdecydować, czy nasza maszyna będzie używana do równoważenia obciążenia.
Docker Ubuntu Azure zdj.11
Klikamy przycisk Następny: Zarządzanie.

Zarządzanie

Zakładka Zarządzanie pozwala na skonfigurowanie opcji monitorowania i zarządzania dla maszyny wirtualnej. Możemy wybrać, czy chcemy, aby maszyna była zamykana automatycznie o określonej godzinie.Jeśli chcemy otrzymywać powiadomienia o zamknięciu maszyny, podajemy adres email. Domyślnie powiadomienia takie są wyłączone.

Docker Ubuntu Azure zdj.12
Aby chronić maszynę wirtualną przed przypadkowym usunięciem i uszkodzeniem danych, zalecane jest skonfigurowanie kopii zapasowej na tej maszynie wirtualnej. Kopia zapasowa maszyny wirtualnej będzie zapisywana w magazynie usługi Recovery Services zgodnie ze skonfigurowanymi zasadami, a opłaty za nią będą naliczane zgodnie z cennikiem kopii zapasowych.
 Docker Ubuntu Azure zdj.13
Klikamy przycisk Następny: Konfiguracja gościa.
Docker Ubuntu Azure zdj.14
Klikamy przycisk Następny: Tagi.
Docker Ubuntu Azure zdj.15
Klikamy przycisk Następny: Przeglądanie i tworzenie. Sprawdzamy, czy weryfikacja przeszła pomyślnie i klikamy przycisk Utwórz.
Docker Ubuntu Azure zdj.16
Docker Ubuntu Azure zdj.17
Docker Ubuntu Azure zdj.18
Sprawdzamy, czy wdrożenie zakończyło się pomyślnie.
Docker Ubuntu Azure zdj.19

Instrukcję, jak na takiej maszynie dodać Dockera, znajduje się w tym wpisie.