Menu

Region US

Grandmetric LLC
Lewes DE 19958
16192 Coastal Hwy USA
EIN: 98-1615498
+1 302 691 94 10
info@grandmetric.com

Region EMEA

GRANDMETRIC Sp. z o.o.
ul. Metalowa 5, 60-118 Poznań, Poland
NIP 7792433527
+48 61 271 04 43
info@grandmetric.com

UK

Grandmetric LTD
Office 584b
182-184 High Street North
London
E6 2JA
+44 20 3321 5276
info@grandmetric.com

  • en
  • pl
  • Jak skonfigurować Dockera z Dockerfile

    Projektowanie i konfigurowanie

    Jak skonfigurować Dockera z Dockerfile

    Czym jest Dockerfile

    Zgodnie z oficjalną dokumentacją Dockera, Dockerfile jest plikiem tekstowym, który zawiera wszystkie polecenia potrzebne do zbudowania danego obrazu w podanej kolejności.

    Definiuje więc:

    • obraz źródłowy,
    • listę poleceń wykonywanych podczas tworzenia obrazu,
    • listę poleceń do automatycznego uruchomienia,
    • otwarty port sieciowy,
    • woluminy z bazami danych.

    Składnia, czyli jak konfigurować Dockerfile

    Lista najważniejszych komend wykorzystaywanych podczas konfiguracji:

    • Wybór obrazu źródłowego.
      FROM IMAGE[:TAG] [AS NAME]

      To polecenie jest opcjonalne; domyślny obraz to zarysowania. Docelowy obraz jest pobierany z Docker Hub.

    • Wykonywanie poleceń podczas tworzenia obrazu w nowej warstwie.
      RUN COMMAND or RUN [“COMMAND”, ”ARG1”, “ARG2”]
    • Konfiguracja kontenera, który będzie działał jako plik wykonywalny.
      ENTRPOINT [EXECUTABLE_COMMAND]
    • Ustawienia domyślnych poleceń i/lub parametów, które można nadpisać z CLI podczas uruchamiania kontenera dokera.
      CMD [“COMMAND”, “ARG1”, “ARG2”]
    • Ustawienie zmiennych środowiskowych.
      ENV NAME VALUE or ENV NAME1=VALUE1 NAME2=VALUE2
    • Zmiana ścieżki dla następnych poleceń.
      WORKDIR /PATH
    • Kopiowanie plik z kontekstem do kontenera.
      COPY PATH_TO_FILE PATH_TO_FILE_DESTINATION
    • Automatyczne sprawdzanie statusu dockera.
      HEALTHCHECK [OPTIONS] CMD [COMMAND]
      

    Jak stworzyć kontener Dockera?

    Poniżej pokazuję sposób tworzenia kontenera dokera z aktywną aplikacją Flask.

    Zacznij od utworzenia folder projektu i trzech niezbędnych plików tekstowych.

    Drzewo plików powinno wyglądać tak:

    flask_on_docker/
    ├── app.py
    ├── Dockerfile
    └── requirements.txt

    Flask to aplikacja w języku python; stąd możemy użyć obrazu podstawowego python3. Możemy opcjonalnie użyć obrazu Ubuntu, ale jest to zbędne sposób, ponieważ obraz Pythona jest wystarczająco duży. Powinniśmy wybierać obrazy, które spełniają nasze wymagania, ale zużywają jak najmniej zasobów.

    Plik app.py zawiera podstawowy kod pythona implementujący podstawowe API Flask.

    from flask import Flask
    from flask_restful import Resource, Api
    
    app = Flask(__name__)
    api = Api(app)
    
    class HelloWorld(Resource):
        def get(self):
            return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
        app.run(debug=True, host='0.0.0.0')

     

    W skrypcie pythona importujemy pakiety flask i flask_restful, co pozwala je zapisać w pliku wymagań.

    flask
    flask_restful

     

    Ostatni plik to Dockerfile.

    FROM python:3.7
    COPY . /app
    WORKDIR /app
    RUN pip3 install -r requirements.txt
    ENTRYPOINT ["python3"]
    CMD ["app.py"]
    HEALTHCHECK --interval=15s --timeout=3s \
    CMD curl -f http://localhost:5000/ || exit 1
    

     

    Dockerfile kopiuje bieżący folder do folderu app do kontenera, następnie instaluje wymagania znajdujące się w pliku requirements.txt i uruchamia skrypt app.py w pythonie.

    Dodatkowo dodamy instrukcję HEALTHCHECK, która co 15 sekund sprawdza, czy możliwe jest poprawne odpytywanie naszego API. Jeśli otrzymamy odpowiedź, kontener statusu (status container) jest w dobrej kondycji, jeśli nie – w złej.

     

    Jak uruchomić Dockera z Dockerfile?

    Zbuduj obraz z parametrem (’-t’ – nazwa i opcjonalnie znacznik):

    docker build -t flask_on_docker .

    Uruchom utworzony obraz z parametrami (’-d’ – uruchom kontener w tle i wydrukuj ID kontenera, ’-p’ – opublikuj port kontenera na hoście):

    docker run -d -p 5000:5000 flask_on_docker

    Sprawdź stan dokera za pomocą polecenia:

    ms@GRANDMETRIC:~/flask_on_docker$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS                    NAMES
    cd8d2e9b6874        flask_on_docker     "python3 app.py"    7 seconds ago       Up 5 seconds (healthy)   0.0.0.0:5000->5000/tcp   funny_hoover

     

    Jeśli stan dokera jest zdrowy, możesz sprawdzić API odpowiedzi za pomocą narzędzi curl:

    #send GET request using curl
    curl localhost:5000
    

    albo w przeglądarce:

    Co dalej?

    W tym poście pokazałem, jak skonfigurować dockera z Dockerfile. Jeśli stworzyłeś już jeden kontener dockera, spróbuj utworzyć kilka z nich i sprawić, by współpracowały ze sobą. Komunikacja między kontenerami przebiega podobnie do architektury mikroserwisowej. Jeśli chcesz dowiedzieć się więcej o tym, jak efektywnie zarządzać relacjami, kontrolować i uruchamiać kontenery w jednym środowisku, zobacz ten wpis o zarządzaniu kontenerami.

     

     

    Autor: Mateusz Sobkowiak
     
    Grandmetric: Network & Security