Vyhledávání na webu

Jak automaticky vytvářet a konfigurovat vlastní obrázky dockeru pomocí Dockerfile – část 3


Tento tutoriál se zaměří na to, jak vytvořit vlastní bitovou kopii Dockeru založenou na Ubuntu s nainstalovanou službou Apache. Celý proces bude automatizován pomocí Dockerfile.

Obrázky Docker lze automaticky vytvářet z textových souborů s názvem Dockerfiles. Soubor Docker obsahuje podrobné pokyny nebo příkazy používané k vytvoření a konfiguraci obrazu Dockeru.

Požadavky

  • Nainstalujte Docker a naučte se manipulaci s kontejnerem Docker – část 1
  • Nasazení a spouštění aplikací v kontejnerech Docker – část 2

V zásadě soubor Docker obsahuje různé pokyny k sestavení a konfiguraci konkrétního kontejneru na základě vašich požadavků. Následující pokyny jsou nejpoužívanější, některé z nich jsou povinné:

  1. FROM=Povinné jako první instrukce v souboru Docker. Instruuje Docker, aby vytáhl základní obraz, ze kterého vytváříte nový obraz. Pomocí značky určete přesný obrázek, ze kterého stavíte:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=Autor obrazu sestavení
  2. RUN=Tuto instrukci lze použít na více řádcích a spustí jakékoli příkazy po vytvoření obrazu Docker.
  3. CMD=Spustit libovolný příkaz při spuštění obrazu Docker. Použijte pouze jednu CMD instrukci v Dockerfile.
  4. ENTRYPOINT=Stejné jako CMD, ale používá se jako hlavní příkaz pro obrázek.
  5. EXPOSE=Dává pokyn kontejneru, aby při spuštění naslouchal na síťových portech. Porty kontejneru nejsou ve výchozím nastavení dostupné z hostitele.
  6. ENV=Nastavení proměnných prostředí kontejneru.
  7. ADD=Kopírovat zdroje (soubory, adresáře nebo soubory z adres URL).

Krok 1: Vytvoření nebo zápis úložiště Dockerfile

1. Nejprve vytvořte nějaký druh repozitářů Dockerfile, abychom mohli v budoucnu znovu použít soubory k vytváření dalších obrázků. Vytvořte prázdný adresář někde v oddílu /var, kde vytvoříme soubor s pokyny, které budou použity k vytvoření nového obrazu Dockeru.

mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile

2. Dále začněte upravovat soubor podle následujících pokynů:

vi /var/docker/ubuntu/apache/Dockerfile

Výňatek z Dokerfile:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

Nyní si projdeme pokyny k souboru:

První řádek nám říká, že vytváříme z obrázku Ubuntu. Pokud není odeslána žádná značka, řekněme například 14:10, použije se nejnovější obrázek z Docker Hub.

Na druhý řádek jsme přidali jméno a e-mail tvůrce obrázku. Další dva řádky RUN budou provedeny v kontejneru při vytváření obrazu a nainstalují démona Apache a echo nějaký text na výchozí webovou stránku Apache .

Řádek EXPOSE dá pokyn kontejneru Docker, aby naslouchal na portu 80, ale port nebude dostupný zvenčí. Poslední řádek dává pokyn kontejneru, aby po spuštění kontejneru spustil službu Apache v popředí.

3. Poslední věc, kterou musíme udělat, je začít vytvářet obrázek zadáním níže uvedeného příkazu, který lokálně vytvoří nový obrázek Docker s názvem ubuntu-apache na základě Dockerfile vytvořený dříve, jak ukazuje tento příklad:

docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Po vytvoření obrázku pomocí Docker můžete vypsat seznam všech dostupných obrázků a identifikovat svůj obrázek zadáním následujícího příkazu:

docker images

Krok 2: Spusťte Container and Access Apache z LAN

5. Chcete-li kontejner spouštět nepřetržitě (na pozadí) a přistupovat ke službám (portům) vystaveným kontejneru z hostitele nebo jiného vzdáleného počítače ve vaší síti LAN, spusťte níže uvedený příkaz na řádku hostitelského terminálu :

docker run -d -p 81:80 ubuntu-apache

Zde volba -d spouští kontejner ubuntu-apache na pozadí (jako démon) a možnost -p mapuje port kontejneru 80 k portu místního hostitele 81. Přístup ke službě Apache mimo síť LAN je možný pouze přes port 81.

Příkaz Netstat vám dá představu o tom, jaké porty hostitel poslouchá.

Po spuštění kontejneru můžete také spustit příkaz docker ps a zobrazit stav běžícího kontejneru.

6. Webovou stránku lze zobrazit na vašem hostiteli z příkazového řádku pomocí nástroje curl proti IP adrese vašeho počítače, místnímu hostiteli nebo síťovému rozhraní dockeru na portu 81. Použijte příkaz IP řádek pro zobrazení IP adres síťového rozhraní.

ip addr               [List nework interfaces]
curl ip-address:81    [System Docker IP Address]
curl localhost:81     [Localhost]

7. Chcete-li navštívit webovou stránku kontejneru ze své sítě, otevřete prohlížeč na vzdáleném místě a použijte protokol HTTP, IP adresu počítače, na kterém kontejner běží, následovaný portem 81, jak je znázorněno na obrázek níže.

http://ip-address:81

8. Chcete-li získat informace o tom, jaké procesy běží uvnitř kontejneru, zadejte následující příkaz:

docker ps
docker top <name or ID of the container>

9. Chcete-li zastavit problém s kontejnerem, použijte příkaz docker stop následovaný ID nebo názvem kontejneru.

docker stop <name or ID of the container>
docker ps

10. V případě, že chcete kontejneru přiřadit popisný název, použijte možnost --name, jak je uvedeno v příkladu níže:

docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps

Nyní můžete odkazovat na kontejner pro manipulaci (start, stop, top, statistiky atd.) pouze pomocí přiřazeného názvu.

docker stats my-www

Krok 3: Vytvořte soubor konfigurace pro celý systém pro kontejner Docker

11. V systému CentOS/RHEL můžete vytvořit konfigurační soubor systemd a spravovat kontejner jako obvykle u jakékoli jiné místní služby.

Vytvořte například nový soubor systemd s názvem, řekněme, apache-docker.service pomocí následujícího příkazu:

vi /etc/systemd/system/apache-docker.service

Výňatek ze souboru apache-docker.service:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. Po dokončení úprav souboru jej zavřete, znovu načtěte démona systemd, aby odrážel změny, a spusťte kontejner zadáním následujících příkazů:

systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service

Toto byl jen jednoduchý příklad toho, co můžete dělat s jednoduchým Dockerfile, ale můžete si předem sestavit některé docela sofistikované aplikace, které můžete spustit během několika sekund s minimálními prostředky a úsilím.

Další čtení: