Docker
Dockerfile
Dockerの新しいイメージを作成するための設計図
code:Docker
FROM ruby:2.4.5 # FROM: Ruby2.4.5のイメージを取得することを指定
RUN apt-get update -qq && apt-get install -y build-essential nodejs
# RUN: 上のイメージからコンテナで実行する命令を記述
RUN mkdir /app
WORKDIR /app # WORKDIR : 作業ディレクトリを/appに指定
COPY Gemfile /app/Gemfile # 同じディレクトリにあるGemfileをコンテナ内へコピー
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
docker-compose.yml
やむる。複数のコンテナをまとめて起動したい時に記述するファイル
code:docker-compose.yml
# docker-compose.ymlのバージョンを示す
version: '3'
services:
# Railsコンテナの定義 サービス名(railsなどでサーバ指定するときはこの名前を指定する)
web:
# イメージ作成。docker-compose.ymlと同じ階層にあるdockerfileを使用すると言う意味
build: .
# コンテナ起動時に実行するコマンド
command: bundle exec rails s -p 3000 -b '0.0.0.0'
# PC上の.ディレクトリを、/appディレクトリにマウント(共有)する
volumes:
- .:/app
ports:
- 3000:3000
# railsが起動する前に、"db"を起動するようにする
depends_on:
- db
tty: true
stdin_open: true
# MySQLサーバコンテナの定義 サービス名
db:
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
# コンテナ内の環境変数の定義。 railsのenvとかじゃなくて、コンテナの環境変数
environment:
MYSQL_ROOT_PASSWORD: password
# db-volumeという名前で、データ保持領域(volume)が作成される
# この設定をしておくことで、コンテナが消えてもdbのデータは残る
volumes:
db-volume:
上のファイルを実行してみる
docker-compose run web rails new . --force --database=mysql
docker-compose run web : webサービスのコンテナで、後ろのコマンドを実行するコマンド
rails new . --force --database=mysql
コマンド実行時のディレクトリに、新しいrailsプロジェクトファイルを作成する
--forceは既存ファイルを上書きするオプション
実行後は良くみるファイルの組み合わせになっている
https://scrapbox.io/files/61dc43c68697aa001d0f20e9.png
実行しただけではコンテナに取り込まれたりはしていないので、ここでdocker-compose buildを実行
build実行後は、railsならDBの設定を変更する
code:config/database.yml
# dockerファイルで記述したものを記述
password: password ## MYSQLROOT_PASSRWORD環境変数
host: db ## コンテナサービス名
docker-compose up -dを実行
-d:doccer-compose.ymlに基づいてコンテナを立ち上げる
docker-compose psで状態確認ができる
Railsのコンテナにdb:createする
docker-compose run web bundle exec rake db:create
起動 docker-compose up -d
環境停止 docker-compose stop
コンテナ削除 docker-compose down
binding.pry docker attach rails_web_1 ctrlを押してp, q
gemインストール
docker-compose exec web bundle
システムのリスタート docker-compose restart web