Однако вначале нужно установить Docker Compose. Есть у вас Windows или Mac, то Docker Compose уже установлен — он идет в комплекте с Docker Toolbox. На Linux можно установить Docker Compose, следуя простым инструкциям на сайте документации https://docs.docker.com/compose/install/other/.
Однако вначале нужно установить Docker Compose. Есть у вас Windows или Mac, то Docker Compose уже установлен — он идет в комплекте с Docker Toolbox. На Linux можно установить Docker Compose, следуя простым инструкциям на сайте документации https://docs.docker.com/compose/install/other/.
Теперь можно перейти к следующему шагу, то есть к созданию файла `docker-compose.yml`. Синтаксис yml-файлов очень простой (но отступы коварны):
Теперь можно перейти к следующему шагу, то есть к созданию файла `docker-compose.yml`. Синтаксис yml-файлов очень простой (но отступы коварны):
```
```yaml
version: "3"
version: "3"
services:
services:
elastic:
elastic:
@ -792,22 +792,22 @@ services:
- 80:5000
- 80:5000
```
```
Давайте разберём это подробнее. На родительском уровне мы задали название неймспейса для наших сервисов: elastic и foodtrucks-web. К каждому сервису можно добавить дополнительные параметры, среди которых image — обязательный. Для elastic мы указываем доступный на Docker Hub образ elasticsearch. Для Flask-приложения — тот образ, который мы создали самостоятельно до этого.
Давайте разберём это подробнее. На родительском уровне мы задали название неймспейса для наших сервисов: `elastic` и `foodtrucks-web`. К каждому сервису можно добавить дополнительные параметры, среди которых image — обязательный. Для elastic мы указываем доступный на Docker Hub образ elasticsearch. Для `foodtrucks-web`приложения — тот образ, который мы создали самостоятельно до этого.
С помощью других параметров вроде `command` и `ports` можно предоставить информацию о контейнере. Подробнее о параметрах и возможных значениях можно прочитать в документации.
С помощью других параметров вроде `command` и `ports` можно предоставить информацию о контейнере. Подробнее о параметрах и возможных значениях можно прочитать в документации.
**Замечание.** Нужно находиться в директории с файлом `docker-compose.yml` чтобы запускать большую часть команд Compose.
**Замечание.** Нужно находиться в директории с файлом `docker-compose.yml` чтобы запускать большую часть команд Compose.
Отлично! Файл готов, давайте посмотрим на `docker-compose` в действии. Но вначале нужно удостовериться, что порты свободны. Так что если у вас запущены контейнеры Flask и ES, то пора их остановить:
Отлично! Файл готов, давайте посмотрим на `docker-compose` в действии. Но вначале нужно удостовериться, что порты свободны. Так что если у вас запущены контейнеры `foodtrucks-web` и `elastic`, то пора их остановить:
```
```
$ docker stop $(docker ps -q)
$ sudo docker stop $(docker ps -q)
39a2f5df14ef
39a2f5df14ef
2a1b77e066e6
2a1b77e066e6
```
```
Теперь можно запускать `docker-compose`. Перейдите в директорию с приложением Foodtrucks и выполните команду` docker-compose up`.
Теперь можно запускать `docker-compose`. Перейдите в директорию с приложением Foodtrucks и выполните команду` docker-compose up`.
Видно, что Compose самостоятельно создал сеть `foodtrucks_default` и подсоединил оба сервиса в эту сеть, так, чтобы они могли общаться друг с другом. Каждый контейнер для сервиса подключен к сети, и оба контейнера доступны другим контейнерам в сети. Они доступны по hostname, который совпадает с названием контейнера. Давайте проверим, находится ли эта информация в `/etc/hosts`.
Видно, что Compose самостоятельно создал сеть `foodtrucks_default` и подсоединил оба сервиса в эту сеть, так, чтобы они могли общаться друг с другом. Каждый контейнер для сервиса подключен к сети, и оба контейнера доступны другим контейнерам в сети. Они доступны по hostname, который совпадает с названием контейнера. Давайте проверим, находится ли эта информация в `/etc/hosts`.
```
```
$ docker ps
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb72dcebd379 prakhar1989/foodtrucks-web "python app.py" 20 hours ago Up 19 hours 0.0.0.0:5000->5000/tcp foodtrucks_web_1
bb72dcebd379 prakhar1989/foodtrucks-web "python app.py" 20 hours ago Up 19 hours 0.0.0.0:5000->5000/tcp foodtrucks_web_1
3338fc79be4b elasticsearch "/docker-entrypoint.s" 20 hours ago Up 19 hours 9200/tcp, 9300/tcp foodtrucks_es_1
3338fc79be4b elasticsearch "/docker-entrypoint.s" 20 hours ago Up 19 hours 9200/tcp, 9300/tcp foodtrucks_es_1