鍍金池/ 教程/ Linux/ 實(shí)戰(zhàn) Rail
利用數(shù)據(jù)卷容器來(lái)備份、恢復(fù)、遷移數(shù)據(jù)卷
Docker 網(wǎng)絡(luò)實(shí)現(xiàn)
實(shí)戰(zhàn) Django
YAML 模板文件
名字空間
控制組
編輯網(wǎng)絡(luò)配置文件
列出
進(jìn)入容器
Compose 命令說(shuō)明
創(chuàng)建 Tomcat/Weblogic 集群
守護(hù)態(tài)運(yùn)行
快速配置指南
其它安全特性
示例:創(chuàng)建一個(gè)點(diǎn)到點(diǎn)連接
CentOS 系列安裝 Docker
數(shù)據(jù)卷容器
鏡像
指令
創(chuàng)建鏡像
Docker 容器
創(chuàng)建鏡像
常用倉(cāng)庫(kù)
總結(jié)
什么是 Docker
存出和載入鏡像
使用
獲取鏡像
容器互聯(lián)
為什么要使用 Docker?
使用 Wordpress 入門 Fig
啟動(dòng)
容器訪問(wèn)控制
私有倉(cāng)庫(kù)
使用
基本架構(gòu)
自定義網(wǎng)橋
環(huán)境變量參考
實(shí)戰(zhàn) Rail
服務(wù)端的防護(hù)
刪除
鏡像的實(shí)現(xiàn)原理
多臺(tái)物理主機(jī)之間的容器互聯(lián)
Docker 倉(cāng)庫(kù)
簡(jiǎn)介
數(shù)據(jù)卷
命令參考
使用 Supervisor 來(lái)管理進(jìn)程
移除
基本結(jié)構(gòu)
命令查詢
終止容器
聯(lián)合文件系統(tǒng)
安裝
簡(jiǎn)介
配置 DNS
內(nèi)核能力機(jī)制
導(dǎo)出和導(dǎo)入容器
配置 docker0 網(wǎng)橋
倉(cāng)庫(kù)配置文件
內(nèi)核名字空間
標(biāo)準(zhǔn)化開(kāi)發(fā)測(cè)試和生產(chǎn)環(huán)境
外部訪問(wèn)容器
fig.yml 參考
Ubuntu 系列安裝 Docker
有用資源
安裝
端口映射實(shí)現(xiàn)
安裝 Fig
工具和示例
簡(jiǎn)介
控制組
容器格式
Docker Hub

實(shí)戰(zhàn) Rail

我們現(xiàn)在將使用 Fig 配置并運(yùn)行一個(gè) Rails/PostgreSQL 應(yīng)用。在開(kāi)始之前,先確保 Fig 已經(jīng) 安裝。

在一切工作開(kāi)始前,需要先設(shè)置好三個(gè)必要的文件。
首先,因?yàn)閼?yīng)用將要運(yùn)行在一個(gè)滿足所有環(huán)境依賴的 Docker 容器里面,那么我們可以通過(guò)編輯 Dockerfile 文件來(lái)指定 Docker 容器要安裝內(nèi)容。內(nèi)容如下:

FROM ruby
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
RUN bundle install
ADD . /myapp

以上內(nèi)容指定應(yīng)用將使用安裝了 Ruby、Bundler 以及其依賴件的鏡像。更多關(guān)于如何編寫 Dockerfile 文件的信息可以查看鏡像創(chuàng)建和 Dockerfile 使用。 下一步,我們需要一個(gè)引導(dǎo)加載 Rails 的文件 Gemfile 。 等一會(huì)兒它還會(huì)被 rails new 命令覆蓋重寫。

source 'https://rubygems.org'
gem 'rails', '4.0.2'

最后,fig.yml 文件才是最神奇的地方。 fig.yml 文件將把所有的東西關(guān)聯(lián)起來(lái)。它描述了應(yīng)用的構(gòu)成(一個(gè) web 服務(wù)和一個(gè)數(shù)據(jù)庫(kù))、每個(gè)鏡像的來(lái)源(數(shù)據(jù)庫(kù)運(yùn)行在使用預(yù)定義的 PostgreSQL 鏡像,web 應(yīng)用側(cè)將從本地目錄創(chuàng)建)、鏡像之間的連接,以及服務(wù)開(kāi)放的端口。

db:
  image: postgres
  ports:
    - "5432"
web:
  build: .
  command: bundle exec rackup -p 3000
  volumes:
    - .:/myapp
  ports:
    - "3000:3000"
  links:
    - db

所有文件就緒后,我們就可以通過(guò)使用 fig run 命令生成應(yīng)用的骨架了。

$ fig run web rails new . --force --database=postgresql --skip-bundle

Fig 會(huì)先使用 Dockerfile 為 web 服務(wù)創(chuàng)建一個(gè)鏡像,接著使用這個(gè)鏡像在容器里運(yùn)行 rails new 和它之后的命令。一旦這個(gè)命令運(yùn)行完后,應(yīng)該就可以看一個(gè)嶄新的應(yīng)用已經(jīng)生成了。

$ ls
Dockerfile   app          fig.yml      tmp
Gemfile      bin          lib          vendor
Gemfile.lock config       log
README.rdoc  config.ru    public
Rakefile     db           test

在新的 Gemfile 文件去掉加載 therubyracer 的行的注釋,這樣我們便可以使用 Javascript 運(yùn)行環(huán)境:

gem 'therubyracer', platforms: :ruby

現(xiàn)在我們已經(jīng)有一個(gè)新的 Gemfile 文件,需要再重新創(chuàng)建鏡像。(這個(gè)會(huì)步驟會(huì)改變 Dockerfile 文件本身,僅僅需要重建一次)。

$ fig build

應(yīng)用現(xiàn)在就可以啟動(dòng)了,但配置還未完成。Rails 默認(rèn)讀取的數(shù)據(jù)庫(kù)目標(biāo)是 localhost ,我們需要手動(dòng)指定容器的 db 。同樣的,還需要把用戶名修改成和 postgres 鏡像預(yù)定的一致。 打開(kāi)最新生成的 database.yml 文件。用以下內(nèi)容替換:

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db

test:
  <<: *default
  database: myapp_test

現(xiàn)在就可以啟動(dòng)應(yīng)用了。

$ fig up

如果一切正常,你應(yīng)該可以看到 PostgreSQL 的輸出,幾秒后可以看到這樣的重復(fù)信息:

myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick 1.3.1
myapp_web_1 | [2014-01-17 17:16:29] INFO  ruby 2.0.0 (2013-11-22) [x86_64-linux-gnu]
myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick::HTTPServer#start: pid=1 port=3000

最后, 我們需要做的是創(chuàng)建數(shù)據(jù)庫(kù),打開(kāi)另一個(gè)終端,運(yùn)行:

$ fig run web rake db:create

這個(gè) web 應(yīng)用已經(jīng)開(kāi)始在你的 docker 守護(hù)進(jìn)程里面監(jiān)聽(tīng)著 3000 端口了(如果你有使用 boot2docker ,執(zhí)行 boot2docker ip ,就會(huì)看到它的地址)。

http://wiki.jikexueyuan.com/project/docker-technology-and-combat/images/fig-rails-screenshot.png" alt="" />

上一篇:簡(jiǎn)介下一篇:總結(jié)