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

2019-09-25 09:41:19丽君

    # 打开 boot2docker 到私有注册库的 SSH 连接
    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! 
    docker push localhost:5000/username/docker-test 

如果你不理解这其中的含义,请先仔细阅读这部分第二部分。

给脚本加上执行权限。
使用rake将以上所有绑定

现在的情况是,每次你想要部署你的应用时,你都需要单独运行这三个脚本。

        clean     build     deploy / push

这一点都不费工夫,可是事实上开发者比你想象的要懒得多!那么咱们就索性再懒一点!

我们最后再把工作好好整理一番,我们现在要将三个脚本通过rake捆绑在一起。

为了更简单一点,你可以在工程根目录下已经存在的Rakefile中添加几行代码,打开Rakefile文件,把下列内容粘贴进去。

  namespace :docker do 
   desc "Remove docker container"
   task :clean do
    sh './clean.sh'
   end
   desc "Build Docker image"
   task :build => [:clean] do
    sh './build.sh'
   end
   desc "Deploy Docker image"
   task :deploy => [:build] do
    sh './deploy.sh'
   end
  end 

即使你不清楚rake的语法(其实你真应该去了解一下,这玩意太酷了!),上面的内容也是很显然的吧。我们在一个命名空间(docker)里声明了三个任务。

三个任务是:

        rake docker:clean     rake docker:build     rake docker:deploy

Deploy独立于build,build独立于clean。所以每次我们输入命令运行的时候。

 

  $ rake docker:deploy

所有的脚本都会按照顺序执行。
测试

现在我们来看看是否一切正常,你只需要在app的代码里做一个小改动:

  $ rake docker:deploy

接下来就是见证奇迹的时刻了。一旦镜像文件被上传(第一次可能花费较长的时间),你就可以ssh登录产品服务器,并且(通过SSH管道)把docker镜像拉取到服务器并运行了。多么简单!