Docker Compose Tutorial

Docker Compose Tutorial
Dockers popularitet som utviklingsverktøy øker. Docker har pustet nytt liv i containerbevegelsen. Utviklere liker å bruke det fordi det er raskt og lett å lære. Det hjelper utviklingsteamene med å dele standardmiljøer uten å bekymre deg for å kaste bort tid og ressurser.

Utviklere kan sette opp ønsket miljø i en Docker -beholder, lagre beholderen som et bilde og dele det enkelt med utviklingsteamene sine. Prosessen fungerer bra for en enkelt beholder. Imidlertid er miljøer med flere container vanskeligere å opprettholde. Docker Compose gir løsningen.

Med Docker Compose kan utviklere definere en YAML -fil for å konfigurere konfigurasjonen for flere tjenester. Da kan de starte multi-container-tjenestene med en enkelt kommando. Det forenkler prosessen med å jobbe med multi-container applikasjoner.

Forutsetning

Vi antar at du har en grunnleggende forståelse av Docker. Ellers, se på Hvordan installere og bruke Docker på Ubuntu. Eksemplene bruker WordPress, MySQL, Kolbe og Python. Imidlertid er ingen forkunnskaper om disse verktøyene nødvendig.

Docker -komponeringsprosess: på et øyeblikk

  1. Definer applikasjonsmiljø: Bruk Dockerfile for å definere appmiljøet for å gjøre det enkelt reproduserbar.
  2. Definer Docker Compose Environment: Bruk Docker-Compose.YML for å definere tjenestene i applikasjonen.
  3. Kjør applikasjon: Bruk Docker-Compose Up for å kjøre Multi-Container-applikasjonen.

Eksempel Docker komponerer fil

Versjon: '3'
tjenester:
DB:
Bilde: MySQL: 5.7
Volum:
- db_data:/var/lib/mysql
Start på nytt: Alltid
miljø:
Mysql_root_password: rootpassword123
Mysql_database: WordPress
Mysql_user: wordpress_user
Mysql_password: wordpress_password
WordPress:
kommer an på:
- db
Bilde: WordPress: Siste
Porter:
- "8000: 80"
Start på nytt: Alltid
miljø:
WordPress_DB_HOST: DB: 3306
Wordpress_db_user: wordpress_user
WordPress_DB_Password: WordPress_Password
Volum:
db_data:

Hvis ovennevnte docker-komponering.YML -filen blir påkalt med Docker Up, den vil opprette en WordPress -tjeneste som kobles til en MySQL -databasetjeneste.

Docker komponerer kommandoer

Du kan bruke Docker -Compose -hjelp For å finne Docker Compose -kommandoen

Når skal du bruke Docker Compose?

For øyeblikket brukes Docker hovedsakelig i utviklingsmiljøer. Noen av de populære bruksområdene til Docker -komponering er:

1. Prototyping og utvikling

Bruksprototyping og utviklingsprosess bremses på grunn av mangelen på standardmiljøer. Utviklere må ofte kaste bort tid på å sette opp det samme miljøet flere ganger. Å lese guider for å sette opp miljøparametere er også tidkrevende.

Docker Compose forenkler prosessen. Når et miljø er konfigurert, kan utviklingsteam dele Docker -filene i hele organisasjonen. Det kan spare en enorm mengde tid bortkastet på konfigurasjonsadministrasjonsproblemer.

2. Testing og automatisering av prosesser

Kontinuerlig integrasjon og kontinuerlig levering (CI/CD) blir standardprosesser i dagens smidige utviklingsmiljøer. Automatisert testing er en viktig komponent i CI/CD. Docker Compose hjelper med å definere den automatiserte testprosessen. Alle komplikasjonene ved å starte nye tjenester kan settes pent i Docker -konfigurasjonsfiler. Testere kan bruke disse filene til å skyte opp midlertidige tjenester, kjøre tekstskript og ødelegge tjenestene etter å ha samlet testresultatene. Det sparer tid fordi manuelt starttjenester er tidkrevende og feilutsatt.

3. Fremtidig produksjonsdistribusjon

Docker brukes hovedsakelig i utviklingsmiljøer. Når Docker-funksjonalitetene blir mer robuste, vil Docker imidlertid bli brukt til mer arbeidsnivåarbeid. Docker Compose kan være et verdifullt verktøy for distribusjoner med en vert.

Trening: En enkel webapplikasjon

La oss prøve hånden på en enkel Python -basert webapplikasjon for å prøve Docker Compose. Vi vil bruke Flask Web Framework for å opprette en applikasjon som kommuniserer med en databasedatabase Redis for å holde rede på hvor mange ganger webapplikasjonen er besøkt.

Katalogstrukturen vil se slik ut:

Simple_app
├── Innhold
│ ├── Dockerfile
│ └── kode
│ ├── Simple_app.py
│ └── krav.tekst
└── Docker-kompose.yml

Katalogstrukturen ovenfor er ikke nødvendig for en grunnleggende applikasjon. Imidlertid viser det hvordan organisering av informasjon kan være nyttig for mer effektiv implementering av Docker -komponering.

Trinn 1: Lag katalogstruktur og filer

La oss lage katalogstrukturen og de nødvendige filene:

$ mkdir simple_app
$ mkdir simple_app/innhold
$ mkdir simple_app/innhold/kode
$ Touch Simple_App/Docker-Compose.yml
$ touch simple_app/content/dockerfile
$ Touch Simple_App/Content/Code/Simple_App.py
$ Touch simple_app/innhold/kode/krav.tekst

Touch -kommandoen er bare å lage tomme filer. Du kan gå inn i mappene manuelt og opprette filene.

Trinn 2: Nettapplikasjonskode

Kodemappen inneholder webapplikasjonskoden. Sett følgende inn Simple_app.py fil:

Fra kolbeimportkolbe
fra Redis import redis
app = kolbe (__ name__)
Redis = Redis (vert = 'Redis', port = 6379)
@App.rute('/')
def hei ():
Count = Redis.incr ('treff')
komme tilbake 'Velkommen til Docker komponerer leksjoner!

Du har besøkt dette nettstedet ganger.\ n '.Format (tell)
if __name__ == "__main__":
app.løp (vert = "0.0.0.0 ", debug = sant)

Ovennevnte applikasjon oppretter en velkomstside som viser antall ganger siden er besøkt. Besøkdisken opprettholdes i en Redis -database. Redis bruker port 6379 som standard lytteport. Neste, fyll ut krav.tekst fil:

Kolbe
Redis

Dette vil gjøre det mulig for PIP å installere Python -avhengigheter på nettbeholderen. Vi vil kjøre Pip som en del av å initialisere tjenesten vår.

Trinn 3: Dockerfile

Fyll simple_app/content/dockerfile med følgende kode:

Fra Python: 3.6.3-Jessie
LEGG TIL ./kode /kode
WorkDir /Code
Kjør Pip Install -r -krav.tekst
Cmd ["python", "simple_app.py "]

Ovennevnte Dockerfile oppnår følgende:

  1. Oppretter et bilde fra Python: 3.6.3-Jessie. Hvis den ikke er tilgjengelig lokalt, laster den ned den fra Docker Hub.
  2. Kopierer elementer i simple_app/innhold/kode inn i /kode på beholderen
  3. Sett /kode som arbeidskatalog på beholderen
  4. Bruker PIP for å installere Python -avhengighetene
  5. Angir standard utgangspunkt for at beholderen skal kjøre Python Simple_app.py.

Trinn 4: Docker komponerer

Fyll simple_app/docker-compose.yml fil med følgende kode:

Versjon: '3'
tjenester:
Web:
bygge: ./innhold
Porter:
- "5000: 5000"
Volum:
- ./innhold/kode:/kode
Redis:
Bilde: "Redis: Alpine"

De Docker-Compose.yml Fil definerer to containere: Web og Redis. Den bruker Docker Compose versjon 3 -format.

For webtjenesten:

  • Bygger webtjenesten ved hjelp av simple_app/content/dockerfile
  • Fremover port 5000 fra nettbeholderen til Host's Port 5000. Port 5000 er standardport for kolbeapplikasjoner.
  • Volum simple_app/innhold/kode er montert som /kode på beholderen. Det betyr at hvis du endrer noe i simple_app/innhold/kode, det vil gjenspeiles i /kode mappe på nettbeholderen.

For Redis -tjenesten:

  • Bruker Redis: Alpine Image fra Docker Hub for å lage Redis -tjenesten.

Trinn 5: Kjørende applikasjoner ved hjelp av Docker -komponering

Søknaden er klar for distribusjon. Fra Simple_app mappe, kjør følgende kommando:

$ Docker-Compose Up

Utgangen skal starte slik:

$ Docker-Compose Up
Bygging av nettet
Trinn 1/5: Fra Python: 3.6.3-Jessie
3.6.3-Jessie: Trekk fra bibliotek/Python
85B1F47FBA49: Last ned [===========>] 12.43MB/52.6MB
5409e9a7fa9e: Last ned komplett
661393707836: Last ned [===============>] 13.71MB/43.23MB
1BB98C08D57E: Last ned [>] 1.081MB/134.7MB
..

Når alle bildene er bygget og kjører, bør du se følgende:

Status: Lastet ned nyere bilde for Redis: Alpine
Opprette SimpleApp_redis_1 ..
Opprette SimpleApp_Web_1 ..
Opprette SimpleApp_redis_1
Opprette SimpleApp_web_1 ... ferdig
Fest til SimpleApp_Redis_1, SimpleApp_Web_1
redis_1 | 1: M 21. oktober 02:06:33.639 * Klar til å godta tilkoblinger
web_1 | * Kjører på http: // 0.0.0.0: 5000/ (trykk CTRL+C for å slutte)
web_1 | * Omstart med stat
web_1 | * Debugger er aktiv!
web_1 | * Debugger Pin: 237-189-083

Du kan teste applikasjonen ved å gå til http: // localhost: 5000:. Hvis du oppdaterer siden noen ganger, bør den gjenspeile antall besøk. Du kan sjekke statusen til tjenester eller containere som kjører:

$ docker ps
Container ID Image Command opprettet statusporter navn
22852e0ad98a Redis: Alpine "Docker-Entrypoint ..." for 5 minutter siden opp 5 minutter 6379/TCP SimpleApp_Redis_1
d51739d0a3ac simpleapp_web "python simple_app.py "for 5 minutter siden opp 5 minutter 0.0.0.0: 5000-> 5000/TCP SimpleApp_Web_1

Hvis du starter et bash -skall i SimpleApp_Web_1 (containernavnet ditt kan variere), vil du bli logget inn på arbeidskatalogen /koden:

$ docker exec -it simpleapp_web_1 bash
root@d51739d0a3ac:/kode# ls
krav.TXT Simple_App.py
root@d51739d0a3ac:/kode#

De /kode Katalogen skal gjenspeile innholdet i simple_app/innhold/kode inni den som vist over (Simple_app.py og krav.tekst).

Hvis du oppdaterer din Simple_app.pysin linje fra:

komme tilbake 'Velkommen til Docker komponerer leksjoner!

Du har besøkt dette nettstedet ganger.\ n '.Format (tell)

Til:

komme tilbake 'Velkommen til Docker komponerer leksjoner!

Er du fascinert?

Du har besøkt dette nettstedet ganger.\ n '.Format (tell)

Det skal reflektere over http: // localhost: 5000:

Trinn 6: Slå av tjenestene

Du kan stoppe applikasjonen ved å bruke:

$ Docker-Compose Stop
Stopper SimpleApp_redis_1 ... ferdig
Stopper SimpleApp_Web_1 ... ferdig

De monterte volumene vil vedvare. Du kan fjerne containerne helt inkludert volumene ved å bruke følgende kommando.

$ Docker-Compose Down-Volume
Fjerne SimpleApp_redis_1 ... ferdig
Fjerne simpleApp_web_1 ... ferdig
Fjerne nettverk SimpleApp_Default

Gratulerer! Du har mestret det grunnleggende om Docker Compose.

Videre studier

For videre studier, se på følgende dokumentasjon:

  • Docker -dokumentasjon
  • Docker komponerer filreferanse
  • Docker komponerer nettverk

Referanser:

  • https: // dokumenter.Docker.com/komponering/oversikt/#utviklingsmiljøer
  • https: // dokumenter.Docker.com/komponer/getstarted/
  • https: // blogg.Kodeship.com/orkestrate-containers-for-utvikling-med-docker-kompose/
  • https: // www.sumologisk.com/blogg/devops/how-to-build-applications-docker-compose/
  • https: // dokumenter.Docker.com/compose/wordpress/#definer-the-project