非常教程

Docker 17参考手册

撰写 | Compose

Rails and PostgreSQL (Compose)

这个快速启动指南将向您展示如何使用 DockerCompose 来设置和运行 Rails/PostgreSQL 应用程序。在开始之前,你需要组合安装...

定义项目

首先设置构建应用程序所需的四个文件。首先,由于您的应用程序将在包含所有依赖关系的 Docker 容器中运行,因此您需要准确定义容器中需要包含的内容。这是通过使用名为的文件完成的Dockerfile。首先,Dockerfile 由以下部分组成:

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

这会将您的应用程序代码放入一个图像中,该图像将与 Ruby,Bundler 以及其内的所有依赖关系构建一个容器。有关如何编写 Dockerfiles 的更多信息,请参阅 Docker 用户指南和 Dockerfile 参考。

接下来,创建一个Gemfile只加载 Rails 的引导程序。它会在一瞬间被覆盖rails new

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

你需要一个空的Gemfile.lock为了建造我们的Dockerfile

touch Gemfile.lock

最后,docker-compose.yml是魔术发生的地方。该文件描述了组成应用程序(数据库和 Web 应用程序)的服务,如何获取每个人的 Docker 镜像(数据库仅在预制 PostgreSQL 镜像上运行,Web 应用程序是从当前目录构建的),以及将它们链接在一起并公开 Web 应用程序的端口所需的配置。

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

针尖::您可以使用.yml.yaml此文件的扩展名。

构建项目

有了这四个文件之后,现在可以使用以下方法生成 Rails 框架应用程序 docker-compose 运行。

docker-compose run web rails new . --force --database=postgresql

首先,撰写将为web使用Dockerfile.然后它会运行rails new在一个新的容器中,使用该图像。一旦完成,你就应该生成一个新的应用程序。

列出文件。

$ ls -l
total 64
-rw-r--r--   1 vmb  staff   222 Jun  7 12:05 Dockerfile
-rw-r--r--   1 vmb  staff  1738 Jun  7 12:09 Gemfile
-rw-r--r--   1 vmb  staff  4297 Jun  7 12:09 Gemfile.lock
-rw-r--r--   1 vmb  staff   374 Jun  7 12:09 README.md
-rw-r--r--   1 vmb  staff   227 Jun  7 12:09 Rakefile
drwxr-xr-x  10 vmb  staff   340 Jun  7 12:09 app
drwxr-xr-x   8 vmb  staff   272 Jun  7 12:09 bin
drwxr-xr-x  14 vmb  staff   476 Jun  7 12:09 config
-rw-r--r--   1 vmb  staff   130 Jun  7 12:09 config.ru
drwxr-xr-x   3 vmb  staff   102 Jun  7 12:09 db
-rw-r--r--   1 vmb  staff   211 Jun  7 12:06 docker-compose.yml
drwxr-xr-x   4 vmb  staff   136 Jun  7 12:09 lib
drwxr-xr-x   3 vmb  staff   102 Jun  7 12:09 log
drwxr-xr-x   9 vmb  staff   306 Jun  7 12:09 public
drwxr-xr-x   9 vmb  staff   306 Jun  7 12:09 test
drwxr-xr-x   4 vmb  staff   136 Jun  7 12:09 tmp
drwxr-xr-x   3 vmb  staff   102 Jun  7 12:09 vendor

如果您在 Linux 上运行 Docker,则文件rails new所创建的是根用户拥有的。这是因为容器以根用户的身份运行。如果是这样,请更改新文件的所有权。

sudo chown -R $USER:$USER .

如果您在 Mac 或 Windows 上运行 Docker,您应该已经拥有所有文件的所有权,包括rails new

现在你已经有了一个新的 Gemfile,你需要再次构建图像​​。(这和Gemfile对 Dockerfile 的更改应该是唯一需要重建的时间。)

docker-compose build

连接数据库

应用程序现在可以启动,但你还没有完全到位。默认情况下,Rails期望数据库在其上运行。localhost-所以你需要把它指向db而是集装箱。您还需要更改数据库和用户名,使其与postgres图像。

替换config/database.yml的内容有以下几点:

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

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

您现在可以使用 docker 启动应用程序 - 撰写:

docker-compose up

如果一切顺利,您应该会看到一些 PostgreSQL 输出,然后几秒钟后是8212;您应该看到熟悉的重音:

Starting rails_db_1 ...
Starting rails_db_1 ... done
Recreating rails_web_1 ...
Recreating rails_web_1 ... done
Attaching to rails_db_1, rails_web_1
db_1   | LOG:  database system was shut down at 2017-06-07 19:12:02 UTC
db_1   | LOG:  MultiXact member wraparound protections are now enabled
db_1   | LOG:  database system is ready to accept connections
db_1   | LOG:  autovacuum launcher started
web_1  | => Booting Puma
web_1  | => Rails 5.0.0.1 application starting in development on http://0.0.0.0:3000
web_1  | => Run `rails server -h` for more startup options
web_1  | Puma starting in single mode...
web_1  | * Version 3.9.1 (ruby 2.3.3-p222), codename: Private Caller
web_1  | * Min threads: 5, max threads: 5
web_1  | * Environment: development
web_1  | * Listening on tcp://0.0.0.0:3000
web_1  | Use Ctrl-C to stop

最后,您需要创建数据库。在另一个终端,运行:

docker-compose run web rake db:create

下面是该命令的输出示例:

vmb at snapair in ~/sandbox/rails
$ docker-compose run web rake db:create
Starting rails_db_1 ... done
Created database 'myapp_development'
Created database 'myapp_test'

查看 Rails 欢迎页面!

就这样,您的应用程序现在应该运行在您的 Docker 守护进程的端口3000上。

在 Docker for Mac 和 Docker for Windows 上,转到http://localhost:3000Web 浏览器以查看 Rails 欢迎。

如果您使用 Docker Machine,则docker-machine ip MACHINE_VM返回可添加端口(<Docker-Host-IP>:3000)的 Docker 主机 IP 地址。

二次

Rails and PostgreSQL (Compose)

停止应用程序

若要停止应用程序,请运行码头工人在您的项目目录中。您可以使用启动数据库的同一终端窗口,也可以使用访问命令提示符的另一个终端窗口。这是停止应用程序的一种干净的方法。

vmb at snapair in ~/sandbox/rails
$ docker-compose down
Stopping rails_web_1 ... done
Stopping rails_db_1 ... done
Removing rails_web_run_1 ... done
Removing rails_web_1 ... done
Removing rails_db_1 ... done
Removing network rails_default

您还可以用Ctrl-C在执行docker-compose up如果您以这种方式停止应用程序,并试图重新启动它,您可能会收到以下错误:

web_1 | A server is already
running. Check /myapp/tmp/pids/server.pid.

若要解决此问题,请删除该文件。tmp/pids/server.pid,然后用docker-compose up

重新启动应用程序

要重新启动应用程序:

  1. 运行docker-compose up在项目目录中。
  1. 在另一个终端中运行此命令以重新启动数据库:docker-compose run web rake db:create

重建应用程序

如果对 Gemfile 或 Composed 文件进行更改以尝试一些不同的配置,则需要重新构建。有些更改只需要docker-compose up --build,但是完全重建需要重新运行docker-compose run web bundle install同步Gemfile.lock给主机,然后是docker-compose up --build

下面是第一个例子,在这种情况下,完全重建是不必要的。假设您只想将本地主机上的公开端口更改为3000在我们的第一个例子中3001更改撰写文件以公开端口。3000在新港口的集装箱上,3001,并保存更改:

ports: - "3001:3000"

现在,用docker-compose up --build,然后重新启动数据库:docker-compose run web rake db:create...

在容器内部,您的应用程序像以前一样运行在相同的端口上3000,但现在http://localhost:3001您的本地主机上仍可使用 Rails Welcome 。

更多撰写文档

  • 用户指南
  • 安装组合
  • 开始
  • 从 Django 开始
  • 从 WordPress 开始
  • 命令行引用
  • 合成文件引用

documentation, docs, docker, compose, orchestration, containers

撰写 | Compose相关

1.关于版本和升级 | About versions and upgrading (Compose)
2.ASP.NET Core + SQL Server on Linux (Compose)
3.CLI环境变量 | CLI environment variables (Compose)
4.命令行完成 | Command-line completion (Compose)
5.组成 | Compose
6.组合命令行参考 | Compose command-line reference
7.控制启动顺序 | Control startup order (Compose)
8.Django and PostgreSQL (Compose)
9.Docker堆栈和分布式应用程序包 | Docker stacks and distributed application bundles (Compose)
10.docker-compose构建 | docker-compose build
11.docker-compose 束 | docker-compose bundle
12.docker-compose配置 | docker-compose config
13.docker-compose创建 | docker-compose create
14.docker-compose down
15.docker-compose事件 | docker-compose events
16.docker-compose exec
17.docker-compose助手 | docker-compose help
18.docker-compose图像 | docker-compose images
19.docker-compose kill
20.docker-compose logs
21.docker-compose暂停 | docker-compose pause
22.docker-compose port
23.docker-compose ps
24.docker-compose pull
25.docker-compose push
26.docker-compose重启 | docker-compose restart
27.docker-compose rm
28.docker-compose运行 | docker-compose run
29.docker-compose 规模 | docker-compose scale
30.docker-compose开始 | docker-compose start
31.docker-compose结束 | docker-compose stop
32.docker-compose顶部 | docker-compose top
33.docker-compose 取消暂停 | docker-compose unpause
34.docker-compose up
35.环境文件 | Environment file (Compose)
36.Compose中的环境变量 | Environment variables in Compose
37.Compose中的扩展服务 | Extend services in Compose
38.常见问题 | Frequently asked questions (Compose)
39.开始 | Getting started (Compose)
40.安装Compose | Install Compose
41.链接环境变量(不建议使用) | Link environment variables (deprecated) (Compose)
42.Compose网络 | Networking in Compose
43.Docker Compose总览 | Overview of Docker Compose
44. docker-compose CLI总览 | Overview of docker-compose CLI
45.快速开始:Compose和WordPress | Quickstart: Compose and WordPress
46.Compose的简单应用 | Sample apps with Compose
47.Compose在产品中的使用 | Using Compose in production
48.Using Compose with Swarm
49.版本1 | Version 1 (Compose)
50.版本2 | Version 2 (Compose)
51.版本3 | Version 3 (Compose)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06