Rails Deploy with Docker

docker

两套方案

1. Build with Docker

符合容器的原理和最佳实践。

但比较重,每次流程:

  • 发布代码
  • CI 拉代码,Build Image
  • Push Image to Hub
  • 远程服务器 Pull Image
  • RemoteServer Stop & Remove old Container
  • RemoteServer Start new Constainer with new Image

2. SSH with Docker

构建一套含有 SSH, Ruby, Rails 等基础设施的 Image,然后快速启动服务器。不像 Image 方案那般重。

可以使用 Capistrano,不用通过 CI Server,直接进行发布。

如果进行多次分发,不是很便利。

Practice

也有三种方案。

docker

docker

docker

Tech Solution

- Unicorn: Socket vs Port

Unicorn Service 有两种方式,通过 Socket 和 的对比?

- Serving your Ruby app through an nginx frontend

其中一种方案是这样子的,将 Ruby Container link 到 Ngninx 上。通过

- Sharing Data Between Linked Container

两个 Link 的 Container 之间,能通过什么样的方式来共享数据?

- dockerignore

.dockerignore file

- 项目实践

项目统一放在 /app

1
2
3
4
5
6
/app
Dockerfile
README.md
database.yml
secrets.yml
unicorn.yml

- Nginx 需要集成2次吗?

还是将 docker 中的 unicorn.socket export 中,然后在外面使用。

REF::

Offical Dockerfile::

Docker 官方发布了一系列的 Docker Image,像 Ruby, Node, Ngnix,清一色构建于 buildpack-deps Hub Info - Dockerfile 上(基于 Debian Hub Info 各种发行版介绍:Wiki)。

Rails with Docker 参考::