运行 docker-在docker-机器上撰写
running docker-compose on a docker-machine
我正在尝试使用 docker-machine 和 docker-compose 在单个 ec2 实例上部署两个服务。
这是我正在做的事情:
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 到远程 docker-机器上的 运行?
我是新手,所以希望我遗漏了一些微不足道的东西。
感谢您的帮助!
一个docker build
(包括docker-compose build
)涉及一个"build context"。此上下文是您 select 从客户端发送到 docker 引擎的所有文件,包括 Dockerfile,以执行构建。您可以使用 .dockerignore
文件从此上下文中删除文件。
当您 运行 一个 docker build /home/ubuntu/myapp/service1
或在您的情况下,将该目录包含在 compose.yml 文件中时,您将 /home/ubuntu/myapp/service1 定义为您发送的构建上下文docker 引擎的客户端。该引擎可能是本地节点或远程节点,在您的情况下是 ec2 实例。从那里开始,所有 运行 都是远程的,包括 Dockerfile 中引用此上下文的任何 COPY
或 ADD
命令。
为了 运行 您的远程构建,您可以将上下文留在本地机器上,而不是 运行 连接您的 rm
,或者您可以通过 ssh 进入 ec2 实例并运行 该机器上的 docker-compose 命令(您可能需要在那里安装 docker-compose,我不确定它是否包含在默认机器映像中)。我的偏好通常是前者,因为它允许更容易地开发用于构建图像的文件,并且它允许远程 docker 机器是短暂的。
我正在尝试使用 docker-machine 和 docker-compose 在单个 ec2 实例上部署两个服务。
这是我正在做的事情:
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 到远程 docker-机器上的 运行?
我是新手,所以希望我遗漏了一些微不足道的东西。 感谢您的帮助!
一个docker build
(包括docker-compose build
)涉及一个"build context"。此上下文是您 select 从客户端发送到 docker 引擎的所有文件,包括 Dockerfile,以执行构建。您可以使用 .dockerignore
文件从此上下文中删除文件。
当您 运行 一个 docker build /home/ubuntu/myapp/service1
或在您的情况下,将该目录包含在 compose.yml 文件中时,您将 /home/ubuntu/myapp/service1 定义为您发送的构建上下文docker 引擎的客户端。该引擎可能是本地节点或远程节点,在您的情况下是 ec2 实例。从那里开始,所有 运行 都是远程的,包括 Dockerfile 中引用此上下文的任何 COPY
或 ADD
命令。
为了 运行 您的远程构建,您可以将上下文留在本地机器上,而不是 运行 连接您的 rm
,或者您可以通过 ssh 进入 ec2 实例并运行 该机器上的 docker-compose 命令(您可能需要在那里安装 docker-compose,我不确定它是否包含在默认机器映像中)。我的偏好通常是前者,因为它允许更容易地开发用于构建图像的文件,并且它允许远程 docker 机器是短暂的。