閲覧ありがとうございます!
『コンテナは、イメージから作成されたものであり、作業履歴を保存するもの』っと書かれていたので、作業履歴すべて(手で打ったコード等)を保存するものだと思っていました。
しかし実際、コンテナはコンテナを動かしたコマンド(作業履歴)を保存するものであるとdocker ps -a
で分かったのですが、以下の疑問が出ました。
###環境
docker for Mac
docker version: 17.03.1-ce
Users/****/workspace下で、Quickstart: Compose and Railsリンク内容を構築
linux
1###Dockerfile 2FROM ruby:2.3.3 3RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 4RUN mkdir /myapp 5WORKDIR /myapp 6ADD Gemfile /myapp/Gemfile 7ADD Gemfile.lock /myapp/Gemfile.lock 8RUN bundle install 9ADD . /myapp 10 11###docker-compose.yml 12version: '2' 13services: 14 db: 15 image: postgres 16 web: 17 build: . 18 command: bundle exec rails s -p 3000 -b '0.0.0.0' 19 volumes: 20 - .:/myapp 21 ports: 22 - "3000:3000" 23 depends_on: 24 - db
###疑問1:コンテナの中身の違い
linux
1$ docker-compose run web rails g contoller StaticPages home 2$ docker inspect [generate contoller container ID] 3"Cmd": [ 4 "rails", 5 "destroy", 6 "controller", 7 "StaticPages", 8 "home" 9 ] 10 11$ docker-compose run web rails g destroy StaticPages home 12$ docker inspect [destroy controller container ID] 13"Cmd": [ 14 "rails", 15 "destroy", 16 "controller", 17 "StaticPages", 18 "home" 19 ]
上記のコマンドより、各コンテナは、個々が独立しており、かつ、他のコンテナのコマンドを有していないと考えたのですが(destroyコンテナはgenerate controllerコマンドを有してない)
なぜdocker-compose run web ****
で動くのですか?
generate controller
やdestroy controller
をするには、まずrails new
でアプリケーションを作成する必要があると思いますが、rails new
コンテナは別にあります。
仮に、generateやdestroyをしたい場合には、rails new
コンテナ(コマンド)を継承しなければ出来ないと思うのですが、『各コンテナは、個々が独立しており、かつ、他のコンテナのコマンドを有していない』と考えているため、rails new
無しでgenerate & destroy
が出来てしまうというおかしな考えになってしまいました。
私の考えがおかしいのは、間違いないのですが、どこが間違っているのかを調べても見つからないため、困っています。
###疑問2:localhost:3000で制作仮定がブラウザで見れる理由
rails tutorialを勉強している間、何も考えずにdocker-compose up
とlocalhost:3000
をして、勉強過程をブラウザ確認していました。
勉強過程がブラウザで確認できたのは、volumeでホスト側のファイルをゲスト側にマウントしているからであり、実際に自分が打ったコードはコンテナ(ゲスト側)が有しているわけではない。っという事ですか?
説明が下手な、長い質問文になってしまいましたが、よろしくお願いいたします!
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2017/05/21 06:28
2017/05/21 06:54
2017/05/22 11:15
2017/05/22 15:59