• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > 在Docker中自动化部署Ruby on Rails的教程

在Docker中自动化部署Ruby on Rails的教程

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了ruby on rails,ruby on rails教程,ruby on rails安装,ruby on rails下载,ruby on rails指南等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

基本的Rails应用程序

现在让我们启动一个基本的Rails应用。为了更好的展示,我使用Ruby 2.2.0和Rails 4.1.1

在终端运行:

  $ rvm use 2.2.0
  $ rails new && cd docker-test

</div>

创建一个基本的控制器:

  $ rails g controller welcome index

</div>

……,然后编辑 routes.rb ,以便让该项目的根指向我们新创建的welcome#index方法:

  root 'welcome#index' 

</div>

在终端运行 rails s ,然后打开浏览器,登录http://localhost:3000,你会进入到索引界面当中。我们不准备给应用加上多么神奇的东西,这只是一个基础的实例,当我们将要创建并部署容器的时候,用它来验证一切是否运行正常。
安装webserver

我们打算使用Unicorn当做我们的webserver。在Gemfile中添加 gem 'unicorn'和 gem 'foreman'然后将它bundle起来(运行 bundle install命令)。

启动Rails应用时,需要先配置好Unicorn,所以我们将一个unicorn.rb文件放在config目录下。这里有一个Unicorn配置文件的例子,你可以直接复制粘贴Gist的内容。

接下来,在项目的根目录下添加一个Procfile,以便可以使用foreman启动应用,内容为下:

   

现在运行foreman start命令启动应用,一切都将正常运行,并且你将能够在http://localhost:5000上看到一个正在运行的应用。
构建一个Docker镜像

现在我们构建一个镜像来运行我们的应用。在这个Rails项目的根目录下,创建一个名为Dockerfile的文件,然后粘贴进以下内容: 

        FROM ruby:2.2.0
    # 安装所需的库和依赖
    RUN apt-get update && apt-get install -qy nodejs postgresql-client sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*
    # 设置 Rails 版本
    ENV RAILS_VERSION 4.1.1
    # 安装 Rails
    RUN gem install rails --version "$RAILS_VERSION"
    # 创建代码所运行的目录
    RUN mkdir -p /usr/src/app 
    WORKDIR /usr/src/app
    # 使 webserver 可以在容器外面访问
    EXPOSE 3000
    # 设置环境变量
    ENV PORT=3000
    # 启动 web 应用
    CMD ["foreman","start"]
    # 安装所需的 gems
    ADD Gemfile /usr/src/app/Gemfile 
    ADD Gemfile.lock /usr/src/app/Gemfile.lock 
    RUN bundle install --without development test
    # 将 rails 项目(和 Dockerfile 同一个目录)添加到项目目录
    ADD ./ /usr/src/app
    # 运行 rake 任务
    RUN RAILS_ENV=production rake db:create db:migrate </div>

使用上述Dockerfile,执行下列命令创建一个镜像(确保boot2docker已经启动并在运行当中):

   

 $ docker build -t localhost:5000/your_username/docker-test .
</div>

然后,如果一切正常,长长的日志输出的最后一行应该类似于:

 

  Successfully built 82e48769506c 
  $ docker images
  REPOSITORY                    TAG         IMAGE ID      CREATED       VIRTUAL SIZE 
  localhost:5000/your_username/docker-test     latest       82e48769506c    About a minute ago  884.2 MB 
</div>

让我们运行一下容器试试!

   

 $ docker run -d -p 3000:3000 --name docker-test localhost:5000/your_username/docker-test
</div>

通过你的boot2docker虚拟机的3000号端口(我的是http://192.168.59.103:3000),你可以观察你的Rails应用。(如果不清楚你的boot2docker虚拟地址,输入$ boot2docker ip命令查看。)
使用shell脚本进行自动化部署

前面的文章(指文章1和文章2)已经告诉了你如何将新创建的镜像推送到私有registry中,并将其部署在服务器上,所以我们跳过这一部分直接开始自动化进程。

我们将要定义3个shell脚本,然后最后使用rake将它们捆绑在一起。
清除

每当我们创建镜像的时候,

  •     停止并重启boot2docker;
  •     去除Docker孤儿镜像(那些没有标签,并且不再被容器所使用的镜像们)。

在你的工程根目录下的clean.sh文件中输入下列命令。

    boot2docker down 
    boot2docker up
    echo Exporting Docker variables... 
    sleep 1 
    export DOCKER_HOST=tcp://192.168.59.103:2376 
    export DOCKER_CERT_PATH=/Users/user/.boot2docker/certs/boot2docker-vm 
    export DOCKER_TLS_VERIFY=1
    sleep 1 
    echo Removing orphaned images without tags... 
    docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi  </div>

给脚本加上执行权限:

   

$ chmod +x clean.sh
</div>

构建

构建的过程基本上和之前我们所做的(docker build)内容相似。在工程的根目录下创建一个build.sh脚本,填写如下内容:

   

记得给脚本执行权限。
部署

最后,创建一个deploy.sh脚本,在里面填进如下内容:

    boot2docker ssh "ssh -o 'StrictHostKeyChecking no' -i /Users/username/.ssh/id_boot2docker -N -L 5000:localhost:5000 root@your-registry.com &" &
    # 在推送前先确认该 SSH 通道是开放的。
    echo Waiting 5 seconds before pushing image.
    echo 5... 
    sleep 1 
    echo 4... 
    sleep 1 
    echo 3... 
    sleep 1 
    echo 2... 
    sleep 1 
    echo 1... 
    sleep 1
    # Push image onto remote registry / repo
    echo Starting push! 
    docke

您可能想查找下面的文章:

  • Rails bundle命令安装mysql gem包出错的解决方法
  • win7安装ruby on rails开发环境
  • 简单对比分析Ruby on Rails 和 Laravel
  • 在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用
  • 快速正确的安装 Ruby, Rails 运行环境
  • Windows下Ruby on Rails开发环境安装配置图文教程
  • Ruby On Rails中如何避免N+1问题
  • 艰难完成 nginx + puma 部署 rails 4的详细记录
  • 浅谈Rails 4 中Strong Parameters机制
  • Rails命令行常用操作命令简明总结

相关文章

  • Ruby中的变量学习总结
  • ruby ftp封装实例详解
  • 用Ruby进行CGI编程的入门指引
  • Ruby、PHP、Shell实现求50以内的素数
  • rudy 重载方法 详解
  • Ruby与Ruby on Rails框架环境搭建的简明教程
  • Ruby实现的各种排序算法
  • 使用Ruby来编写访问Twitter的命令行应用程序的教程
  • Ruby实现的矩阵连乘算法
  • 比较不错的关于ruby的电子书下载地址集合

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • rudy 重载方法 详解
    • Ruby on Rails下的图像处理入门教程
    • 比较不错的关于ruby的电子书下载地址集合
    • Ruby入门点滴-Ruby的安装
    • 使用rbenv来管理Ruby版本的方法
    • Rails link_to 详解
    • 简单介绍Ruby on Rails对PostgreSQL数组类型的支持
    • Ruby实现邮件主动推送触发程序
    • Ruby中调用执行shell命令的6种方法
    • Ruby的面向对象方式编程学习杂记

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有