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.

  1. Zdefiniuj środowisko aplikacji za pomocą Dockerfile aby można go było odtwarzać w dowolnym miejscu.
  2. Zdefiniuj usługi, które składają się na twoją aplikację w docker-compose.yml aby mogły być uruchamiane razem w izolowanym środowisku.
  3. 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: i redis: 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 kontener redis a następnie kontener web. Niemniej jednak docker-compose redis nie czeka, aż kontener redis będzie gotowy przed uruchomieniem kontenera web . Aby to osiągnąć, musisz użyć skryptu, który opóźnia uruchomienie serwera aplikacji lub cokolwiek innego, dopóki kontener redis 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

  1. Zainstaluj silnik Docker .

Jeśli pojawi się błąd Permission denied , uruchom sudo -i przed dwoma poleceniami poniżej, a następnie zakończ.

  1. 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

  1. Zastosuj uprawnienia do pliku binarnego.
chmod +x /usr/local/bin/docker-compose
  1. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow