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ą
Dockerfile
aby można go było odtwarzać w dowolnym miejscu. - Zdefiniuj usługi, które składają się na twoją aplikację w
docker-compose.yml
aby mogły być uruchamiane razem w izolowanym środowisku. - Na koniec uruchom
docker-compose up
a 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_on
implikuje zależność sieci od redis i dlatego docker-compose najpierw uruchamia kontenerredis
a następnie kontener web. Niemniej jednakdocker-compose
redis
nie czeka, aż kontenerredis
bę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 kontenerredis
mó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 -i
przed 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.1
aby 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.