diff --git a/module2/07_containerization_docker/tasks.md b/module2/07_containerization_docker/tasks.md index 5fa64c3..3f32e11 100644 --- a/module2/07_containerization_docker/tasks.md +++ b/module2/07_containerization_docker/tasks.md @@ -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