запуск docker-compose на докер-машине

Я пытаюсь развернуть две службы на одном экземпляре ec2 с помощью docker-machine и docker-compose.

Вот что я делаю:

docker-machine create --driver amazonec2 --engine-install-url=https://web.archive.org/web/20170623081500/https://get.docker.com mymachine

docker-machine ssh mymachine -- mkdir -p /home/ubuntu/myapp

git clone https://github.com/myapp/service1.git
docker-machine scp -r ./service1 mymachine:/home/ubuntu/myapp/
rm -rf ./service1

git clone https://github.com/myapp/service2.git
docker-machine scp -r ./service2 mymachine:/home/ubuntu/myapp/
rm -rf ./service2

docker-machine env mymachine
//export DOCKER_TLS_VERIFY="1"
//export DOCKER_HOST="something"
//export DOCKER_CERT_PATH="something"
//export DOCKER_MACHINE_NAME="mymachine"

eval $(docker-machine env mymachine)

docker-machine active
//mymachine

docker-compose -f ./docker-compose-prod.yml up -d

Я получаю эту ошибку: build path /home/ubuntu/myapp/service1 either does not exist, is not accessible, or is not a valid URL.

соответствующие части docker-compose-prod.yml:

version: '3'

services:
  service1:
    build:  /home/ubuntu/myapp/service1

  service2:
    build:  /home/ubuntu/myapp/service2

Путь в порядке при проверке через ssh, кажется, что docker-compose все еще пытается работать на моей локальной машине, он счастлив, когда я предоставляю ему путь сборки, который существует локально. Docker сам выполняет команды на удаленной машине.

Как заставить docker-compose работать на удаленной докер-машине?

Я новичок в этом, поэтому, надеюсь, мне не хватает чего-то тривиального. Спасибо за помощь!


person marton    schedule 13.07.2017    source источник


Ответы (1)


docker build (включая docker-compose build) включает в себя «контекст сборки». Этот контекст — это все файлы, которые вы выбираете для отправки от клиента к механизму Docker, включая Dockerfile, для выполнения сборки. Вы можете удалить файлы из этого контекста с помощью файла .dockerignore.

Когда вы запускаете docker build /home/ubuntu/myapp/service1 или, в вашем случае, включаете этот каталог в файл compose.yml, вы определяете /home/ubuntu/myapp/service1 в качестве контекста сборки, который вы отправляете от клиента в механизм докера. Этот движок может быть локальным или удаленным узлом, которым в вашем случае является экземпляр ec2. Оттуда все запускается удаленно, включая любые команды COPY или ADD в вашем Dockerfile, которые ссылаются на этот контекст.

Чтобы запустить вашу сборку удаленно, вы можете либо оставить контекст на своем локальном компьютере, а не запускать свой rm, либо вы можете подключиться по ssh к экземпляру ec2 и запустить команды docker-compose локально на этом компьютере (вам может потребоваться установить docker- compose там, я не уверен, что он включен в образ машины по умолчанию). Обычно я предпочитаю первое, поскольку это упрощает разработку файлов, используемых для создания вашего образа, и позволяет удаленной машине Docker быть эфемерной.

person BMitch    schedule 23.07.2017
comment
спасибо, имеет смысл. кажется, я сделал неправильное предположение о том, как это должно работать - person marton; 24.07.2017