Przeznaczeniem kontenera jest jedno lub wielokrotne wykonanie pewnej czynności określonej przez właściciela kontenera. Działający kontener oprócz swojego podstawowego zadania może wykonywać dowolne inne polecenia.
Biorąc pod uwagę ideę kontenera dodatkowe polecenia powinny wspomagać działanie podstawowego polecenie. Jeżeli kontener wykonuje czynności, które można odseparować wtedy powinny zostać stworzone osobne kontenery, każdy z osobnym i pojedynczym przeznaczeniem. Celem tego wpisu jest przybliżenie zagadnienia wykonywania poleceń przez kontener.
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.
Nadpisanie głównego polecenia kontenera
Każdy kontener posiada polecenie, które jest wykonywane podczas jego uruchomienia. Jeżeli polecenie nie zostanie podane jako parametr komendy docker run
wtedy kontener przyjmie polecenie określone w swoim obrazie. Czas działania kontenera (status „up”) jest tożsamy z czasem wykonywania jego polecenia.
Polecenie obrazu ubuntu
to /bin/bash
dlatego po uruchomieniu jego kontenera mogliśmy odnieść wrażenie, że nic się nie stało. Żeby nadpisać polecenie obrazu należy stworzyć kontener z dodatkowym parametrem.
docker run [nazwa obrazu] [polecenie]
docker run ubuntu sleep 10
W wyniku powyższego wywołania zostanie stworzony i uruchomiony kontener obrazu ubuntu
o losowej nazwie. Kontener wykona polecenie sleep 10
(odczeka 10 sekund), a następnie zostanie zatrzymany. Każde kolejne wywołanie tego polecenia spowoduje utworzenie nowego kontenera o takim samym przeznaczeniu (poleceniu). Polecenie sleep
stanowi tylko prosty przykład. W praktyce kontener może wykonywać dowolnie złożone polecenie. Jedynym wymogiem jest zapewnienie kontenerowi odpowiednich zasobów, np. zależnych pakietów, innych usług, mocy obliczeniowej.
Wykonanie polecenia na działającym kontenerze
Jeżeli kontener jest uruchomiony (status „up”) możemy wykonać na nim dowolne polecenie za pomocą wywołania:
docker exec [id lub nazwa kontenera] [polecenie]
Kontener obrazu ubuntu
z poleceniem sleep 10
działa tylko przez 10 sekund. Żeby komfortowo przetestować komendę docker exec
powinniśmy uruchomić kontener z poleceniem, które nie niesie ze sobą ograniczeń czasowych. Stwórzmy kontener serwera bazy danych postgres. Domyślne polecenie obrazu postgres
uruchamia serwer bazy danych. Czas działania takiego kontenera będzie tożsamy z czasem działania serwera bazy danych.
docker run --name="postgres-container" postgres
Za pomocą polecenia psql -U postgres -c"\list"
wyświetlmy listę baz danych dostępnych w kontenerze.
docker exec postgres-container psql -U postgres -c"\list"
Powinniśmy zobaczyć domyślną listę baz danych:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
[...]
Stwórzmy własna bazę danych o nazwie „docker„.
docker exec postgres-container psql -U postgres -c"CREATE DATABASE docker"
Po ponownym wyświetleniu baz danych powinniśmy zobaczyć listę powiększoną o bazę „docker”
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
docker | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
[...]
* 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