Docker撰写Rails教程:这些文件到哪里去了?
我一直在关注Docker Compose Rails教程 。 它一直做得很好,直到我运行docker-compose run web rails new . --force --database=postgresql --skip-bundle
docker-compose run web rails new . --force --database=postgresql --skip-bundle
(好吧,安装顺利:))
以下是发生的事情:
▶ sudo docker-compose run web rails new . --force --database=postgresql --skip-bundle Creating dockers_db_1... Building web... Step 0 : FROM ruby:2.1.4 ---> 766162a99b23 Step 1 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev ---> Using cache ---> 0053b73703c1 Step 2 : RUN mkdir /myapp ---> Using cache ---> bf768c1e06ca Step 3 : WORKDIR /myapp ---> Using cache ---> 934af3ef8124 Step 4 : ADD Gemfile /myapp/Gemfile ---> Using cache ---> 3666057e0d52 Step 5 : RUN bundle install ---> Using cache ---> e796e93e83d6 Step 6 : ADD . /myapp ---> Using cache ---> 03249ac42a63 Successfully built 03249ac42a63 exist create README.rdoc create Rakefile create config.ru create .gitignore force Gemfile create app create app/assets/images/rails.png create app/assets/javascripts/application.js create app/assets/stylesheets/application.css create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/mailers create app/models create app/views/layouts/application.html.erb create app/mailers/.gitkeep create app/models/.gitkeep create config create config/routes.rb create config/application.rb create config/environment.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/backtrace_silencers.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/secret_token.rb create config/initializers/session_store.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create doc create doc/README_FOR_APP create lib create lib/tasks create lib/tasks/.gitkeep create lib/assets create lib/assets/.gitkeep create log create log/.gitkeep create public create public/404.html create public/422.html create public/500.html create public/favicon.ico create public/index.html create public/robots.txt create script create script/rails create test/fixtures create test/fixtures/.gitkeep create test/functional create test/functional/.gitkeep create test/integration create test/integration/.gitkeep create test/unit create test/unit/.gitkeep create test/performance/browsing_test.rb create test/test_helper.rb create tmp/cache create tmp/cache/assets create vendor/assets/javascripts create vendor/assets/javascripts/.gitkeep create vendor/assets/stylesheets create vendor/assets/stylesheets/.gitkeep create vendor/plugins create vendor/plugins/.gitkeep
所以我喜欢“哦,很酷,它的作品”。
但是,我需要编辑Gemfile
。 主机Gemfile
没有改变:
cat Gemfile source 'https://rubygems.org' gem 'rails', '3.2.18'
所以我想我需要进入我的docker:
▶ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE workspace_web latest 03249ac42a63 8 hours ago 835.3 MB dockers_web latest 03249ac42a63 8 hours ago 835.3 MB postgres latest 7bf0ec35adaf 6 days ago 214 MB hello-world latest 91c95931e552 9 weeks ago 910 B ruby 2.1.4 766162a99b23 7 months ago 798.3 MB
但是那里的文件看起来是一样的:
▶ sudo docker run -t -i workspace_web /bin/bash root@400ca3fd62a7:/myapp# cat Gemfile source 'https://rubygems.org' gem 'rails', '3.2.18'
rails new
生成的文件去了哪里? 一直在四处搜寻,没有成功。
我在Debian上,所以不使用Boot2docker。
谢谢
在docker-compose.yml
注意以下几行:
volumes: - .:/myapp
/myapp
被映射到当您运行docker-compose run
时所在的当前目录 – 所以这是您应该查找这些文件的位置。
当你使用sudo docker run -t -i workspace_web /bin/bash
你没有添加-v .:/mapp
所以你的/myapp
文件夹没有被装载,并且在容器中保持空的容量。
docker-rails是我刚刚创build的一个项目,它使得docker(和CI) 非常容易 。 我认为它可以帮助你,并减less在docker上启动和运行rails所需的configuration。
它也将帮助你将这些文件提取回主机。 在我的性能testing中,执行如下操作:
volumes: - .:/myapp
因为它正在安装一个音量,因此速度降低了4倍 .
在主机上。 相反,如Dockerfile
-rails示例中所做的那样,使用Dockerfile
VOLUME
来获得几乎原生的I / O速度(绕过任何联合文件系统)并COPY
项目目录。 这意味着你的所有文件将驻留在容器中,所以你需要extract
任何想要的文件。 docker-rails
使得这非常简单,例如,我使用这个提取来处理我的testing工件:
web: extract: - '/project/target' - '/project/vcr' - '/project/tmp' - '/project/log'
TLDR; 有很多技巧让docker/撰写正确的轨道运行。 检出docker导轨 ,它在一个地方都有。