?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
這個快速啟動指南將向您展示如何使用 DockerCompose 來設(shè)置和運(yùn)行 Rails/PostgreSQL 應(yīng)用程序。在開始之前,你需要組合安裝...
首先設(shè)置構(gòu)建應(yīng)用程序所需的四個文件。首先,由于您的應(yīng)用程序?qū)⒃诎幸蕾囮P(guān)系的 Docker 容器中運(yùn)行,因此您需要準(zhǔn)確定義容器中需要包含的內(nèi)容。這是通過使用名為的文件完成的Dockerfile
。首先,Dockerfile 由以下部分組成:
FROM ruby:2.3.3RUN 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
這會將您的應(yīng)用程序代碼放入一個圖像中,該圖像將與 Ruby,Bundler 以及其內(nèi)的所有依賴關(guān)系構(gòu)建一個容器。有關(guān)如何編寫 Dockerfiles 的更多信息,請參閱 Docker 用戶指南和 Dockerfile 參考。
接下來,創(chuàng)建一個Gemfile
只加載 Rails 的引導(dǎo)程序。它會在一瞬間被覆蓋rails new
。
source 'https://rubygems.org'gem 'rails', '5.0.0.1'
你需要一個空的Gemfile.lock
為了建造我們的Dockerfile
。
touch Gemfile.lock
最后,docker-compose.yml
是魔術(shù)發(fā)生的地方。該文件描述了組成應(yīng)用程序(數(shù)據(jù)庫和 Web 應(yīng)用程序)的服務(wù),如何獲取每個人的 Docker 鏡像(數(shù)據(jù)庫僅在預(yù)制 PostgreSQL 鏡像上運(yùn)行,Web 應(yīng)用程序是從當(dāng)前目錄構(gòu)建的),以及將它們鏈接在一起并公開 Web 應(yīng)用程序的端口所需的配置。
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
此文件的擴(kuò)展名。
有了這四個文件之后,現(xiàn)在可以使用以下方法生成 Rails 框架應(yīng)用程序 docker-compose 運(yùn)行。
docker-compose run web rails new . --force --database=postgresql
首先,撰寫將為web
使用Dockerfile
.然后它會運(yùn)行rails new
在一個新的容器中,使用該圖像。一旦完成,你就應(yīng)該生成一個新的應(yīng)用程序。
列出文件。
$ 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 publicdrwxr-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 上運(yùn)行 Docker,則文件rails new
所創(chuàng)建的是根用戶擁有的。這是因為容器以根用戶的身份運(yùn)行。如果是這樣,請更改新文件的所有權(quán)。
sudo chown -R $USER:$USER .
如果您在 Mac 或 Windows 上運(yùn)行 Docker,您應(yīng)該已經(jīng)擁有所有文件的所有權(quán),包括rails new
。
現(xiàn)在你已經(jīng)有了一個新的 Gemfile,你需要再次構(gòu)建圖像。(這和Gemfile
對 Dockerfile 的更改應(yīng)該是唯一需要重建的時間。)
docker-compose build
應(yīng)用程序現(xiàn)在可以啟動,但你還沒有完全到位。默認(rèn)情況下,Rails期望數(shù)據(jù)庫在其上運(yùn)行。localhost
-所以你需要把它指向db
而是集裝箱。您還需要更改數(shù)據(jù)庫和用戶名,使其與postgres
圖像。
替換config/database.yml
的內(nèi)容有以下幾點:
default: &default adapter: postgresql encoding: unicode host: db username: postgres password: pool: 5development: <<: *default database: myapp_development test: <<: *default database: myapp_test
您現(xiàn)在可以使用 docker 啟動應(yīng)用程序 - 撰寫:
docker-compose up
如果一切順利,您應(yīng)該會看到一些 PostgreSQL 輸出,然后幾秒鐘后是8212;您應(yīng)該看到熟悉的重音:
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:3000web_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: 5web_1 | * Environment: development web_1 | * Listening on tcp://0.0.0.0:3000web_1 | Use Ctrl-C to stop
最后,您需要創(chuàng)建數(shù)據(jù)庫。在另一個終端,運(yùn)行:
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'
就這樣,您的應(yīng)用程序現(xiàn)在應(yīng)該運(yùn)行在您的 Docker 守護(hù)進(jìn)程的端口3000上。
在 Docker for Mac 和 Docker for Windows 上,轉(zhuǎn)到http://localhost:3000
Web 瀏覽器以查看 Rails 歡迎。
如果您使用 Docker Machine,則docker-machine ip MACHINE_VM
返回可添加端口(<Docker-Host-IP>:3000
)的
Docker 主機(jī) IP 地址。
二次
若要停止應(yīng)用程序,請運(yùn)行碼頭工人在您的項目目錄中。您可以使用啟動數(shù)據(jù)庫的同一終端窗口,也可以使用訪問命令提示符的另一個終端窗口。這是停止應(yīng)用程序的一種干凈的方法。
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
在執(zhí)行docker-compose up
如果您以這種方式停止應(yīng)用程序,并試圖重新啟動它,您可能會收到以下錯誤:
web_1 | A server is already running. Check /myapp/tmp/pids/server.pid.
若要解決此問題,請刪除該文件。tmp/pids/server.pid
,然后用docker-compose up
。
要重新啟動應(yīng)用程序:
運(yùn)行docker-compose up
在項目目錄中。
在另一個終端中運(yùn)行此命令以重新啟動數(shù)據(jù)庫:docker-compose run web rake db:create
如果對 Gemfile 或 Composed 文件進(jìn)行更改以嘗試一些不同的配置,則需要重新構(gòu)建。有些更改只需要docker-compose up --build
,但是完全重建需要重新運(yùn)行docker-compose run web bundle install
同步Gemfile.lock
給主機(jī),然后是docker-compose up --build
。
下面是第一個例子,在這種情況下,完全重建是不必要的。假設(shè)您只想將本地主機(jī)上的公開端口更改為3000
在我們的第一個例子中3001
更改撰寫文件以公開端口。3000
在新港口的集裝箱上,3001
,并保存更改:
ports: - "3001:3000"
現(xiàn)在,用docker-compose up --build
,然后重新啟動數(shù)據(jù)庫:docker-compose run web rake db:create
...
在容器內(nèi)部,您的應(yīng)用程序像以前一樣運(yùn)行在相同的端口上3000
,但現(xiàn)在http://localhost:3001
您的本地主機(jī)上仍可使用 Rails Welcome 。
用戶指南
安裝組合
開始
從 Django 開始
從 WordPress 開始
命令行引用
合成文件引用