远程 `docker-compose build`:解决连接速度慢的问题
Remote `docker-compose build`: workaround slow connections
我正在使用 docker-compose 部署到远程主机。这就是我的配置:
# stacks/web.yml
version: '2'
services:
postgres:
image: postgres:9.6
restart: always
volumes:
- db:/var/lib/postgresql/data
redis:
image: redis:3.2.3
restart: always
web_server:
depends_on: [postgres]
build: ../sources/myapp
links: [postgres]
restart: always
volumes:
- nginx_socks:/tmp/socks
- static_assets:/source/public
sidekiq:
depends_on: [postgres, redis]
build: ../sources/myapp
links: [postgres, redis]
restart: always
volumes:
- static_assets:/source/public
nginx:
depends_on: [web_server]
build: ../sources/nginx
ports:
- "80:80"
volumes:
- nginx_socks:/tmp/socks
- static_assets:/public
restart: always
volumes:
db:
nginx_socks:
static_assets:
# stacks/web.production.yml
version: '2'
services:
web_server:
command: bundle exec puma -e production -b unix:///tmp/socks/puma.production.sock
env_file: ../env/production.env
sidekiq:
command: bundle exec sidekiq -e production -c 2 -q default -q carrierwave
env_file: ../env/production.env
nginx:
build:
args:
ENV_NAME: production
DOMAIN: production.yavende.com
我部署使用:
eval $(docker-machine env myapp-production)`
docker-compose -f stacks/web.yml -f stacks/web.production.yml -p myapp_production build -no-deps web_server sidekiq
docker-compose -f stacks/web.yml -f stacks/web.production.yml -p myapp_production up -d
虽然这在本地工作得很好,而且我过去曾用这种方法成功部署过,但现在它在构建 "web_server" 服务时挂起并最终显示一些超时错误,就像我在 [=15 中描述的那样=].
我认为问题源于我的连接速度慢(阿根廷 -> 美国的 DigitalOcean 服务器)和我尝试构建图像并推送它们而不是使用集线器托管图像。
我已经能够通过将我的 compose 配置克隆到服务器并直接 运行 docker-compose
进行部署。
问题是:是否有更好的方法来自动执行此过程?使用 docker-compose 即时构建图像是一种好习惯吗?
我一直在考虑将这个将源代码克隆到服务器和 docker-compose
ing 东西的过程自动化,但可能有更好的工具来解决这个问题。
我是远程建筑图片。这意味着将构建图像所需的全部资源推送到网络上。对于一些图像,超过 400MB 的数据从阿根廷发送到美国的一些虚拟服务器,并且被证明非常慢。
解决方案是完全改变docker调整我的堆栈的方法:
- 我没有使用 Dockerfile
ARG
s 即时构建图像,而是修改了我的源应用程序,它是 docker 图像以在运行时通过环境变量接受选项。
- 使用 DockerHub 自动构建,与 GitHub 集成。
这意味着我只通过 git 推送更改 - 而不是整个源代码。然后 DockerHub 构建镜像。
然后我 docker-compose pull
和 docker-compose up -d
我的网站。
免费替代品是 运行 您自己的自托管 docker 注册表 and/or 可能是 GitLab,因为它最近发布了它自己的 docker 映像注册表:https://about.gitlab.com/2016/05/23/gitlab-container-registry/.
我正在使用 docker-compose 部署到远程主机。这就是我的配置:
# stacks/web.yml
version: '2'
services:
postgres:
image: postgres:9.6
restart: always
volumes:
- db:/var/lib/postgresql/data
redis:
image: redis:3.2.3
restart: always
web_server:
depends_on: [postgres]
build: ../sources/myapp
links: [postgres]
restart: always
volumes:
- nginx_socks:/tmp/socks
- static_assets:/source/public
sidekiq:
depends_on: [postgres, redis]
build: ../sources/myapp
links: [postgres, redis]
restart: always
volumes:
- static_assets:/source/public
nginx:
depends_on: [web_server]
build: ../sources/nginx
ports:
- "80:80"
volumes:
- nginx_socks:/tmp/socks
- static_assets:/public
restart: always
volumes:
db:
nginx_socks:
static_assets:
# stacks/web.production.yml
version: '2'
services:
web_server:
command: bundle exec puma -e production -b unix:///tmp/socks/puma.production.sock
env_file: ../env/production.env
sidekiq:
command: bundle exec sidekiq -e production -c 2 -q default -q carrierwave
env_file: ../env/production.env
nginx:
build:
args:
ENV_NAME: production
DOMAIN: production.yavende.com
我部署使用:
eval $(docker-machine env myapp-production)`
docker-compose -f stacks/web.yml -f stacks/web.production.yml -p myapp_production build -no-deps web_server sidekiq
docker-compose -f stacks/web.yml -f stacks/web.production.yml -p myapp_production up -d
虽然这在本地工作得很好,而且我过去曾用这种方法成功部署过,但现在它在构建 "web_server" 服务时挂起并最终显示一些超时错误,就像我在 [=15 中描述的那样=].
我认为问题源于我的连接速度慢(阿根廷 -> 美国的 DigitalOcean 服务器)和我尝试构建图像并推送它们而不是使用集线器托管图像。
我已经能够通过将我的 compose 配置克隆到服务器并直接 运行 docker-compose
进行部署。
问题是:是否有更好的方法来自动执行此过程?使用 docker-compose 即时构建图像是一种好习惯吗?
我一直在考虑将这个将源代码克隆到服务器和 docker-compose
ing 东西的过程自动化,但可能有更好的工具来解决这个问题。
我是远程建筑图片。这意味着将构建图像所需的全部资源推送到网络上。对于一些图像,超过 400MB 的数据从阿根廷发送到美国的一些虚拟服务器,并且被证明非常慢。
解决方案是完全改变docker调整我的堆栈的方法:
- 我没有使用 Dockerfile
ARG
s 即时构建图像,而是修改了我的源应用程序,它是 docker 图像以在运行时通过环境变量接受选项。 - 使用 DockerHub 自动构建,与 GitHub 集成。
这意味着我只通过 git 推送更改 - 而不是整个源代码。然后 DockerHub 构建镜像。
然后我 docker-compose pull
和 docker-compose up -d
我的网站。
免费替代品是 运行 您自己的自托管 docker 注册表 and/or 可能是 GitLab,因为它最近发布了它自己的 docker 映像注册表:https://about.gitlab.com/2016/05/23/gitlab-container-registry/.