Jak dostosowywać obrazy Docker za pomocą DockerFiles

Jak dostosowywać obrazy Docker za pomocą DockerFiles

W tym artykule pokazano, jak dostosowywać obrazy Docker za pomocą pliku opisu wymienionego Dockerfile. Zobaczysz, jak rozszerzyć istniejące obrazy, dostosowywać je do swoich potrzeb, a także jak opublikować wynikowy obraz dla Docker Hub.

W tym samouczku nauczysz się:

  • Jak dostosować obraz za pomocą pliku dokera.
  • Jak opublikować wynikowy obraz w Hub Docker.
HTTPS jest włączony.

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Ubuntu 18.04 Bionic Beaver
Oprogramowanie Doker
Inny Uprzywilejowany dostęp do systemu Linux jako root lub za pośrednictwem sudo Komenda.
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Wstęp



Poprzednie artykuły przedstawiły koncepcje Docker i kilka podstawowych poleceń Docker. W tym artykule zobaczysz, jak dostosować i rozszerzyć istniejący obraz dokera, opisując modyfikacje w pliku dokera i publikując obraz w rejestrze.

Plik dokujący

W poprzednim artykule dokonałeś modyfikacji działającego kontenera i popełniłeś zmiany w lokalnej pamięci podręcznej obrazu. Chociaż jest to pomocny zasób dla określonych sytuacji, zaleca się, aby dostosowywania były wykonywane w bardziej udokumentowany sposób, aby obraz mógł być wdrażany na innych hostach. Zalecanym sposobem jest napisanie pliku dokera.

DockerFile to plik YAML, który jest plik tekstowym z pewną składnią: relacje są wyrażane przy użyciu wgłębienia (przestrzenie), a każda linia składa się z par kluczy i wartości.

Zacznijmy od prostego pliku dokera, który instaluje pakiet rekwizyty (Zawiera polecenia htop I Ps) do obrazu debiana.

Utwórz nowy katalog, wejdź w niego i zapisz poniższy plik z nazwą Dockerfile (Capital D):

Od Debian Run APT-Get Aktualizacja && \ apt-get -y instaluj procps 
Kopiuj

Ten plik dokujący stwierdza, że ​​obraz podstawowy nazywa się Debian (Z klauzula). Jeśli nie istnieje lokalnie, zostanie pobrany z hub Docker. URUCHOMIĆ polecenie wykonuje apt-get dwa razy. Zwróć uwagę na użycie backslash (\) do złamania linii i użycia -y pominąć monit o potwierdzenie apt-get instalacja.

Następnym krokiem jest zbudowanie obrazu z Docker Build.



$ Docker Build -t mydebian . Wysyłanie kontekstu kompilacji do Docker Daemon 2.048KB Krok 1/2: Od Debian ---> BE2868BEBABA Krok 2/2: Uruchom aktualizację Apt-Get && Apt-get -y instaluj procps ---> Udanie w 52A16B346AFC… Usunięcie pośredniego kontenera 52A16B346AFC ---> F21A05A59966 Pomyślnie zbudowane F21A05A59966 Z powodzeniem oznaczono MyDebian: najnowszy 
Kopiuj

Flaga -t Mydebian nazywa nowy obraz. Kropka (.) mówi Dockerowi, aby użył bieżącego katalogu, aby poszukać pliku dokera. Zwróć uwagę, że nowe warstwy są tworzone i usuwane w miarę interpretacji linii pliku dokera.

W lokalnej pamięci podręcznej musi być nowy obraz.

$ Docker Id Id Identyfikator obrazu obrazu utworzony rozmiar MyDebian Najnowsze f21A05A59966 8 minut temu 119 MB Debian Najnowsze BE2868BABA 7 tygodni temu 101 MB 
Kopiuj

Można utworzyć pojemnik z tego obrazu.

$ Docker Run -it --Name mydebian_container mysebian root@ef9eB174874a:/# ps -ef uid pid pPid c Stime tty Tim PTS/0 00:00:00 ps -ef 
Kopiuj

Odtąd możesz tworzyć kontenery prowadzące Debiana z Procps pakiet i polecenia htop I Ps zostanie już zainstalowany.

Teraz utwórzmy plik Docker, aby Apache i PHP zainstalowano w czasie budowy obrazu, aby osiągnąć te same cele poprzedniego artykułu, gdy polecenia zostały wykonane w pojemniku.

Od Debian Run APT-Get Aktualizacja && \ apt-get -y instaluj procps libapache2-mod-php cmd Service Apache2 start 
Kopiuj

Dodaliśmy libapache2-mod-php w linii 3 i a CMD polecenie w wierszu 4, aby rozpocząć Apache. Po uruchomieniu kontenera, CMD Polecenie jest wykonywane. Może istnieć tylko jeden CMD Polecenie na DockerFile. Kiedy CMD Polecenie jest określone, zastępuje to CMD polecenie obrazu, który rozszerzasz. Jeśli CMD Polecenie jest pominięte, jeden z podstawowych obrazów zostanie wykonany (jeśli istnieje). Jak można się domyślać, plik dokera debian bazowy ma CMD Polecenie do wykonania BASH. Możesz to sprawdzić w hubie Docker.



$ Docker Run -d --Name mydebian_container2 -d -p 8000: 80 -v "$ pwd":/var/www/html mydebian ad325685B738464C49BFF40B65C6824160105AB5C285282EFEFBC4DDDE Porty nazwy AD325685B738 MYDEBIAN "/BIN/SH -SH -C 'SERVICE…" 11 sekund temu w górę 5 sekund 0.0.0.0: 8000-> 80/tcp mydebian_container2 
Kopiuj

Tym razem rozpoczęliśmy kontener za pomocą -D przełącz, ponieważ chcemy, aby był odłączony od terminalu.

Ważne polecenia Dockerfile

Dockerfile ma inne polecenia poza Z, URUCHOMIĆ, I CMD.

Komenda Env służy do ustawiania zmiennych środowiskowych na obrazie, jak http Proxy, Na przykład. Wiele obrazów używa zmiennych środowiskowych do przekazywania parametrów do nowego kontenera. Aby uzyskać przykłady, sprawdź obrazy baz danych, takie jak MySQL i PostgreSQL w Docker Hub.

Komenda KOPIUJ kopiuje pliki i katalogi z hosta do obrazu w czasie kompilacji. Ścieżka źródłowa (pierwszy argument) jest w stosunku do aktualnego katalogu.

Komenda DODAĆ jest podobne do KOPIUJ, z różnicą, jeśli źródłem jest skompresowany plik smotu, zostanie ono automatycznie zdekompresowane w katalogu docelowym wewnątrz obrazu. Z wyjątkiem tego zastosowania Docker zaleca użycie KOPIUJ Polecenie, gdy tylko jest to możliwe.

Komenda UJAWNIĆ Wskazuje, które porty obrazu mogą być odsłonięte przez Dockera. Podczas tworzenia kontenerów porty te mogą być mapowane na porty hosta, w razie potrzeby.

Komenda Workdir ustawia katalog, którego Docker użyje, gdy polecenia zostaną wykonywane w pojemniku Docker Exec.

Tworzenie obrazu z włączonym HTTPS

Teraz przedłużymy oficjalny obraz PHP Apache, aby aktywować SSL za pomocą automatycznego certyfikatu, aby przykładać, jak korzystać z wymienionych poleceń. W nowym katalogu utwórz następujący plik dokujący.



Od PHP: 7 -APache Run Openssl Req -x509 -nodes -Days 365 -Newkey RSA: 2048 -Keyout/etc/ssl/private/ssl -cert -snakeil.klucz -ut/etc/ssl/certs/ssl-cert-snakeil.pem -subj "/c = Br/st = Rio Grande do SUL/L = Porto Alegre/O = Security/Ou = Development/CN = Przykład.com "Uruchom a2enmod przepisanie run a2ensite default-SSL Uruchom a2enmod SSL Expose 443 Kopia ./html/var/www/html workdir/var/www/html 
Kopiuj

W wierszu 3 tworzymy certyfikat. Linie 5 - 7 Włącz mod_rewrite i SSL. Linia 9 ujawnia port 443 (port 80 jest już odsłonięty przez obraz powyżej). Wiersz 11 dodaje katalog aplikacji do kontenera. Wreszcie linia 13 ustawia katalog roboczy jako katalog roboczy Apache. Wszystkie polecenia wykonane przez Docker Exec Domyślnie użyje tego katalogu jako bazy.

Teraz utwórz katalog nazwany html i plik o nazwie phpinfo.php z tą treścią.

 
Kopiuj

Teraz zbudujmy i uruchommy pojemnik.

Docker Build -t App_image . Docker Run -d - -rm -p 80:80 -p 443: 443 -Nazwa app_container app_image 
Kopiuj

Teraz możesz uzyskać dostęp phpinfo.php skrypt za pośrednictwem obu, HTTP i HTTPS.

http: // localhost/phpinfo.php https: // localhost/phpinfo.php 
Kopiuj HTTPS jest włączony.

W https przeglądarka będzie narzekać na bezpieczeństwo certyfikatu, ponieważ jest to podpisane, ale ostrzeżenie można zignorować.

Publikowanie obrazów w hubie Docker



Utworzone obrazy istnieją tylko lokalnie, w lokalnej pamięci podręcznej Dockera. Możesz podzielić się nimi z innymi gospodarzami Docker lub z kolegami z drużyny, a nawet upublicznić ich świat. W każdym razie chcesz opublikować swoje zdjęcia do rejestru Docker. Można je opublikować w rejestrze opartym na chmurze, takim jak Hub Docker, który, nawiasem mówiąc. Najpierw utwórz bezpłatny identyfikator Docker, a następnie zaloguj się:

$ login logowania Docker za pomocą dokumentu Docker ID, aby popchnąć i wyciągnąć obrazy z Docker Hub. Jeśli nie masz identyfikatora Dockera, przejdź do https: // hub.doker.com, aby utworzyć jeden. Nazwa użytkownika: Infroger Hasło: Login powiódł się 
Kopiuj

Następnie oznacz obraz za pomocą nazwy repozytorium (infroger), nazwy obrazu i tag (wersja obrazu).

$ $ Docker Tag_image Infroger/App_image: 1 $ $ Docker Images Repository ID obrazu Identyfikator obrazu Utworzone rozmiar/app_image 1 c093151fc68f 14 godzin temu 381 MB App3_Image Najnowsze C093151FC68F 14 godzin temu 381mb 
Kopiuj

Następnie popchnij obraz do repozytorium.

$ Docker Push Infroger/App_image: 1 Push odnosi się do repozytorium [Docker.io/infroger/app_image] 27f7f2b01c49: Pushed 81b08cd5fe07: Pushed d1c23d198f84: Pushed e66392ad9b85: Pushed a71f63e3a00f: Pushed 9c58778f21dd: Pushed 973719bed9b7: Pushed 8f5090ef2ac0: Pushed fbdafdbe3319: Pushed a5c4801ecf39: Pushed e9ba112d38b9: Pushed 25ba5230dadf: Pushed f2907ce42b47: Pushed e31bf34cfab9: Pushed 9066d03e98e0: Pushed 96DB4CE698AD: Pushed Abae6a338e5c: Pushed 4572a80a7a5e: Pushed ef68f6734aa4: Pushed 1: Digest: SHA256: 2E7e53fcdf800ad0c4837cd70014170cc869d36de5c301f2e2ced3180302 
Kopiuj

Teraz przejdź do Docker Hub i sprawdź, czy obraz jest tam:



https: // hub.doker.com/r/infroger/app_image 

W Docker Hub z bezpłatną rejestracją możesz mieć jedno prywatne repozytorium z nieograniczonymi publicznymi repozytoriami. W przeciwnym razie możesz uruchomić własny rejestr Docker, co można zrobić za pomocą jednego polecenia:

Docker Run -d -p 5000: 5000 - -Restart = zawsze -Nazwa Rejestru rejestru: 2 

Zaletą posiadania prywatnego rejestru jest prywatność. Ale masz ciężar zarządzania bezpieczeństwem, wysoką dostępnością, wymaganiami do przechowywania, kontroli dostępu itp.

Wniosek

W tym artykule omówiliśmy, jak rozszerzyć istniejące obrazy i dostosowywać je do swoich potrzeb za pomocą pliku dokera. Widzieliśmy także, jak publikować obrazy w rejestrze Docker. Do tej pory możesz wiele zrobić, ale po prostu drapiemy się po świecie dokera. W następnym artykule zobaczymy bardzo prostą formę lokalnej orkiestracji kontenerowej z Docker Compose.

Więcej w tej serii artykułów Docker

  • Wprowadzenie do kontenerów Docker
  • Jak wchodzić w interakcje z kontenerami Docker

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze
  • Rzeczy do zainstalowania na Ubuntu 22.04
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Jak montować obraz ISO na Linux
  • Jak podwójnie rozruch Kali Linux i Windows 10
  • Ubuntu 20.04 Przewodnik