docker-compose Samouczek
Rozpoczęcie pracy z docker-compose
Szukaj…
Uwagi
Compose to narzędzie do definiowania i uruchamiania aplikacji Docker dla wielu kontenerów. Z Compose używasz pliku Compose do konfigurowania usług aplikacji. Następnie za pomocą jednego polecenia utworzysz i uruchomisz wszystkie usługi z konfiguracji. Aby dowiedzieć się więcej o wszystkich funkcjach tworzenia, zobacz listę funkcji.
Korzystanie z komponowania jest zasadniczo procesem trzyetapowym.
- Zdefiniuj środowisko aplikacji za pomocą
Dockerfileaby można go było odtwarzać w dowolnym miejscu. - Zdefiniuj usługi, które składają się na twoją aplikację w
docker-compose.ymlaby mogły być uruchamiane razem w izolowanym środowisku. - Na koniec uruchom
docker-compose upa Compose uruchomi i uruchomi całą aplikację.
Instalacja
Jeśli korzystasz z Dockera w systemie OS X lub Windows, kompilacja dokera powinna być uwzględniona w instalacji Docker dla Windows lub Docker Toolbox.
W systemie Linux możesz pobrać najnowsze pliki binarne bezpośrednio ze strony wydania GitHub: https://github.com/docker/compose/releases
Możesz zainstalować konkretną wersję za pomocą następujących poleceń:
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
Więcej informacji znajduje się na stronie dokumentacji
Utwórz prostą aplikację
Ten przykład pochodzi z oficjalnego dokumentu. Załóżmy, że masz aplikację python używającą redis jako backendu. Po napisaniu Dockerfile utwórz docker-compose.yml plik tak:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
Następnie uruchom docker-compose up skonfiguruje całą aplikację obejmuje: aplikacja python i redis.
-
version: '2'jest wersją składni pliku skompilowanego przez dokera -
services:to sekcja opisująca usługi do uruchomienia -
web:iredis:to nazwy usług, które mają zostać uruchomione, ich treść opisuje, w jaki sposób doker powinien uruchomić kontenery dla tych usług -
depends_onimplikuje zależność sieci od redis i dlatego docker-compose najpierw uruchamia kontenerredisa następnie kontener web. Niemniej jednakdocker-composeredisnie czeka, aż kontenerredisbędzie gotowy przed uruchomieniem konteneraweb. Aby to osiągnąć, musisz użyć skryptu, który opóźnia uruchomienie serwera aplikacji lub cokolwiek innego, dopóki kontenerredismógł wykonywać żądań.
Można również dodać sekcję dotyczącą woluminów i sieci. Korzystanie z sekcji woluminów pozwala na odłączenie woluminu, który może żyć niezależnie od sekcji usług tworzenia dokerów. Sekcja sieci ma podobny wynik.
Sekcja usług redis musiałaby zostać dostosowana w następujący sposób:
redis:
image: redis
volumes:
- redis-data:/code
networks:
-back-tier
Następnie dodaj następujące sekcje na dole pliku tworzenia wersji 2 dokera.
volumes:
# Named volume
redis-data:
driver: local
networks:
back-tier:
driver: bridge
redis-data zapewnia dostępną etykietę w sekcji usług. driver:local ustawia wolumin na lokalny system plików.
back-tier ustawia etykietę sekcji sieci, aby była dostępna w sekcji usług jako zmostkowana.
Uruchom polecenie w usłudze dokowania-tworzenia
docker-compose run service-name command
Jeśli na przykład chcesz uruchomić rake db:create w swojej usłudze web , użyj następującego polecenia:
docker-compose run web rake db:create
Zainstaluj Docker Compose
Jeśli pojawi się błąd
Permission denied, uruchomsudo -iprzed dwoma poleceniami poniżej, a następnie zakończ.
- Pociągnij Docker Compose do
/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
Możesz zmienić wersję
1.7.1aby dopasować ją do żądanej wersji. Spróbuj pobrać wersję z https://github.com/docker/compose/releases
- Zastosuj uprawnienia do pliku binarnego.
chmod +x /usr/local/bin/docker-compose
- Przetestuj instalację.
docker-compose --version
Oczekiwana kompozycja dokerów w wersji 1.7.1, kompilacja 0a9ab35
Docker Utwórz świat cześć
Bardzo prosty docker-compose.yml wygląda następująco:
version: '2'
services:
hello_world:
image: ubuntu
command: [/bin/echo, 'Hello world']
Ten plik sprawia, że jest dostępna usługa hello_world , która została zainicjowana z ubuntu:latest obrazu i że po uruchomieniu uruchamia echo 'Hello world'
Jeśli znajdujesz się w katalogu folder (i zawiera docker-compose.yml plik docker-compose.yml ), możesz wykonać docker-compose up docker-compose.yml i powinieneś zobaczyć
Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
To utworzyło kontener z obrazu ubuntu i uruchomiło polecenie określone w docker-compose.yml
Docker-Compose używa nazwy folderu jako nazwy projektu do prefiksu kontenerów i sieci. Aby ustawić inną nazwę projektu, możesz wywołać docker-compose --project-name NAME {up|down|...} lub .env plik o nazwie .env obok docker-compose.yml i wpisać COMPOSE_PROJECT_NAME=name w to. Lepiej unikaj długich nazw projektów z łącznikami (-), ponieważ dokery tworzą dziwne nazwy tego typu.
Uwaga: program docker-compose umożliwia uruchamianie wielu kontenerów dokerów na jednym hoście. Jeśli chcesz uruchomić wiele kontenerów na więcej niż jednym węźle, zapoznaj się z rozwiązaniem takim jak rój / kubernetes.
Ruby on Rails z kompozycją dokera
Jeśli chcesz używać Dockera do aplikacji Rails i korzystać z bazy danych, musisz wiedzieć, że wszystkie dane w kontenerze Dockera zostaną zniszczone (chyba że skonfigurujesz kontener specjalnie do przechowywania danych). Czasami musisz utworzyć kontener Dockera z aplikację i dołącz ją do starego kontenera z bazą danych.
Jako przykład aplikacji szynowej użyłem prostej aplikacji. Możesz go utworzyć za pomocą polecenia:
rails new compose-app --database=postgresql
Oczywiście musisz wcześniej zainstalować szyny, rubin itp.
Następnie utwórz plik Docker w swoim projekcie i ustaw dla niego następujące dane:
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
Następny krok - utwórz docker-compose.yml z danymi:
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
Możesz wymienić port 80 (-p 80) na inny.
Sekcja rozwijania konfiguracji database.yml należy zmienić na:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
Teraz możesz budować obrazy z polecenia:
docker-compose build
(Uruchom to w katalogu projektu)
I zacznij wszystko od:
docker-compose up
Jeśli wszystko zostanie wykonane poprawnie, będziesz mógł zobaczyć logi z szyn w konsoli.
Zamknij konsolę. Będzie działać.
Jeśli chcesz usunąć tylko kontener z aplikacją Rails bez bazy danych, musisz uruchomić następnie w katalogu projektu:
docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
Zostanie utworzony i uruchomiony nowy kontener z aplikacją szyn.