菜单

葡京娱乐棋牌官网什么用Docker布置Rails应用

2019年4月22日 - 葡京娱乐棋牌官网

新近在运行界有三个新兴本领docker特别火,在看了有关的介绍之后果断决定尝试一下用docker布置1台服务器。进度中记录了一下百分百操作的进程及连锁布置文件,分享给诸位也爱追求手艺时尚的顺序猿们。

适用条件

服务器:阿里云 (双核 + 2GB 内存) Ubuntu 14.04
应用的stack: nginx + unicorn + mongodb

在Ali云上安装dockerengine

宗旨遵照官互联网的装置指南来做的。笔者刚初叶推择的是ubuntu管理的安装包,docker.io,
版本是 一.0.1,开掘bug太多,后来重新安装了最新的本子
1.4.1。官方网址的安装包如同被墙了,用了网页最上边包车型大巴Yandex的镜像才把docker安装好。

启动docker的daemon程序

正规的事态下只需求实践上面包车型地铁吩咐就足以运行docker

$ sudo service docker start

然而在Ali云的ECS上报出无闲置IP的荒唐,百度了1晃才找到消除方案,操作步骤如下:

打开/etc/network/interfaces,注释掉以下配置

# route del -net 172.16.0.0 netmask 255.240.0.0 dev eth0 

再度起动networking

$ sudo service networking restart

重复开动docker

$ sudo service docker restart

测试一下docker是还是不是正规运作

$ docker info
Containers: 33
Images: 176
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 242
Execution Driver: native-0.2
Kernel Version: 3.13.0-32-generic
Operating System: Ubuntu 14.04.1 LTS
CPUs: 2
Total Memory: 3.859 GiB
Name: iZ256yal27dZ
ID: BQ3A:ZJIY:5EOM:JOTY:EROQ:7UI6:SB6P:QVBC:3FM5:DEMB:WBY2:ZDH6
WARNING: No swap limit support

启动nginx的container

在阿里云的机器上创设以下文件夹,并成立相应的文书

dockers
└── nginx
    ├── Dockerfile
    └── config
        └── nginx-app.conf

只顾:我们一时先将与rails app有关的布置文件注释了

# Dockerfile for installing and running Nginx

# Select ubuntu as the base image
From registry.mirrors.aliyuncs.com/library/ubuntu:14.04

# Install nginx
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# ADD config/nginx-app.conf /etc/nginx/sites-enabled/default

# Publish port 80
EXPOSE 80

# Start nginx when container starts
ENTRYPOINT /usr/sbin/nginx

# nginx-app.conf

# this can be any application server, not just Unicorn/Rainbows!
upstream rails-app {
  server app:8080 fail_timeout=0;
}

server {
  listen 80 default deferred; # for Linux

  client_max_body_size 4G;
  server_name _;

  keepalive_timeout 5;

  # path for static files
  root /webapps/app/public;

  try_files $uri/index.html $uri.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://rails-app;
  }

  # Rails error pages
  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root /webapps/app/public;
  }
}

下一场在nginx文件夹下,生成新的docker image,并运维nginx的container

$ docker build -t junhao/nginx .
$ docker run --name web -d -p 80:80 junhao/nginx

运行docker ps来检查一下container的运作意况

$ docker ps
CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS              PORTS                    NAMES
87ae87c89a78        junhao/nginx:latest    "/bin/sh -c /usr/sbi   5 days ago          Up 5 days           0.0.0.0:80->80/tcp       web

开发浏览器,输入你的Ali云VM地址,应该就能看到“Welcome to
Nginx”的页面。阶段性成功,yay!

启动unicorn的container

先把rails
app上传来服务器上,在使用根目录下创办那样多少个公文,Dockerfile,
.dockerignore, scripts/start-server.sh

# Dockerfile for a Rails application using Nginx and Unicorn

# Select ubuntu as the base image
From registry.mirrors.aliyuncs.com/library/ubuntu:14.04

RUN apt-get update -q
RUN apt-get install -qy curl

# Install rvm, ruby, bundler
RUN curl -sSL https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.1.5"
RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"

# Copy the Gemfile and Gemfile.lock into the image. 
# Temporarily set the working directory to where they are. 
WORKDIR /tmp 
ADD ./Gemfile Gemfile
ADD ./Gemfile.lock Gemfile.lock
RUN /bin/bash -l -c "bundle install"

# Add rails project to project directory
ADD ./ /webapps/app

# set WORKDIR
WORKDIR /webapps/app

# bundle install
# RUN /bin/bash -l -c "bundle install"

# Add configuration files in repository to filesystem
ADD scripts/start-server.sh /usr/bin/start-server
RUN chmod +x /usr/bin/start-server

# Publish port 80
EXPOSE 8080

# Startup commands
ENTRYPOINT /usr/bin/start-server

# .dockerignore

# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db

# Ignore all logfiles and tempfiles.
/log
/tmp

# Gemfile.lock

# Redis
dump.rdb

留神:小编有四个unicorn的安排文件在config文件夹下,未有用配备文件的急需修改start-server.sh的末尾一行命令

#!/bin/bash

cd /webapps/app
source /etc/profile.d/rvm.sh
mkdir -p /webapps/shared/pids
mkdir -p /webapps/shared/log
cat /webapps/shared/pids/unicorn.pid
kill -QUIT `cat /webapps/shared/pids/unicorn.pid`
bundle exec unicorn -c config/unicorn.rb -E production -p 8080

然后创制unicorn的docker image,并运行container

$ cd /webapps/app
$ docker build -t junhao/app .
$ docker run --name app -d -p 8080:8080 junhao/app

继而,大家要对nginx的container做一些改换:把和rails
app相关的布局加上回来,并再一次成立、运转nginx的container。

打开dockers/nginx/conf/nginx-app.conf,把下部那行设置增加回来

# ADD config/nginx-app.conf /etc/nginx/sites-enabled/default

然后截止现行反革命的container,同等对待建container。

$ cd dockers/nginx
$ docker stop web
$ docker build -t junhao/web .

下一步正是重启,在重启的时候我们要用到一个叫container
linking的技艺手段。仔细看一下nginx-app.conf,里面有如此壹段代码:

upstream rails-app {
  server app:8080 fail_timeout=0;
}

这里的app:8080中的app指的是大家创造的unicorn
container。那么在nginx的container中,app表示的实际上是unicorn
container在本机的地址映射。那么些是急需大家在运行nginx
container的时候做特殊管理的,不然nginx
container不能够得到相关音信。--link app:app固然把app
container的音信传送给了web container。

$ docker run --name web --link app:app -d -p 80:80 junhao/nginx

明天展开浏览器,试试展开四个不要求拜访数据库的页面。

配置MongodDB

自家用了MongoDB官方的配置服务MMS来治本MongoDB,所以并未有用docker。大家也得以尝试分歧的点子。在本机安装完MongoDB之后,在config/mongoid.yml中修改hosts的地址:- dockerhost:27000。这里的dockerhost指的是container运行的VM的地址。
本条地址大家能够在container运转时定义,由于事先运维时并未有定义那一个值,咱们须求重启app
container。

$ docker stop app
$ docker build -t junhao/app .
$ docker run --name app --add-host=dockerhost:<enter your host address here> -d -p 8080:8080 junhao/app

然后重启一下web container

$ docker stop web
$ docker run --name web --link app:app -d -p 80:80 junhao/nginx

诸如此类就水到渠成啦!

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图