Android

Jak budować obrazy dokerów za pomocą pliku dokerów

Docker создаем собственный образ | уроки docker | #3

Docker создаем собственный образ | уроки docker | #3

Spisu treści:

Anonim

Obraz Docker to schemat kontenerów Docker, który zawiera aplikację i wszystko, czego potrzebujesz do uruchomienia aplikacji. Kontener to środowisko wykonawcze obrazu.

W tym samouczku wyjaśnimy, czym jest plik Dockerfile, jak go utworzyć i jak zbudować obraz Docker za pomocą Dockerfile.

Co to jest Dockerfile

Plik Docker to plik tekstowy zawierający wszystkie polecenia, które użytkownik może uruchomić w wierszu poleceń, aby utworzyć obraz. Zawiera wszystkie instrukcje potrzebne Dockerowi do zbudowania obrazu.

Obrazy Docker składają się z szeregu warstw systemu plików reprezentujących instrukcje w pliku Docker obrazu, który tworzy program wykonywalny.

Plik Docker ma następującą postać:

# Comment INSTRUCTION arguments

INSTRUCTION nie jest rozróżniana wielkość liter, ale konwencja polega na używaniu WIELKICH LITEK dla nazw.

Poniżej znajduje się lista z krótkim opisem niektórych najczęściej używanych instrukcji Dockerfile:

  • ARG - Ta instrukcja pozwala zdefiniować zmienne, które mogą być przekazywane w czasie kompilacji. Możesz także ustawić wartość domyślną. OD - Podstawowy obraz do budowy nowego obrazu. Ta instrukcja musi być pierwszą instrukcją bez komentarza w Dockerfile. Jedynym wyjątkiem od tej reguły jest sytuacja, gdy chcesz użyć zmiennej w argumencie FROM . W takim przypadku FROM może być poprzedzony jedną lub większą liczbą instrukcji ARG . ETYKIETA - Służy do dodawania metadanych do obrazu, takich jak opis, wersja, autor..etc. Możesz podać więcej niż jedną LABEL , a każda instrukcja LABEL jest parą klucz-wartość. RUN - polecenia określone w tej instrukcji zostaną wykonane podczas procesu kompilacji. Każda instrukcja RUN tworzy nową warstwę na bieżącym obrazie. DODAJ - Służy do kopiowania plików i katalogów z określonego źródła do określonego miejsca docelowego na obrazie dokera. Źródłem mogą być lokalne pliki lub katalogi lub adres URL. Jeśli źródłem jest lokalne archiwum tar, jest ono automatycznie rozpakowywane do obrazu Docker. KOPIUJ - Podobny do ADD ale źródłem może być tylko lokalny plik lub katalog. ENV - Ta instrukcja pozwala zdefiniować zmienną środowiskową. CMD - służy do określenia polecenia, które zostanie wykonane po uruchomieniu kontenera. Możesz użyć tylko jednej instrukcji CMD w Dockerfile. ENTRYPOINT - podobnie jak CMD , instrukcja ta określa, jakie polecenie zostanie wykonane podczas uruchamiania kontenera. WORKDIR - ta dyrektywa ustawia bieżący katalog roboczy dla instrukcji RUN , CMD , ENTRYPOINT , COPY i ADD . UŻYTKOWNIK - Ustaw nazwę użytkownika lub UID które będą używane podczas uruchamiania następujących instrukcji RUN , CMD , ENTRYPOINT , COPY i ADD . GŁOŚNOŚĆ - Umożliwia zamontowanie katalogu komputera hosta w kontenerze. EKSPOZYCJA - Służy do określania portu, na którym kontener nasłuchuje w czasie wykonywania.

Aby wykluczyć dodawanie plików i katalogów do obrazu, utwórz plik .dockerignore w katalogu kontekstowym. Składnia .dockerignore jest podobna do tej z pliku .dockerignore Gita.

Pełne odniesienie i szczegółowe objaśnienie instrukcji Dockerfile można znaleźć na oficjalnej stronie referencyjnej pliku Dockerfile.

Utwórz plik Docker

Najczęstszym scenariuszem podczas tworzenia obrazów Docker jest pobranie istniejącego obrazu z rejestru (zwykle z Docker Hub) i określenie zmian, które chcesz wprowadzić w obrazie podstawowym. Najczęściej stosowanym obrazem podstawowym podczas tworzenia obrazów Docker jest Alpine, ponieważ jest mały i zoptymalizowany do pracy w pamięci RAM.

Docker Hub to usługa rejestru oparta na chmurze, która między innymi służy do przechowywania obrazów Docker w publicznym lub prywatnym repozytorium.

W tym przykładzie utworzymy obraz Dockera dla serwera Redis. Wykorzystamy najnowszą wersję Ubuntu 18.04 jako obraz podstawowy.

Najpierw utwórz katalog, który będzie zawierał plik Docker i wszystkie niezbędne pliki:

mkdir ~/redis_docker

Przejdź do katalogu i utwórz następujący plik Dockerfile:

cd ~/redis_docker nano Dockerfile Plik Docker

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Wyjaśnijmy znaczenie każdej linii w Dockerfile:

  • W linii 1 definiujemy obraz podstawowy. Instrukcja RUN która rozpoczyna się w linii 3 , zaktualizuje indeks apt, zainstaluje pakiet „redis-server” i wyczyści pamięć podręczną apt. Polecenia użyte w instrukcjach są takie same, jak polecenia, których użyłbyś do zainstalowania redis na serwerze Ubuntu. Instrukcja EXPOSE określa port, na którym nasłuchuje serwer redis. W ostatnim wierszu używamy instrukcji CMD aby ustawić polecenie domyślne które zostanie wykonane po uruchomieniu kontenera.

Zapisz plik i zamknij edytor.

Budowanie obrazu

Następnym krokiem jest zbudowanie obrazu. Aby to zrobić, uruchom następującą komendę z katalogu, w którym znajduje się plik Docker:

docker build -t linuxize/redis.

Opcja -t określa nazwę obrazu oraz opcjonalnie nazwę użytkownika i tag w formacie „nazwa użytkownika / imagename: tag”.

Dane wyjściowe procesu kompilacji będą wyglądać mniej więcej tak:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Po zakończeniu procesu kompilacji nowy obraz pojawi się na liście obrazów:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Prowadzenie kontenera

Teraz, gdy obraz jest utworzony, możesz uruchomić z niego kontener, uruchamiając:

docker run -d -p 6379:6379 --name redis linuxize/redis

Opcje -d --name redis uruchomić kontener w trybie odłączonym, opcja -p 6379:6379 opublikuje port 6379 na maszynie hosta, a opcja --name redis określa nazwę kontenera. Ostatni argument linuxize/redis to nazwa obrazu, która służy do uruchamiania kontenera.

Po uruchomieniu kontenera użyj następującego polecenia, aby wyświetlić listę wszystkich działających kontenerów:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Aby sprawdzić, czy wszystko działa tak, jak powinno, użyj redis-cli do połączenia z kontenerem redis-cli :

redis-cli ping

Serwer Redis powinien odpowiedzieć PONG .

Wniosek

Ten samouczek obejmował jedynie podstawy korzystania z Dockerfiles do tworzenia obrazów. Aby dowiedzieć się więcej na temat pisania Dockerfiles i zalecanych najlepszych praktyk, zobacz Najważniejsze wskazówki dotyczące pisania Dockerfiles.

doker