Kako samodejno zgraditi in konfigurirati slike Dockerja po meri z Dockerfile - 3. del


Ta vadnica se bo osredotočila na to, kako zgraditi sliko Dockerja po meri na osnovi Ubuntuja z nameščeno storitvijo Apache. Celoten postopek bo avtomatiziran z Dockerfile.

Slike Dockerja je mogoče samodejno zgraditi iz besedilnih datotek z imenom Dockerfiles. Datoteka Docker vsebuje postopna urejena navodila ali ukaze, ki se uporabljajo za ustvarjanje in konfiguriranje slike Docker.

  • Namestite Docker in se naučite manipulacije z zabojnikom Docker - 1. del
  • Razmestite in zaženite aplikacije v zabojnikih Docker - 2. del

Datoteka Docker v bistvu vsebuje različna navodila za izdelavo in konfiguracijo določenega vsebnika glede na vaše zahteve. Najbolj se uporabljajo naslednja navodila, nekatera so obvezna:

  1. FROM = Obvezno kot prvo navodilo v Dockerjevi datoteki. Dockerju naroči, naj potegne osnovno sliko, iz katere gradite novo sliko. Z oznako določite natančno sliko, iz katere gradite:

Ex: FROM ubuntu:20.04

  1. MAINTAINER = Avtor slike zgradbe
  2. RUN = To navodilo se lahko uporablja v več vrsticah in po ustvarjanju slike Dockerja izvaja vse ukaze.
  3. CMD = Zaženite kateri koli ukaz, ko se zažene slika Dockerja. V Dockerfile uporabite samo eno navodilo CMD.
  4. ENTRYPOINT = Enako kot CMD, vendar se uporablja kot glavni ukaz za sliko.
  5. EXPOSE = Naloži vsebniku, da med izvajanjem posluša v omrežnih vratih. Vrata vsebnika privzeto od gostitelja niso dosegljiva.
  6. ENV = Nastavi spremenljivke okolja vsebnika.
  7. DODAJ = Kopiranje virov (datotek, imenikov ali datotek iz URL-jev).

1. korak: Ustvarjanje ali pisanje skladišča Dockerfile

1. Najprej ustvarimo nekakšne repozitorije Dockerfile, da bomo datoteke v prihodnosti znova uporabili za ustvarjanje drugih slik. Naredite prazen imenik nekje na particiji /var , kjer bomo ustvarili datoteko z navodili, ki bodo uporabljena za izdelavo nove slike Dockerja.

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

2. Nato začnite urejati datoteko z naslednjimi navodili:

# vi /var/docker/ubuntu/apache/Dockerfile

Izvleček 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

Zdaj pa si oglejmo navodila za datoteko:

Prva vrstica nam pove, da gradimo iz slike Ubuntuja. Če ni predložena nobena oznaka, na primer 14:10, se uporabi najnovejša slika Docker Hub.

V drugi vrstici smo dodali ime in e-pošto ustvarjalca slik. Naslednji dve vrstici RUN se bosta izvedli v vsebniku med gradnjo slike in namestili demon Apache in odmevali nekaj besedila na privzeto spletno stran apache.

Vrstica EXPOSE bo Dockerjevemu vsebniku naročila, naj posluša vrata 80, vendar vrata ne bodo na voljo zunaj. Zadnja vrstica naloži vsebniku, da po zagonu vsebnika v ospredju zažene storitev Apache.

3. Zadnja stvar, ki jo moramo storiti, je, da začnemo ustvarjati sliko z izdajo spodnjega ukaza, ki bo lokalno ustvaril novo sliko Dockerja z imenom ubuntu-apache na podlagi prej ustvarjene datoteke Docker, kot je prikazano v ta primer:

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

4. Ko Docker ustvari sliko, lahko izpišete vse razpoložljive slike in identificirate sliko tako, da izdate naslednji ukaz:

# docker images

2. korak: Zaženite vsebnik in dostopite do Apache iz LAN-a

5. Če želite neprekinjeno izvajati vsebnik (v ozadju) in dostopati do storitev (vrat), izpostavljenih vsebnikom, iz gostitelja ali druge oddaljene naprave v vašem LAN-u, zaženite spodnji ukaz v pozivu gostiteljskega terminala:

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

Tu možnost -d zažene vsebnik ubuntu-apache v ozadju (kot demon), možnost -p pa preslika vrata vsebnika 80 do vašega lokalnega gostiteljskega pristanišča 81. Do zunanjega dostopa do storitve Apache je mogoče dostopati samo prek vrat 81.

Ukaz Netstat vam bo predstavil, katera vrata posluša gostitelj.

Po zagonu vsebnika lahko zaženete tudi ukaz docker ps , da si ogledate stanje delujočega vsebnika.

6. Spletno stran je mogoče prikazati na vašem gostitelju iz ukazne vrstice s pomočjo pripomočka curl proti naslovu IP vaše naprave, localhostu ali omrežnemu vmesniku dockerja na vratih 81. Z ukazno vrstico IP prikažite naslove IP omrežnega vmesnika.

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

7. Če želite obiskati spletno stran vsebnika iz svojega omrežja, odprite brskalnik na oddaljeni lokaciji in uporabite protokol HTTP, naslov IP naprave, v kateri se izvaja vsebnik, ki ji sledi vrata 81, kot je prikazano na spodnji sliki.

http://ip-address:81

8. Če želite ugotoviti, kateri procesi se izvajajo v vsebniku, izdajte naslednji ukaz:

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

9. Za ustavitev ukaza docker stop izdaje vsebnika, ki mu sledi ID ali ime vsebnika.

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

10. Če želite vsebniku dodeliti opisno ime, uporabite možnost --name , kot je prikazano v spodnjem primeru:

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

Zdaj se lahko na vsebnik sklicujete za manipulacijo (zagon, zaustavitev, vrh, statistika itd.) Samo z dodeljenim imenom.

# docker stats my-www

3. korak: Ustvarite sistemsko konfiguracijsko datoteko za Docker Container

11. V CentOS/RHEL lahko ustvarite sistemsko konfiguracijsko datoteko in upravljate vsebnik, kot običajno za katero koli drugo lokalno storitev.

Na primer, z naslednjim ukazom ustvarite novo sistemsko datoteko z imenom, recimo apache-docker.service :

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

odlomek 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. Ko končate z urejanjem datoteke, jo zaprite, znova naložite demon systemd, da odraža spremembe, in zaženite vsebnik z izdajo naslednjih ukazov:

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

To je bil le preprost primer tega, kar lahko naredite s preprostim Dockerfileom, vendar lahko vnaprej zgradite nekaj precej dovršenih aplikacij, ki jih lahko v nekaj sekundah zaženete z minimalnimi sredstvi in trudom.

Nadaljnje branje: