Hajókázás Dockerrel 2. rész: Evezőcsapások ShiwaForce Admin 2015. október 20

Hajókázás Dockerrel 2. rész: Evezőcsapások

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

image02

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:

image07

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:

image06

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