当前位置: 首页 > 云计算, 虚拟化 > 正文

如何在 Docker上部署一个 Rails 应用

[摘要] Docker 官方镜像库已经提供了各种web应用而创建的Docker image,直接拿下来使用即可。如果自己创建Docker image的话,可以使用Docker的building tools来创建你的Docker容器,也可以通过Onbuild的命令行方式来创建Dockerfiles,而且这种使用更加纯粹的Dockerfiles方式会带给你更多的益处:

1. 你能够更多使用代码的方式控制和定义Docker镜像,即便你对操作系统本身不感冒,你仍然可以通过编辑Dockerfiles的方式来定制你的操作系统。
2. Docker内部标签提供了不同的语言或者框架版本,这样你将更容易的选则各种版本。
3. 如果你使用标准的Docker,你将会从Docker社区支持和贡献中获取更多的好处。

书归正传,现在我们就实战一下,看看如何在Docker中创建一个Rails应用:
#创建一个新的Rails app

$ rails new foobar
$ cd foobar
$ echo 'FROM rails:onbuild' > Dockerfile
$ docker build -t my-rails-app .
$ docker run -d -p 3000:3000 my-rails-app
$ curl 0.0.0.0:3000
<!DOCTYPE html>
<html>
  <head>
    <title>Ruby on Rails: Welcome aboard</title>
    …

如果不知道这个是用来做什么的? 可以先看看rails:onbuild Dockerfile:

FROM ruby:2.1.5

# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ONBUILD COPY Gemfile /usr/src/app/
ONBUILD COPY Gemfile.lock /usr/src/app/
ONBUILD RUN bundle install

ONBUILD COPY . /usr/src/app

RUN apt-get update && \
  apt-get install -y nodejs --no-install-recommends && \
  rm -rf /var/lib/apt/lists/*
RUN apt-get update && \
  apt-get install -y \
    mysql-client postgresql-client \
    sqlite3 --no-install-recommends && \
  rm -rf /var/lib/apt/lists/*

EXPOSE 3000
CMD ["rails", "server"]

现在看上去就非常清晰明了:Ruby的版本,源文件所在的位置和应用是如何运行的。

如果你是用Mac系统,你需要Gemfile.lock文件来关联Linux库的版本,这有一个很简单的命令:

$ docker run --rm -v "$(pwd)":/usr/src/app -w /usr/src/app ruby:2.1.5 bundle install

这样启动一个包含一个关联你本地文件的文件系统的临时容器,所以Gemfile.lock文件被创建后将会被写到你本地的文件系统里面,而并不仅仅是写到了容器的文件系统中!

为什么使用Onbuild方式要比building tools更好? 我想其中一点就是定制化更容易些。例如你想让你的Rails应用使用thin server而不是webrick,你仅需要在你app的Dockerfile里面增加thin gem替换即可,如:

$ echo 'CMD ["thin", "start"]' >> Dockerfile
$ docker build -t my-rails-app .

总之,Docker的这种灵活性是最讨人喜欢的。
原文:how to deploy a rails app to docker

本文固定链接: https://sudops.com/deploy-rails-app-on-docker.html | 运维速度

该日志由 u2 于2014年12月05日发表在 云计算, 虚拟化 分类下,
原创文章转载请注明: 如何在 Docker上部署一个 Rails 应用 | 运维速度
关键字:

报歉!评论已关闭.