Android

Kako izraditi docker slike s dockerfile

Using Jib to build Docker Images - Take5

Using Jib to build Docker Images - Take5

Sadržaj:

Anonim

Slika Dockera je nacrt Docker spremnika koji sadrži aplikaciju i sve što je potrebno za pokretanje aplikacije. Spremnik je vrijeme izvođenja slike.

U ovom tutorialu objasnit ćemo što je Dockerfile, kako ga stvoriti i kako napraviti Docker sliku s Dockerfileom.

Što je Dockerfile

Dockerfile je tekstualna datoteka koja sadrži sve naredbe koje bi korisnik mogao pokrenuti u naredbenom retku za stvaranje slike. Sadrži sve upute potrebne Dockeru za izradu slike.

Slike dockera sastoje se od niza slojeva datotečnog sustava koji predstavljaju upute u Dockerfileu slike koji čini izvršnu softversku aplikaciju.

Docker datoteka ima sljedeći oblik:

# Comment INSTRUCTION arguments

INSTRUCTION nisu mala i mala slova, ali konvencija je upotreba UPPERCASE za njegova imena.

Ispod je popis kratkih opisa nekih od najčešće korištenih dokumenata Dockerfile:

  • ARG - Ova upute vam omogućuje definiranje varijabli koje se mogu proslijediti u vrijeme izrade. Također možete postaviti zadanu vrijednost. FROM - Osnovna slika za izgradnju nove slike. Ova uputa mora biti prva instrukcija bez komentara u Dockerfileu. Jedina iznimka od ovog pravila je kada želite koristiti varijablu u argumentu FROM . U ovom slučaju, FROM može prethoditi jednoj ili više ARG uputa. LABEL - Koristi se za dodavanje metapodataka slici, kao što su opis, verzija, autor.. itd. Možete odrediti više LABEL , a svaka LABEL uputa je par ključ-vrijednost. RUN - Naredbe navedene u ovoj uputi izvršavat će se tijekom postupka sastavljanja. Svaka RUN upute stvara novi sloj na vrhu trenutne slike. ADD - Koristi se za kopiranje datoteka i mapa iz navedenog izvora na određeno odredište na docker imageu. Izvor mogu biti lokalne datoteke ili mape ili URL. Ako je izvor lokalna arhiva katrana, on se automatski raspakira u Docker sliku. COPY - Slično kao ADD ali izvor može biti samo lokalna datoteka ili mapa. ENV - Ova vam uputa omogućuje definiranje varijable okoline. CMD - koristi se za određivanje naredbe koja će se izvršiti kada pokrenete spremnik. U svom Dockerfileu možete koristiti samo jednu CMD upute. ENTRYPOINT - Slično kao u CMD , ova uputa definira koja će se naredba izvršiti prilikom pokretanja spremnika. WORKDIR - Ova direktiva postavlja trenutni radni imenik za upute za RUN , CMD , ENTRYPOINT , COPY i ADD . KORISNIK - Postavite korisničko ime ili UID za korištenje sljedećih uputa za RUN , CMD , ENTRYPOINT , COPY i ADD . VOLUME - Omogućuje vam postavljanje direktorija glavnog računala na spremnik. EXPOSE - Koristi se za određivanje porta na kojem spremnik sluša tijekom izvođenja.

Da biste izuzeli datoteke i mape dodavanjem slici, stvorite .dockerignore datoteku u direktoriju konteksta. Sintaksa .dockerignore slična je .gitignore datoteci.

Za potpunu referencu i detaljno objašnjenje Dockerfile upute pogledajte službenu stranicu Dockerfile.

Napravite dockerfile

Najčešći scenarij prilikom stvaranja Docker slika je izvlačenje postojeće slike iz registra (obično iz Docker Hub-a) i navođenje promjena koje želite izvršiti na osnovnoj slici. Najčešće korištena osnovna slika pri stvaranju Docker slika je Alpine jer je mala i optimizirana za pokretanje u RAM-u.

Docker Hub je usluga registracije utemeljena na oblaku, koja se između ostalih funkcija koristi za čuvanje Docker slika u javnom ili privatnom spremištu.

U ovom ćemo primjeru stvoriti Docker sliku za Redis poslužitelj. Kao osnovnu sliku koristit ćemo najnoviji ubuntu 18.04.

Prvo stvorite direktorij koji će sadržavati Dockerfile i sve potrebne datoteke:

mkdir ~/redis_docker

Otvorite direktorij i stvorite sljedeći Dockerfile:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Objasnimo značenje svakog od redaka u Dockerfileu:

  • U prvom redu definiramo osnovnu sliku. Uputa za RUN koja započinje u retku 3 ažurirat će apt indeks, instalirati paket "redis-server" i očistiti prikladnu predmemoriju. Naredbe koje se koriste u uputama su iste kao i naredbe koje biste koristili za instaliranje redisa na Ubuntu poslužitelj.Uputa EXPOSE definira vrata na kojima poslužuje redis poslužitelj. U posljednjem retku koristimo CMD upute za postavljanje zadane naredbe koji će se izvesti kad se spremnik pokrene.

Spremite datoteku i zatvorite uređivač.

Izgradnja slike

Sljedeći korak je izgradnja slike. Da biste to učinili, iz imenika u kojem se nalazi Dockerfile pokrenite sljedeću naredbu:

docker build -t linuxize/redis.

Opcija -t određuje naziv slike i, po želji, korisničko ime i oznaku u formatu 'korisničko ime / ime slike: tag'.

Izlaz procesa sastavljanja izgledat će ovako:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Kad je proces sastavljanja nova slika bit će navedena na popisu slika:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Trčanje spremnika

Sada kada je slika stvorena pokrenite spremnik iz nje trčeći:

docker run -d -p 6379:6379 --name redis linuxize/redis

Opcije -d govore Docker-u da pokreće spremnik u odvojenom načinu, opcija -p 6379:6379 objavit će port 6379 glavnom stroju, a opcija --name redis određuje naziv spremnika. Posljednji argument linuxize/redis je naziv slike koja se koristi za pokretanje spremnika.

Kada se spremnik pokrene, koristite sljedeću naredbu za popis svih spremnika:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Da biste provjerili radi li sve kako treba, redis-cli treba povezati s docker spremnikom:

redis-cli ping

Poslužitelj redis trebao bi odgovoriti PONG .

Zaključak

Ovaj je udžbenik pokrivao samo osnove korištenja Dockerfilesa za izgradnju slika. Da biste saznali više o pisanju Dockerfiles-a i preporučenim najboljim postupcima, pogledajte Najbolje prakse za pisanje Dockerfiles-a.

lučki radnik