Kako automatski izgraditi i konfigurirati prilagođene Docker slike s Dockerfileom - dio 3


Ovaj vodič će se koncentrirati na to kako napraviti prilagođenu Docker sliku zasnovanu na Ubuntu s instaliranom uslugom Apache. Cijeli proces će biti automatiziran korištenjem Dockerfile.

Docker slike se mogu automatski napraviti od tekstualnih datoteka, pod nazivom Dockerfiles. Docker datoteka sadrži upute ili naredbe koje se koriste korak po korak za kreiranje i konfiguraciju Docker slike.

Zahtjevi

  • Instalirajte Docker i naučite manipulaciju Docker kontejnerom – 1. dio
  • Postavljanje i pokretanje aplikacija pod Docker kontejnerima – 2. dio

U osnovi, Docker datoteka sadrži različite upute za izgradnju i konfiguraciju određenog kontejnera na osnovu vaših zahtjeva. Sljedeće upute su najčešće korištene, a neke od njih su obavezne:

  1. FROM=Obavezno kao prva instrukcija u Docker datoteci. Nalaže Dockeru da povuče osnovnu sliku iz koje gradite novu sliku. Koristite oznaku da odredite tačnu sliku od koje gradite:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=Autor slike izrade
  2. RUN=Ova instrukcija se može koristiti u više redova i pokreće sve naredbe nakon kreiranja Docker slike.
  3. CMD=Pokreni bilo koju komandu kada se pokrene Docker slika. Koristite samo jednu CMD instrukciju u Dockerfileu.
  4. ENTRYPOINT=Isto kao CMD, ali se koristi kao glavna komanda za sliku.
  5. EXPOSE=Naređuje kontejneru da sluša mrežne portove prilikom pokretanja. Portovi kontejnera nisu dostupni od hosta prema zadanim postavkama.
  6. ENV=Postavite varijable okruženja kontejnera.
  7. ADD=Kopiraj resurse (fajlove, direktorije ili fajlove sa URL-ova).

Korak 1: Kreiranje ili pisanje Dockerfile repozitorija

1. Prvo, hajde da napravimo neku vrstu Dockerfile spremišta kako bismo ponovo koristili datoteke u budućnosti za kreiranje drugih slika. Napravite prazan direktorij negdje na /var particiji gdje ćemo kreirati datoteku s uputama koje će se koristiti za izgradnju nove Docker slike.

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

2. Zatim počnite uređivati fajl sa sljedećim uputama:

vi /var/docker/ubuntu/apache/Dockerfile

Dokerfile izvod:

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

Sada, idemo kroz upute za fajl:

Prvi red nam govori da gradimo iz Ubuntu slike. Ako nijedna oznaka nije poslana, recimo 14:10, na primjer, koristi se najnovija slika sa Docker Hub-a.

U drugom redu smo dodali ime i e-adresu kreatora slike. Sljedeće dvije RUN linije će se izvršiti u kontejneru prilikom izrade slike i instalirat će Apache demon i echo neki tekst na zadanu web stranicu apachea .

Linija EXPOSE će uputiti Docker kontejner da sluša na portu 80, ali port neće biti dostupan izvana. Poslednji red daje uputstva kontejneru da pokrene Apache servis u prvom planu nakon pokretanja kontejnera.

3. Poslednja stvar koju treba da uradimo je da počnemo kreirati sliku izdavanjem naredbe ispod, koja će lokalno kreirati novu Docker sliku pod nazivom ubuntu-apache zasnovanu na Dockerfile kreiran ranije, kao što je prikazano u ovom primjeru:

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

4. Nakon što je sliku kreirao Docker, možete navesti sve dostupne slike i identificirati svoju sliku izdavanjem sljedeće naredbe:

docker images

Korak 2: Pokrenite kontejner i pristupite Apache-u sa LAN-a

5. Da biste pokrenuli kontejner kontinuirano (u pozadini) i pristupili uslugama (portovima) izloženim kontejneru sa hosta ili druge udaljene mašine u vašem LAN-u, pokrenite naredbu ispod na promptu vašeg host terminala :

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

Ovdje, -d opcija pokreće ubuntu-apache kontejner u pozadini (kao daemon), a -p opcija mapira port kontejnera 80 na port vašeg lokalnog hosta 81. Izvan LAN pristup Apache servisu može se pristupiti samo preko porta 81.

Netstat komanda će vam dati ideju o tome koje portove host sluša.

Nakon što je kontejner pokrenut, također možete pokrenuti naredbu docker ps da vidite status pokrenutog kontejnera.

6. Web stranica se može prikazati na vašem hostu iz komandne linije korištenjem curl uslužnog programa protiv IP adrese vašeg stroja, lokalnog hosta ili docker net interfejsa na portu 81. Koristite IP komandu red za prikaz IP adresa mrežnog interfejsa.

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

7. Da posjetite web stranicu kontejnera sa svoje mreže, otvorite pretraživač na udaljenoj lokaciji i koristite HTTP protokol, IP adresu mašine na kojoj je kontejner pokrenut, praćen portom 81 kao što je prikazano na ispod slike.

http://ip-address:81

8. Da biste saznali koji procesi se pokreću unutar kontejnera, izdajte sljedeću naredbu:

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

9. Za zaustavljanje problema sa kontejnerom naredba docker stop nakon koje slijedi ID ili naziv kontejnera.

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

10. U slučaju da želite dodijeliti deskriptivno ime kontejneru, koristite opciju --name kao što je prikazano u primjeru ispod:

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

Sada možete referencirati kontejner za manipulaciju (start, stop, vrh, statistika, itd.) samo korištenjem dodijeljenog imena.

docker stats my-www

Korak 3: Kreirajte konfiguracionu datoteku za cijeli sistem za Docker kontejner

11. Na CentOS/RHEL možete kreirati systemd konfiguracijski fajl i upravljati kontejnerom kao što to inače radite za bilo koju drugu lokalnu uslugu.

Na primjer, kreirajte novu systemd datoteku pod nazivom, recimo, apache-docker.service koristeći sljedeću naredbu:

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

Izvod datoteke 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. Nakon što završite s uređivanjem datoteke, zatvorite je, ponovo učitajte systemd demona da odrazi promjene i pokrenite kontejner izdavanjem sljedećih naredbi:

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

Ovo je bio samo jednostavan primjer onoga što možete učiniti s jednostavnim Dockerfileom, ali možete unaprijed napraviti neke prilično sofisticirane aplikacije koje možete pokrenuti za samo nekoliko sekundi uz minimalne resurse i trud.

Dalje čitanje: