Software Development

Docker: kontener, udostępnianie portów

Marzec 1, 2016 0
Podziel się:

Zakres funkcjonalności kontenera powinien być ograniczony do niezbędnego minimum. W konsekwencji już przy próbie zbudowania prostego systemu informatycznego stajemy przed koniecznością wymiany informacji pomiędzy kontenerami. Jednym ze sposób realizacji tej potrzeby jest łączenie kontenerów i udostępnianie ich portów. W tym wpisie zostanie przedstawiony sposób udostępniania portów pomiędzy kontenerem a system operacyjnym gospodarza oraz pomiędzy kontenerami.

Ten wpis jest częścią serii wpisów o Dockerze. Jeżeli jakieś pojęcie jest używane bez wyjaśnienia to prawdopodobnie zostało wprowadzone w jednym z wcześniejszych wpisów.

Połączenie kontener – system gospodarza

Praca nad wieloma projektami wymaga korzystania z usług, które czasem realizują podobne funcjonalności, np. mysql, postgres, redis, memcache, uwsgi, gunicorn, nginx, apache. Poza tym różne projekty mogą wymagać rożnych wersji tych samych usług. Problem nagromadzenia usług oraz konfliktów ich wersji można rozwiązać korzystając z odseparowanego środowiska projektu w wirtualnej maszynie lub kontenerach Dockera.

Stwórzmy dwa kontenery bazy danych postgres jeden w wersji 9.0 i drugi w wersji 9.5. W obu kontenerach postgres działa na porcie 5432. Za pomocą opcji -p przekierujemy porty 5432 kontenerów na porty 9000 i 9500 systemu gospodarza.

docker run -d --name="postgres-container-9.0" -p 9000:5432 postgres:9.0
docker run -d --name="postgres-container-9.5" -p 9500:5432 postgres:9.5

Za pomocą klienta postgresa zainstalowanego w systemie gospodarza dla każdego kontenera:

  • sprawdźmy wersje działającego w nim serwera bazy danych,
  • stwórzmy jedną bazę danych,
  • wyświetlmy listę dostępnych baz.
psql -U postgres -h localhost -p 9000 -c"select version()"
psql -U postgres -h localhost -p 9000 -c"CREATE DATABASE docker90"
psql -U postgres -h localhost -p 9000 -c"\list"
psql -U postgres -h localhost -p 9500 -c"select version()"
psql -U postgres -h localhost -p 9500 -c"CREATE DATABASE docker95"
psql -U postgres -h localhost -p 9500 -c"\list"

W wyniku powyższych poleceń w systemie operacyjnym gospodarza powinniśmy mieć dostęp do dwóch instancji bazy danych postgres. Jednej w wersji 9.0 działającej na porcie 9000, drugiej w wersji 9.5 działającej na porcie 9500. W bazie danych w wersji 9.0 powinna znajdować się baza o nazwie “docker90”, a w bazie danych w wersji 9.5 baza o nazwie “docker95”.

Połączenie kontener – kontener

Kontenery mogą udostępniać swoje porty innym kontenerom bez konieczności eksponowania ich do systemu gospodarza. Żeby to zrobić należy udostępnić co najmniej jeden port kontenera za pomocą opcji --expose, a następnie połączyć kontenery za pomocą opcji --link.

Uruchommy kontener bazy danych udostępniający port 5432 za pomocą opcji --expose.

docker run -d --expose=5432 --name="postgres-container" postgres

Uruchommy kontener ubuntu i połączmy go z kontenerem bazy danych za pomocą opcji --link.

docker run -d -it --name="ubuntu-container" --link="postgres-container" ubuntu

Otwórzmy powłokę kontenera ubuntu uzyskując swobodny dostęp do jego systemu plików.

docker attach ubuntu-container

Użycie opcji --link powoduje, zmapowanie adresu IP kontenera bazy danych na nazwę postgres-container. Możemy to łatwo sprawdzić wyświetlając zawartość pliku /etc/hosts.

cat /etc/hosts

Doinstalujmy do ubuntu klienta postgresa i spróbujmy połączyć się z serwerem bazy danych z kontenera postgres-container.

apt-get install -y postgres-client
psql -U postgres -h postgres-container

W wyniku powyższych poleceń powinniśmy uzyskać dostęp do wiersza poleceń serwera bazy danych postgres.

Spis wpisów w serii

4.5 / 5
Tagi: ,
Piotr Wierzgała
Autor: Piotr Wierzgała
Programista Python zainteresowany tematyką uczenia maszynowego.

Imię i nazwisko (wymagane)

Adres email (wymagane)

Temat

Treść wiadomości

Zostaw komentarz