docker-compose Zelfstudie
Aan de slag met Docker-Compose
Zoeken…
Opmerkingen
Compose is een hulpmiddel voor het definiëren en uitvoeren van Docker-toepassingen met meerdere containers. Met Compose gebruikt u een Compose-bestand om de services van uw toepassing te configureren. Vervolgens maakt en start u met een enkele opdracht alle services vanuit uw configuratie. Raadpleeg de lijst met functies voor meer informatie over alle functies van Compose.
Het gebruik van Compose is in feite een proces in drie stappen.
- Definieer de omgeving van uw app met een
Dockerfilezodat deze overal kan worden gereproduceerd. - Definieer de services waaruit uw app in
docker-compose.ymlzodat ze samen in een geïsoleerde omgeving kunnen worden uitgevoerd. - Voer ten slotte
docker-compose upen Compose start en voert uw hele app uit.
Installatie
Als u Docker op OS X of Windows gebruikt, moet docker-compose worden opgenomen in de installatie van Docker voor Windows of Docker Toolbox.
Op Linux kunt u de nieuwste binaire bestanden rechtstreeks van de GitHub-releasepagina ophalen: https://github.com/docker/compose/releases
U kunt de specifieke release installeren met de volgende opdrachten:
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Raadpleeg de documentatiepagina voor meer informatie
Maak een eenvoudige applicatie
Dit voorbeeld komt uit het officiële document. Stel dat u een python-toepassing hebt die redis als backend gebruikt. Nadat u Dockerfile , maakt u een docker-compose.yml bestand als volgt:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
Dan lopen docker-compose up wil het instellen van de gehele applicatie bestaat uit: python app en herverdeling.
-
version: '2'is de versie van de syntaxis van het docker-bestand -
services:is een sectie die de uit te voeren services beschrijft -
web:enredis:zijn de namen van de services die moeten worden gestart, hun inhoud beschrijft hoe docker containers voor die services moet starten -
depends_onimpliceert een afhankelijkheid van web voor redis en daarom startredis-compose eerst derediscontainer en vervolgens de web-container. Niettemin wachtredisdocker-composeniet totdat derediscontainer gereed is voordat dewebcontainer wordt gestart. Om dit te bereiken, moet u een script gebruiken dat de start van de applicatieserver of wat dan ookredistotdat derediscontainer aanvragen kan uitvoeren.
Een sectie volumes en netwerken kan ook worden toegevoegd. Het gebruik van het volume-gedeelte zorgt voor een losgekoppeld volume dat onafhankelijk van het gedeelte voor het samenstellen van de docker kan leven. Het netwerkgedeelte heeft een soortgelijk resultaat.
Het gedeelte services opnieuw bewerken zou als volgt moeten worden aangepast:
redis:
image: redis
volumes:
- redis-data:/code
networks:
-back-tier
Voeg vervolgens de volgende secties toe aan de onderkant van het dock 2-bestand.
volumes:
# Named volume
redis-data:
driver: local
networks:
back-tier:
driver: bridge
redis-data biedt een toegankelijk label uit de servicessectie. driver:local stelt het volume in op het lokale bestandssysteem.
back-tier stelt het label van de netwerksectie in als toegankelijk in de servicessectie als overbrugd.
Voer de opdracht uit in de Docker-compose-service
docker-compose run service-name command
Als u bijvoorbeeld rake db:create in uw web wilde uitvoeren, zou u de volgende opdracht gebruiken:
docker-compose run web rake db:create
Docker Compose installeren
Als u een foutmelding
Permission denied, voert usudo -ivoor de twee onderstaande opdrachten en sluit u af.
- Trek Docker Compose naar
/usr/local/bin/docker-compose.
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
U kunt versie
1.7.1aanpassen aan uw gewenste versie. Probeer een versie van https://github.com/docker/compose/releases te krijgen
- Pas uitvoerbare machtigingen toe op het binaire bestand.
chmod +x /usr/local/bin/docker-compose
- Test de installatie.
docker-compose --version
Verwachte docker-compose versie 1.7.1, build 0a9ab35
Docker Stel hallo wereld samen
Een zeer eenvoudige docker-compose.yml ziet er zo uit:
version: '2'
services:
hello_world:
image: ubuntu
command: [/bin/echo, 'Hello world']
Dit bestand zorgt ervoor dat er een hello_world service is, die is geïnitialiseerd vanuit de ubuntu:latest afbeelding en dat, wanneer het wordt uitgevoerd, het gewoon echo 'Hello world'
Als u zich in de folder van de folder (en het bevat dit docker-compose.yml bestand), kunt u docker-compose up en zou u moeten zien
Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
Hiermee is de container gemaakt op basis van de ubuntu-afbeelding en is de opdracht uitgevoerd die is opgegeven op de docker-compose.yml
Docker-Compose gebruikt de mapnaam als projectnaam om containers en netwerken te prefixen. Om een andere projectnaam in te stellen, kunt u ofwel docker-compose --project-name NAME {up|down|...} noemen of u plaatst een bestand met de naam .env naast uw docker-compose.yml en schrijft COMPOSE_PROJECT_NAME=name in het. Vermijd lange projectnamen met koppeltekens (-), omdat docker bahaves vreemd samenstelt met dit soort namen.
Opmerking: met docker-compose kunt u meerdere docker-containers op één host uitvoeren. Als u meerdere containers op meer dan één knooppunt wilt uitvoeren, raadpleeg dan een oplossing zoals zwerm / kubernetten.
Ruby on Rails met docker-compose
Als u de docker-app voor rails wilt gebruiken en de database wilt gebruiken, moet u weten dat alle gegevens in de docker-container worden vernietigd (tenzij u de container specifiek configureert voor het bewaren van gegevens) Soms moet u een docker-container maken met een toepassing en koppel deze aan een oude container met een database.
Als een voorbeeld van rails-applicatie, gebruikte ik een eenvoudige app. U kunt het maken met de opdracht:
rails new compose-app --database=postgresql
Natuurlijk moet u vooraf rails, robijn, enz. Installeren.
Maak vervolgens Dockerfile in uw project en stel deze gegevens hierop in:
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
Volgende stap - maak docker-compose.yml met de gegevens:
version: '2'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
volumes:
- .:/compose-app
ports:
- "80:80"
depends_on:
- db
U kunt 80-poort (-p 80) vervangen door een andere.
De sectie Ontwikkelen van database.yml-configuratie moet worden gewijzigd in:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
U kunt nu afbeeldingen maken met de opdracht:
docker-compose build
(Voer dit uit in de projectmap)
En begin allemaal met:
docker-compose up
Als alles correct is gedaan, kunt u logboeken vanaf rails in de console zien.
Sluit console. Het zal werken.
Als u alleen de container met de rails-toepassing zonder de database wilt verwijderen, moet u deze vervolgens in de projectmap uitvoeren:
docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
Er wordt een nieuwe container met rails-app gemaakt en gelanceerd.