Jak dostosowywać obrazy Docker za pomocą DockerFiles
- 4432
- 695
- Tacjana Karpiński
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.
Zastosowane wymagania i konwencje oprogramowania
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
- « Jak zainstalować serwer VNC na RHEL 8 / Centos 8
- Jak zainstalować Apache Tomcat w Linux Rhel 8 / Centos 8 »