Elindulunk
Mielőtt folytatnánk a munkát újra életre kell kelteni a Dockeres környezetünket. Adjuk ki tehát a már ismert parancsokat:
Indítsuk el a docker hoszt-ot (“docker engine”-ként is szokták emlegetni):
$ docker-machine start default
Tegyük a környezeti változókat elérhetővé, hogy parancssorból folytatni tudjuk a munkát:
$ eval "$(docker-machine env default)"
Ellenőrizzük le, hogy minden a tervek szerint elindult és környezetünk készen áll:
$ docker-machine env default
Kiegészítjük a Dockerfile-t
Ha minden rendben (az elmúlt részben kapott válaszokat kapjuk a Dockertől), akkor lássunk is neki. Kedvenc szerkesztőnkkel nyissuk meg a korábban elkészített Dockerfile-unkat, majd egészítsük ki a file-t az alábbiakkal:
$ vim Dockerfile
Nézzük sorról sorra. Vegyünk egy alap Ubuntu-t:
FROM ubuntu
Adjuk meg a kötelező “szerzőt”:
MAINTAINER <your-name-goes-here>
Frissítsük a csomagjainkat:
RUN apt-get -y update
Telepítsük fel a szükséges kiegészítő csomagokat:
RUN apt-get install -y wget dialog net-tools
Telepítsünk egy Nginx-et, ez lesz a web-kiszolgálónk:
RUN apt-get install -y nginx
Távolítsuk el az alapértelmezett konfigurációs file-ját, hiszen egy sajátot írunk majd:
RUN rm -v /etc/nginx/nginx.conf
…és itt jön egy hatalmas trükk: a helyi file-rendszerünkből adjunk a Docker-ben futó Nginx-hez egy lokális konfigurációs file-t:
ADD nginx.conf /etc/nginx/
vagyis, a hoszt operációs rendszerünkben a Dockerfile nevű file mellé majd létrehozunk egy nginx.conf nevű file-t és ezt hozzáadjuk (“ADD”) a docker container-en belül(!) lévő /etc/ mappához.
Állítsuk be az Nginx-et úgy, hogy az előtérben (foreground) fusson:
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
Nyissuk meg a container-en a 80-as portot a HTTP kiszolgáláshoz:
EXPOSE 80
És végül indítsuk el az Nginx-et (a container-en belül):
CMD service nginx start
Elkészítjük az új image-et
Ha mindez megvan, akkor a fenti Dockerfile alapján elkészíthetjük új image-ünket:
$ docker build -t my-first-docker-image
Vajon látjuk a listában?
$ docker images
Vajon fut?
$ docker ps -a
Elkészítjük az Nginx konfigurációs file-ját
Remek. Viszont ezzel még nem vagyunk készen, még el kell készítenünk a lokális nginx.conf file-t. Íme:
$ touch nginx.conf $ vim nginx.conf
…majd tegyük bele az alábbi kód-részletet:
error_log stderr; pid nginx.pid; http { access_log off; server { listen 80; location / { return 200; } } } events {}
A file-unk ezek után így néz ki:
A fenti konfigurációs részlet a lehető legegyszerűbb beállításokat tartalmazza, vagyis azt, ha a szerverünkön az alapértelezett útvonalat (/) meghívjuk, akkor adjon vissza egy 200 OK státusz kódot. Ennyi.
Teszteljük le az elkészült konfigurációt
Indítsunk el az image-ünkből egy példányt (egy container-t), és egyúttal nyissuk is ki a 80-as portot:
$ docker run -d --name my-first-docker-image -p 80:80 my-first-docker-image
Nézzük meg, fut-e a container-ünk:
$ docker ps -a
Igen, ott látszik a listában:
Küldjünk a webszervernek egy kérést:
$ curl -I http://192.168.99.100
Ha minden jól megy, akkor a visszatérő fejlécben egy 200-as OK kódot kapunk vissza. Huh, készen is vagyunk.
Mi tanultunk ebből a példából?
Az egyik legfontosabb, hogy a container-en belülre el tudunk helyezni lokális file-okat, gyakorlatilag hozzá tudjuk adni (“ADD”) a file-okat egy-egy “belső” útvonalhoz.
Parancsokat is ki tudunk adni a container-en belül a CMD előtaggal.
Erre a két lehetőségre már számos bonyolultabb lépést is ráépítehtünk. De erről bővebben majd a következő részben lesz szó.
Állítsuk meg futó container-ünket, és a már ismert módon állítsuk le a Docker hosztot.
$ docker ps -a $ docker stop my-first-docker-image $ docker-machine stop default