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
Dockerfile
zodat deze overal kan worden gereproduceerd. - Definieer de services waaruit uw app in
docker-compose.yml
zodat ze samen in een geïsoleerde omgeving kunnen worden uitgevoerd. - Voer ten slotte
docker-compose up
en 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_on
impliceert een afhankelijkheid van web voor redis en daarom startredis
-compose eerst deredis
container en vervolgens de web-container. Niettemin wachtredis
docker-compose
niet totdat deredis
container gereed is voordat deweb
container wordt gestart. Om dit te bereiken, moet u een script gebruiken dat de start van de applicatieserver of wat dan ookredis
totdat deredis
container 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 -i
voor 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.1
aanpassen 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.