我尝试使用docker-machine和docker-compose在单个ec2实例上部署两个服务。
这就是我正在做的事情:
# cd /usr/lib/python2.7/dist-packages
# mv OpenSSL OpenSSLBAK
我收到此错误: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
docker-compose-prod.yml的相关部分:
build path /home/ubuntu/myapp/service1 either does not exist, is not accessible, or is not a valid URL.
通过ssh检查时路径很好,似乎docker-compose仍在尝试在我的本地计算机上工作,当我为它提供本地存在的构建路径时,它很高兴。 Docker本身在远程计算机上执行命令。
如何让docker-compose在远程docker-machine上运行?
我对此很陌生,所以希望我能错过一些微不足道的东西。 谢谢你的帮助!
答案 0 :(得分:2)
docker build
(包括docker-compose build
)涉及"构建上下文"。此上下文是您选择从客户端发送到docker引擎(包括Dockerfile)以执行构建的所有文件。您可以使用.dockerignore
文件从此上下文中删除文件。
当您运行docker build /home/ubuntu/myapp/service1
或在您的情况下,在compose.yml文件中包含该目录时,您将/ home / ubuntu / myapp / service1定义为您从客户端发送到docker的构建上下文发动机。该引擎可以是本地引擎,也可以是远程节点,在您的情况下是ec2实例。从那里,一切都远程运行,包括Dockerfile中引用此上下文的任何COPY
或ADD
命令。
要远程运行构建,您可以将上下文保留在本地计算机上,而不是运行rm
,或者您可以进入ec2实例并在该计算机上本地运行docker-compose命令(你可能需要在那里安装docker-compose,我不确定它是否包含在默认的机器映像中)。我的偏好通常是前者,因为它允许更容易地开发用于构建图像的文件,并且它允许远程docker机器是短暂的。