Docker #2: Dockerfile – konfiguracja

Rozpoczynając testy ma nowej maszynie, musimy wykonać szereg instalacji. W przypadki Docker’ów wystarczy konfiguracja za pomocą Dockerfile.

Docker i pydocker

Docker


Rozpoczynając testy na nowej maszynie, czy to będzie komputer stacjonarny, mikrokomputer jak Rasoberry Pi, czy też może maszyna wirtualna, musimy wykonać szereg instalacji. W przypadki Docker’ów, do zdefiniowania co ma się zainstalować w naszym nowym systemie (kontenerze) i jakie komendy mają się wykonać, automatycznie po jego starcie definiujemy za pomocą pliku Dockerfile.

Dockerfile

Załóżmy na przykład, że pobierasz najnowszy obraz Ubuntu, na którym chcesz uruchomić środowisko testowe. Zanim będziesz mógł puścić testy za pomocą tego kontenera, musisz wykonać aktualizację systemu, zainstalować oprogramowanie i dodać niezbędne biblioteki.

Aby to zrobić, przeprowadzę cię przez proces tworzenia pliku Dockerfile. Zaktualizujemy system, a następnie zainstalujemy Python’a i PyTest’a. Kolejnym krokiem będzie, ściągniecie pliku z testami do kontenera i uruchomienie testu. Będzie to dość podstawowy plik Dockerfile, ale taki, na którym można łatwo zbudować kontener z testami.

Tworzymy plik Dockerfile

Jak możecie się domyślić, zaczniemy od pliku konfiguracyjnego. Utwórz plik Dockerfile (może on przyjmować dowolną nazwę i rozszerzenie – lub jego brak, na potrzeby tego tutorialu nazwałem go po prostu Dockerfile) i przejdź do jego edycji dowolnym programem. Aby ustawić system, na jakim będzie bazował nasz docker, użyj komendy FROM, a następnie {nazwasystemu}:{wersja}. Jako system zamiast podanego powyżej ubuntu możemy oczywiście użyć wszsytkich istniejących docków na liście:

W przykładzie użyję FROM ubuntu:latest co oznacza najnowszą dostępną wersję Ubuntu. Można oczywiście podać na przykład ubuntu:19.04 co będzie oznaczać Ubuntu w wersji 19.04i będziemy mieć wtedy pełną kontrolę nad tym jaka wersja systemu jest ustawiana podczas budowania. Następnie wykonamy kilka komend. Aby uruchomić polecenie z poziomu Dockerfile, użyj komendy RUN {komenda}. W przykładzie poniżej przeprowadzam aktualizację systemu i instalację Pythona w wersji 3.8 przy pomocy aplickaji apt:

FROM ubuntu:latest
 
RUN apt-get -y update
RUN apt-get -y upgrade
 
RUN apt-get install -y python3.8

Pewnie zauważyłeś/aś, że użyłem przy instalacji argumentu -y. Oznacza on automatyczną akceptację zapytań podczas instalacji. Jest to wymagany zabieg, gdyż budowanie obrazu będzie odbywać się w tle bez naszej ingerencji. Jednak zanim zbudujemy kontener i go uruchomimy, dodajmy do niego jeszcze jakiś prosty test i możliwość uruchomienia PyTest’a z poziomu Docker’a.

Przykładowy test

Utwórz najprostszy plik z testami, jaki tylko możesz. W moim przykładzie będzie się nazywał test_example.py i zawierał metodę test_example z wynikiem pass:

test_example():
    pass

Jeżeli nie wiesz jeszcze jak tworzyć testy we framework’u PyTest zapraszam do zapoznania się z poniższym artykułem

Przygotowanie kontenera do testów

W naszym kontenerze będziemy potrzebowali jeszcze zainstalować bibliotekę PyTest. Aby to zrobić, potrzebujemy też aplikację pip3. Zainstalujemy je podobnie jak wcześniej Python’a. Na potrzeby tego artykułu wciągniemy testy za pośrednictwem Dockerfile’a przy użyciu komendy COPY. Pamiętaj, że przy takim użyciu tej komendy plik musi znajdować się w tym samym folderze co Dockerfile:

FROM ubuntu:latest
 
RUN apt-get -y update
RUN apt-get -y upgrade
 
RUN apt-get install -y python3.8
RUN apt-get install -y python3-pip
 
RUN pip3 install pytest
 
COPY test_example.py .

Budowanie

Żeby móc uruchomić kontener z naszą konfiguracją, musimy go najpierw zbudować. Po zbudowaniu będzie lokalnie przechowywany w naszych obrazach Docker’ów i będzie go można uruchomić w dowolnym momencie. Do budowy używamy komendy docker build. Aby docker budował się zgodnie z naszym plikiem konfiguracyjnym, użyjemy argumentu -t i następnie podamy nazwę, jaką ma przyjmować docker oraz nazwę pliku konfiguracyjnego oddzielone dwukropkiem. Na poniższym przykładzie nie bez powodu pojawiła się na końcu kropka. Oznacza ona, że budowany docker ma się znaleźć w miejscu, gdzie aktualnie się znajdujemy:

docker build -t "{name}:DockerfileName" .

Obraz dockera

Aby sprawdzić czy tworzony przez ciebie Docker znajduje się w dostępnych lokalnie obrazach, użyj komendy docker images – która odnajdzie wszsytkie zbydowane Docker’y na twojej maszynie:

docker images

Tak za pomocą jednego pliku konfiguracyjnego możemy przygotować całe środowisko testowe. Gdy chcesz komuś przekazać swoją konfigurację środowiska testowego, wystarczy, że przekażesz plik Dockerfile, a ta osoba już sama sobie zbuduje środowisko komendą docker build.

W kolejnej części serii o Docker’ach zaprezentuję, jak możemy uruchamiać testy na skonfigurowanym kontenerze.

close

Newsletter