Читать книгу Docker w praktyce - Ian Miell - Страница 17
1.2.2. Tworzenie Dockerfile
ОглавлениеDockerfile to plik tekstowy zawierający serię poleceń. Listing 1.1 to Dockerfile, którego będziemy używać jako przykładu. Utwórzmy nowy folder, przejdźmy do niego i utwórzmy plik o nazwie „Dockerfile” z poniższą zawartością.
Listing 1.1. Dockerfile dla todoapp
FROM node
Definicja bazowego obrazu
LABEL maintainer ian.miell@gmail.com
Informacja o opiekunie obrazu
RUN git clone -q https://github.com/docker-in-practice/todo.git
Klonowanie kodu todoapp
WORKDIR todo
Przejście do nowego, sklonowanego katalogu
RUN npm install > /dev/null
Uruchomienie polecenia install z managera pakietów (npm)
EXPOSE 8000
Określenie, że kontenery ze zbudowanego obrazu powinny nasłuchiwać na tym porcie
CMD["npm","start"]
Określenie, które polecenia będą wykonywane podczas uruchamiania
Dockerfile rozpoczynamy od zdefiniowania obrazu podstawowego za pomocą polecenia FROM. Ten przykład używa obrazu Node.js, zatem będziemy mieć dostęp do plików binarnych Node.js. Oficjalny obraz Node.js jest nazwany node.
Następnie deklarujemy opiekuna obrazu za pomocą polecenia LABEL. W tym przypadku używamy jednego z naszych adresów e-mailowych, ale możesz go zastąpić własnym odwołaniem, ponieważ jest to teraz twój plik Dockerfile. Ta linia nie jest wymagana do utworzenia działającego dockerowego obrazu, ale włączenie tego jest dobrą praktyką. W tym momencie budowanie odziedziczyło stan bazowego kontenera i jesteśmy gotowi do pracy nad nim.
Następnie za pomocą komendy RUN klonujemy kod todoapp. Do pobrania kodu aplikacji używamy konkretnego polecenia, uruchamiając git w kontenerze. W tym przypadku Git był zainstalowany wewnątrz obrazu podstawowego, ale nie możemy uznawać tego za rzecz oczywistą.
Teraz za pomocą komendy WORKDIR przechodzimy do nowego sklonowanego katalogu. W budowanym kontekście zmienia to nie tylko katalogi, bo ostatnie polecenie WORKDIR określa, w którym katalogu domyślnie się znajdziemy, gdy uruchomimy swój kontener ze zbudowanego obrazu.
Następnie uruchamiamy polecenie install z managera pakietów (npm). Spowoduje to skonfigurowanie zależności dla aplikacji. W tym przykładzie nie interesuje nas wynik, zatem przekierowujemy go do /dev/null.
Ponieważ aplikacja wykorzystuje port 8000, używamy polecenia EXPOSE, aby powiedzieć Dockerowi, że kontenery ze zbudowanego obrazu powinny nasłuchiwać na tym porcie.
Na koniec używamy polecenia CMD, aby powiedzieć Dockerowi, które polecenia mają zostać wykonane po uruchomieniu kontenera.
Ten prosty przykład ilustruje kilka kluczowych cech Dockera i Dockerfile. Plik Dockerfile to prosta sekwencja ograniczonego zestawu poleceń uruchamianych w ścisłej kolejności. Wpływa ona na pliki i metadane obrazu wynikowego. Polecenie RUN wpływa w tym przypadku na system plików, pobierając i instalując aplikację, a polecenia EXPOSE, CMD i WORKDIR wpływają na metadane obrazu.