×
Docker 前言

Docker 简介

Docker 是什么为什么要用 DockerDocker 基本概念Docker 镜像Docker 容器的运用Docker 仓库

Docker 安装指南

Ubuntu 安装DockerCentOS 安装DockerDocker 介绍镜像Docker 如何获取镜像Docker 列出镜像Docker 创建镜像Docker 存出和载入镜像Docker 移除镜像Docker 镜像的实现原理Docker 介绍容器Docker 进入容器Docker 导出和导入容器Docker 删除容器Docker 启动容器Docker 守护态运行容器Docker 终止容器Docker 仓库介绍Docker HubDocker 私有仓库Docker 配置文件Docker 如何进行数据管理Docker 数据卷Docker 数据卷容器Docker 备份、恢复、迁移

Docker 使用网络

Docker 容器如何互联Docker 外部访问容器Docker 高级网络配置Docker 快速配置指南Docker 配置 DNSDocker 容器访问控制Docker 端口映射实现Docker 配置 docker0 网桥Docker 自定义网桥Docker 工具和示例Docker 编辑网络配置文件实例:创建一个点到点连接

Docker 实战案例

使用 Supervisor 来管理进程创建 tomcat/weblogic 集群多台物理主机之间的容器互联标准化开发测试和生产环境Docker 安全Docker 内核名字空间Docker 控制组Docker 服务端防护Docker 内核能力机制Docker 其它安全特性Docker 安全总结DockerfileDockerfile 基本结构Dockerfile 指令Dockerfile 创建镜像Docker 底层实现Docker 基本架构Docker 名字空间Docker 控制组Docker 联合文件系统Docker 容器格式Docker 网络Docker Etcd项目Docker etcd简介Docker 安装etcdDocker 使用 etcdctlDocker Fig 项目Docker fig简介Docker 安装FigDocker Fig命令参考Docker fig.yml参考Docker Fig环境变量参考Docker Fig实战 DjangoDocker Fig实战 RailsDocker Fig实战 wordpressDocker CoreOS 项目Docker Kubernetes 项目Docker Kubernetes简介Docker Kubernetes快速上手Docker Kubernetes架构设计Docker 附录一:命令查询Docker 附录二:常见仓库介绍Docker 常见仓库NginxDocker 常见仓库WordPressDocker 常见仓库Node.jsDocker 常见仓库UbuntuDocker 常见仓库CentOSDocker 常见仓库MySQLDocker 常见仓库MongoDBDocker 常见仓库RedisDocker 附录三:有用的资源

Docker Fig实战 Rails


使用 Rail 入门 Fig

我们现在将使用 Fig 配置并运行一个 Rails/PostgreSQL 应用。在开始之前,先确保 Fig 已经 安装

在一切工作开始前,需要先设置好三个必要的文件。
首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 Dockerfile 文件来指定 Docker 容器要安装内容。内容如下:

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

以上内容指定应用将使用安装了 Ruby、Bundler 以及其依赖件的镜像。更多关于如何编写 Dockerfile 文件的信息可以查看 镜像创建Dockerfile 使用。 下一步,我们需要一个引导加载 Rails 的文件 Gemfile 。 等一会儿它还会被 rails new 命令覆盖重写。

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

最后,fig.yml 文件才是最神奇的地方。 fig.yml 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、每个镜像的来源(数据库运行在使用预定义的 PostgreSQL 镜像,web 应用侧将从本地目录创建)、镜像之间的连接,以及服务开放的端口。

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

所有文件就绪后,我们就可以通过使用 fig run 命令生成应用的骨架了。

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

Fig 会先使用 Dockerfile 为 web 服务创建一个镜像,接着使用这个镜像在容器里运行 rails new 和它之后的命令。一旦这个命令运行完后,应该就可以看一个崭新的应用已经生成了。

$ 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 运行环境:

gem 'therubyracer', platforms: :ruby

现在我们已经有一个新的 Gemfile 文件,需要再重新创建镜像。(这个会步骤会改变 Dockerfile 文件本身,仅仅需要重建一次)。

$ fig build

应用现在就可以启动了,但配置还未完成。Rails 默认读取的数据库目标是 localhost ,我们需要手动指定容器的 db 。同样的,还需要把用户名修改成和 postgres 镜像预定的一致。 打开最新生成的 database.yml 文件。用以下内容替换:

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

test:
  <<: *default
  database: myapp_test

现在就可以启动应用了。

$ fig up

如果一切正常,你应该可以看到 PostgreSQL 的输出,几秒后可以看到这样的重复信息:

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

最后, 我们需要做的是创建数据库,打开另一个终端,运行:

$ fig run web rake db:create

这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了(如果你有使用 boot2docker ,执行 boot2docker ip ,就会看到它的地址)。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)