使用 Django 入门 Fig
我们现在将使用 Fig 配置并运行一个 Django/PostgreSQL 应用在此之前, 先确保 Fig 已经 安装
在一切工作开始前, 需要先设置好三个必要的文件
第一步, 因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面, 那么我们可以通过编辑 Dockerfile 文件来指定 Docker 容器要安装内容内容如下:
- FROM python:2.7
- ENV PYTHONUNBUFFERED 1
- RUN mkdir /code
- WORKDIR /code
- ADD requirements.txt /code/
- RUN pip install -r requirements.txt
- ADD . /code/
以上内容指定应用将使用安装了 Python 以及必要依赖包的镜像更多关于如何编写 Dockerfile 文件的信息可以查看 镜像创建 和 Dockerfile 使用
第二步, 在 requirements.txt 文件里面写明需要安装的具体依赖包名
Django psycopg2
就是这么简单
第三步, fig.yml 文件将把所有的东西关联起来它描述了应用的构成 (一个 web 服务和一个数据库) 使用的 Docker 镜像镜像之间的连接挂载到容器的卷, 以及服务开放的端口
- db:
- image: postgres
- web:
- build: .
- command: python manage.py runserver 0.0.0.0:8000
- volumes:
- - .:/code
- ports:
- - "8000:8000"
- links:
- - db
查看 fig.yml 章节 了解更多详细的工作机制
现在我们就可以使用 fig run 命令启动一个 Django 应用了
$ fig run web django-admin.py startproject figexample .
Fig 会先使用 Dockerfile 为 web 服务创建一个镜像, 接着使用这个镜像在容器里运行
django-admin.py startproject figexample .
指令
这将在当前目录生成一个 Django 应用
- $ ls
- Dockerfile fig.yml figexample manage.py requirements.txt
首先, 我们要为应用设置好数据库的连接信息用以下内容替换
figexample/settings.py
文件中 DATABASES = ... 定义的节点内容
- DATABASES = {
- default: {
- ENGINE: django.db.backends.postgresql_psycopg2,
- NAME: postgres,
- USER: postgres,
- HOST: db,
- PORT: 5432,
- }
- }
这些信息是在 postgres Docker 镜像固定设置好的
然后, 运行 fig up :
- Recreating myapp_db_1...
- Recreating myapp_web_1...
- Attaching to myapp_db_1, myapp_web_1
- myapp_db_1 |
- myapp_db_1 | PostgreSQL stand-alone backend 9.1.11
- myapp_db_1 | 2014-01-27 12:17:03 UTC LOG: database system is ready to accept connections
- myapp_db_1 | 2014-01-27 12:17:03 UTC LOG: autovacuum launcher started
- myapp_web_1 | Validating models...
- myapp_web_1 |
- myapp_web_1 | 0 errors found
- myapp_web_1 | January 27, 2014 - 12:12:40
- myapp_web_1 | Django version 1.6.1, using settings figexample.settings
- myapp_web_1 | Starting development server at http://0.0.0.0:8000/
- myapp_web_1 | Quit the server with CONTROL-C.
这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了(如果你有使用 boot2docker , 执行 boot2docker ip , 就会看到它的地址)
你还可以在 Docker 上运行其它的管理命令, 例如对于同步数据库结构这种事, 在运行完 fig up 后, 在另外一个终端运行以下命令即可:
$ fig run web python manage.py syncdb
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
以上内容指定应用将使用安装了 RubyBundler 以及其依赖件的镜像更多关于如何编写 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 , 就会看到它的地址)
Docker Fig 实战 wordpress
使用 Wordpress 入门 Fig
Fig 让 Wordpress 运行在一个独立的环境中很简易 安装 Fig , 然后下载 Wordpress 到当前目录:
wordpress.org/latest.tar.gz | tar -xvzf -
这将会创建一个叫 wordpress 目录, 你也可以重命名成你想要的名字在目录里面, 创建一个 Dockerfile 文件, 定义应用的运行环境:
- FROM orchardup/php5
- ADD . /code
以上内容告诉 Docker 创建一个包含 PHP 和 Wordpress 的镜像更多关于如何编写 Dockerfile 文件的信息可以查看 镜像创建 和 Dockerfile 使用
下一步, fig.yml 文件将开启一个 web 服务和一个独立的 MySQL 实例:
- web:
- build: .
- command: php -S 0.0.0.0:8000 -t /code
- ports:
- - "8000:8000"
- links:
- - db
- volumes:
- - .:/code
- db:
- image: orchardup/mysql
- environment:
- MYSQL_DATABASE: wordpress
要让这个应用跑起来还需要两个文件 第一个, wp-config.php , 它是一个标准的 Wordpress 配置文件, 有一点需要修改的是把数据库的配置指向 db 容器
- <?php
- define(DB_NAME, wordpress);
- define(DB_USER, root);
- define(DB_PASSWORD, );
- define(DB_HOST, "db:3306");
- define(DB_CHARSET, utf8);
- define(DB_COLLATE, );
- define(AUTH_KEY, put your unique phrase here);
- define(SECURE_AUTH_KEY, put your unique phrase here);
- define(LOGGED_IN_KEY, put your unique phrase here);
- define(NONCE_KEY, put your unique phrase here);
- define(AUTH_SALT, put your unique phrase here);
- define(SECURE_AUTH_SALT, put your unique phrase here);
- define(LOGGED_IN_SALT, put your unique phrase here);
- define(NONCE_SALT, put your unique phrase here);
- $table_prefix = wp_;
- define(WPLANG, );
- define(WP_DEBUG, false);
- if ( !defined(ABSPATH) )
- define(ABSPATH, dirname(__FILE__) . /);
- require_once(ABSPATH . wp-settings.php);
第二个, router.php , 它告诉 PHP 内置的服务器怎么运行 Wordpress:
- <?php
- $root = $_SERVER[DOCUMENT_ROOT];
- chdir($root);
- $path = /.ltrim(parse_url($_SERVER[REQUEST_URI])[path],/);
- set_include_path(get_include_path().:.__DIR__);
- if(file_exists($root.$path))
- {
- if(is_dir($root.$path) && substr($path,strlen($path) - 1, 1) !== /)
- $path = rtrim($path,/)./index.php;
- if(strpos($path,.php) === false) return false;
- else {
- chdir(dirname($root.$path));
- require_once $root.$path;
- }
- }else include_once index.php;
这些配置文件就绪后, 在你的 Wordpress 目录里面执行 fig up 指令, Fig 就会拉取镜像再创建我们所需要的镜像, 然后启动 web 和数据库容器
接着访问 docker 守护进程监听的 8000 端口就能看你的 Wordpress 网站了(如果你有使用 boot2docker , 执行 boot2docker ip , 就会看到它的地址)
来源: http://www.bubuko.com/infodetail-2501828.html