Docker-compose

Våra regelbundna workshops kring vår build pipeline med Docker fortsätter.

Johan Elmström på Aptitude hostade denna Continuous Delivery Pipeline workshop. Den här gången blev vi bara fyra stycken. En hel flock andra DevOps-intresserade hade varit tvungna att kasta in handduken med skäl såsom sjukdom, VAB eller helt enkelt bara tagit fel på vecka.

Johan kunde stoltsera med ett alldeles nytt nätverk med 1000 MBit internet-access. Nätverket får alltid mycket uppmärksamhet på våra träffar när man sitter flera tillsammans och tankar operativsystemsavbildningar från internet hela tiden.

Vi singlade slant om vi skulle ge dagen till ELK eller till Docker-compose. Det blev Docker-compose. Senare visade det sig att myntet Mikael Sennerholm valt hade Docker-compose på bägge sidor.

Docker-compose är det nya namnet på Fig. För alla oss som fortfarande ser ut som fågelholkar nu är Docker-compose alltså ett kompakt sätt att gruppera ihop flera Docker-konfigurationer. Vi har precis den situationen här i pipelinen. För oss ersätter Docker-compose vår befintliga Vagrant-baserade lösning. Samma sak med Docker-compose blir snyggare och mer kompakt. Se https://docs.docker.com/compose/ och även http://www.fig.sh.

Toppdomänen .sh förresten, är den dedicerad för shell-script-relaterade ämnen? Efter närmare undersökning visade sig den tillhöra ön S:t Helena i Atlanten, ni vet den som när man var liten det alltid fanns en rövare på i spelet Den Försvunna Diamanten, och utan pengar kunde man ju inte ens åka båt därifrån och då var spelet slut och då blev man arg och ledsen.

denförsvunnadiamanten

Två nya docker-versioner har kommit sedan sist vi byggde pipeline tillsammans, men ingen ny Vagrant. Vagrant känns som ett gammalt spår. Vi konstaterar att maintainern för boot2docker-vagrant-box fortfarande inte tagit hand om Mikaels pull-request.

Vi började skriva en docker-compose.yml och konstaterade att man inte får ha tab-tecken i sådana filer.

Vi lyckades få en färdig image gocd/gocd-server att fungera. Funkade inte för en månad sedan, så det var positivt. Bleeding edge kan man kalla det, eller en förlorad månad, beroende på hur på man är.

Vi landade i en docker-compose.yml som såg ut så här:

repository:
  image: mattgruter/artifactory
  volumes:
    - data/artifactory/data:/artifactory/data
    - data/artifactory/logs:/artifactory/logs
  ports:
    - "18080:8080"
goserver:
  image: gocd/gocd-server
  volumes_from:
    - godata
  ports:
    - "28153:8153"
  environment:  
    - AGENT_KEY=388b633a88de126531afa41eff9aa69e
godata:
  build: gocd-data
goagent:
  build: go-agent
  volumes:
     - "/var/run/docker.sock:/var/run/docker.sock"
  links:
    - repository
    - goserver

repository är vårt maven-repo. Den sparar sitt repository i data-katalogen så att man slipper att tanka ned hela internet om man startar om pipelinen.

goserver är Thoughtworks Go Server och användargränssnittet. Det får in sin konfiguration via godata och cruise-config.xml.

goagent är den som hoppar igång och utför själva byggjobben.

Någonstans innan middagen dök vi på nästa problem:

Pulling repository java
Service 'goagent' failed to build: Get https://index.docker.io/v1/repositories/library/java/images: dial tcp: lookup index.docker.io on 10.0.2.3:53: server misbehaving

Det visade sig bero på Johans nya nätverk som krånglade på så vis att Mikael stokastiskt tappade paket. Jag och Mikael slog över på mobilt internet, då fungerade det plötsligt igen. Men för Johan fungerade det fortfarande. Mikael misstänkte att Johan saboterade just hans nät för att Johan skulle få ha kvar projektorsladden.

IMG_20150427_170946
Anders Ekdahl har hittat en lös nätverkssladd.

Med Johan i täten började pipelinen fungera igen, men vi fick Out of Memory när vi byggde. Det avhjälpte vi genom att ge boot2docker ger minne. Original har den 2GB vilket inte räcker för att köra både go-server, go-agent, artifactory, och applikationen med integrationstester samtidigt. Vi gav den 4GB istället:

$ boot2docker delete 
$ boot2docker init -m 4096 ... lots of output ... 
$ boot2docker info { ... "Memory":4096 ...}

Efter några mindre mentala missöden med att sätta environment för fel maskin i docker-compose fick vi pipelinen att gå igenom alla byggsteg och visa grönt.

Screen Shot 2015-05-02 at 15.09.03

Jaha. Då funkar allt. Vad ska vi hitta på nu? Klockan är ju bara barnet.

Hur gör man om man vill ha flera go-agenter för att kunna bygga snabbare?

Första förslaget var att göra copy-paste på entryt “goagent” i docker-compose.yml och skapa en “goagent2”. Det kändes sådär.

Efter några sekunders betänketid visade Mikael hur man egentligen gör:

$ docker-compose scale goagent=2
Creating dockerapplicationserver_goagent_2...
Starting dockerapplicationserver_goagent_2...

och efter några ögonblick ploppar den nya agenten upp i användargränssnittet:

Screen Shot 2015-05-02 at 15.08.19

Det var så vackert att vi nästan blev gråtfärdiga.

Men, invände någon sedan vi hämtat oss, den docker-instansen går igång på samma host. Hur får man igång en agent på ett eget järn? En lösning på det är Docker Swarm.

Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a single, virtual host.

IT Consultant at CAG Edge. Cloud and Continuous Delivery specialist, software developer and architect, Node.js, Java.

Publicerad i Continuous Delivery, DevOps, Java, Linux
2 comments on “Docker-compose
  1. Johan Rydström skriver:

    Synd att man inte kunde komma, ni verkar haft fantastisk progress. Tack för bra mötesanteckningar! 😀

    • Mikael Sennerholm skriver:

      Hej!

      Daniel, bra dokumentation som vanligt. Du glömde få med att en av anledningarna till att vi inte bytte till Compose tidigare är att det inte supportas på windows (ännu).

      Johan, du är så välkommen nästa gång, har du signat upp på github issuen om nästa möte?

      Missar tyvärr er kompetensbio, annars hade jag gärna joinat.

      Vill också slå ett slag för
      http://www.avegagroup.se/sv/Elevate/Seminariumforelasningar/Adaptiva-foretag/
      där jag ska visa hur man kan få upp pipelinen på 13 1/2 minut och förhoppnings blir det bra diskussioner.

      Mvh Mikael

Kategorier

LinkedIn Auto Publish Powered By : XYZScripts.com