Fixed docker task.

pull/1/head
Vladimir Protsenko 2 years ago
parent 35644b9a77
commit 80a7fc3a19

@ -764,19 +764,19 @@ $ ./build_and_run.sh
Однако вначале нужно установить Docker Compose. Есть у вас Windows или Mac, то Docker Compose уже установлен — он идет в комплекте с Docker Toolbox. На Linux можно установить Docker Compose, следуя простым инструкциям на сайте документации https://docs.docker.com/compose/install/other/.
```
curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```
Проверить работоспособность так:
```
$ docker-compose version
$ sudo docker-compose version
Docker Compose version v2.12.2
```
Теперь можно перейти к следующему шагу, то есть к созданию файла `docker-compose.yml`. Синтаксис yml-файлов очень простой (но отступы коварны):
```
```yaml
version: "3"
services:
elastic:
@ -792,22 +792,22 @@ services:
- 80:5000
```
Давайте разберём это подробнее. На родительском уровне мы задали название неймспейса для наших сервисов: elastic и foodtrucks-web. К каждому сервису можно добавить дополнительные параметры, среди которых image — обязательный. Для elastic мы указываем доступный на Docker Hub образ elasticsearch. Для Flask-приложения — тот образ, который мы создали самостоятельно до этого.
Давайте разберём это подробнее. На родительском уровне мы задали название неймспейса для наших сервисов: `elastic` и `foodtrucks-web`. К каждому сервису можно добавить дополнительные параметры, среди которых image — обязательный. Для elastic мы указываем доступный на Docker Hub образ elasticsearch. Для `foodtrucks-web` приложения — тот образ, который мы создали самостоятельно до этого.
С помощью других параметров вроде `command` и `ports` можно предоставить информацию о контейнере. Подробнее о параметрах и возможных значениях можно прочитать в документации.
**Замечание.** Нужно находиться в директории с файлом `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
2a1b77e066e6
```
Теперь можно запускать `docker-compose`. Перейдите в директорию с приложением Foodtrucks и выполните команду` docker-compose up`.
```
$ docker-compose up
$ sudo docker-compose up
[+] Running 2/0
⠿ Container elastic Created 0.0s
⠿ Container foodtrucks-web Created 0.0s
@ -837,20 +837,20 @@ foodtrucks-web | 172.19.0.1 - - [31/Oct/2022 11:56:16] "GET /static/build/main.
⠿ Container elastic Stopped
```
```
# docker-compose up -d
$ sudo docker-compose up -d
[+] Running 2/2
⠿ Container elastic Started 0.7s
⠿ Container foodtrucks-web Started 1.4s
```
```
$ docker-compose ps
$ sudo docker-compose ps
elastic "/bin/tini -- /usr/l…" elastic running 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp
foodtrucks-web "python3 ./app.py ht…" foodtrucks-web running 0.0.0.0:8000->5000/tcp, :::8000->5000/tcp
```
Проверим, создались ли какие-нибудь сети:
```
$ docker network ls
$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
5c06e23b03c1 bridge bridge local
de0befdc7aac foodtrucks bridge local
@ -861,13 +861,13 @@ e9a9ee381df4 host host local
Видно, что Compose самостоятельно создал сеть `foodtrucks_default` и подсоединил оба сервиса в эту сеть, так, чтобы они могли общаться друг с другом. Каждый контейнер для сервиса подключен к сети, и оба контейнера доступны другим контейнерам в сети. Они доступны по hostname, который совпадает с названием контейнера. Давайте проверим, находится ли эта информация в `/etc/hosts`.
```
$ docker ps
$ sudo docker ps
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
3338fc79be4b elasticsearch "/docker-entrypoint.s" 20 hours ago Up 19 hours 9200/tcp, 9300/tcp foodtrucks_es_1
```
```
$ docker exec -it bb72dcebd379 bash
$ sudo docker exec -it bb72dcebd379 bash
root@bb72dcebd379:/opt/flask-app# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback

Loading…
Cancel
Save