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

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

    ADD ./ /usr/src/app
    # 运行 rake 任务
    RUN RAILS_ENV=production rake db:create db:migrate 

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

   

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

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

 

  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 

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

   

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

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

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

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

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

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

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

    echo Restarting boot2docker... 
    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 

给脚本加上执行权限:

   

$ chmod +x clean.sh

构建

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

    docker build -t localhost:5000/your_username/docker-test . 

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

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