стартиране на 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) включва "контекст на компилация". Този контекст са всички файлове, които сте избрали да изпратите от клиента до докер машината, включително Dockerfile, за да извършите изграждането. Можете да премахнете файлове от този контекст с .dockerignore файл.

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

За да стартирате вашата компилация отдалечено, можете или да оставите контекста на вашата локална машина, вместо да стартирате вашия rm, или можете да ssh в екземпляра ec2 и да изпълните командите за съставяне на docker локално на тази машина (може да се наложи да инсталирате docker- композиране там, не съм сигурен, че е включено в изображението на машината по подразбиране). Моето предпочитание обикновено е първото, тъй като позволява по-лесно разработване на файловете, използвани за изграждане на вашето изображение, и позволява отдалечената докер машина да бъде ефимерна.

person BMitch    schedule 23.07.2017
comment
благодаря, има смисъл. изглежда, че направих грешно предположение за това как трябва да работи - person marton; 24.07.2017