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:
Lista najważniejszych komend wykorzystaywanych podczas konfiguracji:
FROM IMAGE[:TAG] [AS NAME]
To polecenie jest opcjonalne; domyślny obraz to zarysowania. Docelowy obraz jest pobierany z Docker Hub.
RUN COMMAND or RUN [“COMMAND”, ”ARG1”, “ARG2”]
ENTRPOINT [EXECUTABLE_COMMAND]
CMD [“COMMAND”, “ARG1”, “ARG2”]
ENV NAME VALUE or ENV NAME1=VALUE1 NAME2=VALUE2
WORKDIR /PATH
COPY PATH_TO_FILE PATH_TO_FILE_DESTINATION
HEALTHCHECK [OPTIONS] CMD [COMMAND]
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.
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:
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.