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 systemem 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.
* Zachęcamy również do zapoznania się z odświeżonymi w grudniu 2021 i styczniu 2022 artykułami nt. Dockera, które znajdziecie pod tym wpisem.
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.
* Zaktualizowane w 2021 i 2022 artykuły nt. Dockera
- Docker dla programistów: co to jest?
- Docker dla programistów – budowa pierwszego środowiska. Część I
- Docker dla programistów – budowa środowiska rozwojowego. Część II
- Docker dla programistów – dystrybucja aplikacji
Zostaw komentarz