docker-compose Handledning
Komma igång med docker-compose
Sök…
Anmärkningar
Compose är ett verktyg för att definiera och köra multi-container Docker-applikationer. Med Compose använder du en Compose-fil för att konfigurera applikationens tjänster. Med hjälp av ett enda kommando skapar du och startar alla tjänster från din konfiguration. För att lära dig mer om alla funktioner i Compose, se listan över funktioner.
Att använda Compose är i princip en trestegsprocess.
- Definiera din apps miljö med en
Dockerfile
så att den kan reproduceras var som helst. - Definiera de tjänster som utgör din app i
docker-compose.yml
så att de kan köras tillsammans i en isolerad miljö. - Slutligen, kör
docker-compose up
composedocker-compose up
och Compose startar och kör hela appen.
Installation
Om du kör Docker på OS X eller Windows bör docknings-kompos ingå i installationen av Docker för Windows eller Docker Toolbox.
På Linux kan du få de senaste binära programmen direkt från GitHub-utgåvan: https://github.com/docker/compose/releases
Du kan installera den specifika versionen med följande kommandon:
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
För mer information, se dokumentationssidan
Skapa en enkel applikation
Detta exempel kommer från det officiella dokumentet. Anta att du har en pythonapplikation som använder redis som backend. När du har skrivit Dockerfile
skapar du en docker-compose.yml
fil så här:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
docker-compose up
att ställa in hela applikationen inkluderar: python-app och återigen.
-
version: '2'
är versionen av docker-compose-filsyntax -
services:
är ett avsnitt som beskriver de tjänster som ska köras -
web:
andredis:
är namnen på de tjänster som ska startas, deras innehåll beskriver hur dockaren ska starta containrar för dessa tjänster -
depends_on
innebär ett beroende av webben för att återuppta och därför startar dockare-redis
behållaren och sedanredis
. Ändå gördocker-compose
inte vänta tillsredis
behållaren är klar innanweb
container. För att uppnå detta måste du använda ett skript som försenar starten av applikationsservern eller vad som helst tillsredis
behållaren kan utföra förfrågningar.
En volym- och nätverksdel kan också läggas till. Användning av volymavsnittet möjliggör frånkopplad volym som kan leva oberoende av avsnittet om dockningskomponeringstjänster. Nätverksavsnittet har ett liknande resultat.
Återuppsättningen av tjänsterna måste justeras så:
redis:
image: redis
volumes:
- redis-data:/code
networks:
-back-tier
Lägg sedan till följande avsnitt längst ner i dockerkomponera version 2-filen.
volumes:
# Named volume
redis-data:
driver: local
networks:
back-tier:
driver: bridge
redis-data
ger en tillgänglig etikett från servicesektionen. driver:local
ställer in volymen till det lokala filsystemet.
back-tier
ställer in nätverksavdelningsetiketten så att den är tillgänglig i tjänstesektionen som överbryggad.
Kör kommandot i docker-compose-tjänst
docker-compose run service-name command
Om du till exempel vill köra rake db:create
i din web
skulle du använda följande kommando:
docker-compose run web rake db:create
Installera Docker Compose
Om du får ett
Permission denied
fel, körsudo -i
innan de två kommandona nedan och avsluta.
- Pull Docker Compose to
/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
Du kan ändra version
1.7.1
att den matchar önskad version. Prova att få version från https://github.com/docker/compose/releases
- Tillämpa körbara behörigheter på det binära.
chmod +x /usr/local/bin/docker-compose
- Testa installationen.
docker-compose --version
Förväntad docker-compose version 1.7.1, build 0a9ab35
Docker Compose hej värld
En mycket grundläggande docker-compose.yml
ser ut så här:
version: '2'
services:
hello_world:
image: ubuntu
command: [/bin/echo, 'Hello world']
Den här filen gör det så att det finns en hello_world
tjänst, som har initialiserats från ubuntu:latest
bilden och att när den körs, den kör bara echo 'Hello world'
Om du befinner dig i folder
(och den innehåller denna docker-compose.yml
fil) kan du göra docker-compose up
och du borde se
Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
Detta skapade behållaren från ubuntu-bilden och körde kommandot som specificerades på docker-compose.yml
Docker-Compose
använder mappnamnet som projektnamn för att prefixa behållare och nätverk. För att ställa in ett docker-compose --project-name NAME {up|down|...}
projektnamn kan du antingen ringa docker-compose --project-name NAME {up|down|...}
eller så anger du en fil som heter .env
bredvid din docker-compose.yml
och skriver COMPOSE_PROJECT_NAME=name
i den. Undvik bättre långa projektnamn med bindestreck (-) eftersom dockaren komponerar bahaves konstiga med den här typen av namn.
Obs: docker-compose låter dig köra flera dockercontainrar på en enda värd. Om du vill köra flera behållare på mer än en nod, hänvisar du till lösning som svärm / kubernetes.
Ruby on Rails med docker-compose
Om du vill använda docker för rails-app och använda databas, måste du veta att all data i dockercontainern kommer att förstöras (såvida du inte konfigurerar behållaren specifikt för att spara data) Ibland måste du skapa en dockningscontainer med en applikation och bifoga den till en gammal behållare med en databas.
Som ett exempel på rails-applikation använde jag en enkel app. Du kan skapa det från kommandot:
rails new compose-app --database=postgresql
Naturligtvis måste du installera räls, rubin etc. i förväg.
Skapa sedan Dockerfile i ditt projekt och ställ in dessa data till det:
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
Nästa steg - skapa docker-compose.yml med data:
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
Du kan ersätta 80 port (-p 80) mot en annan.
Utveckla avsnittet av database.yml-konfigurering måste ändras till:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
Nu kan du bygga bilder från kommandot:
docker-compose build
(Kör detta i projektkatalogen)
Och börja allt från:
docker-compose up
Om allt görs korrekt kan du se loggar från räls i konsolen.
Stäng konsolen. Det kommer att fungera.
Om du bara vill ta bort behållaren med rails-applikationen utan databasen, måste du köra den sedan i projektkatalogen:
docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
Ny behållare med rälsapp skapas och lanseras.