Slide 1

Slide 1 text

すぐできる Docker かじたひでくに 2018/01/24

Slide 2

Slide 2 text

自己紹介 梶田英邦(かじたひでくに) @hide_nba Ruby/Railsを使ってお仕事して ます 2018年7月を担当

Slide 3

Slide 3 text

やってみよう! YARIMASU!!

Slide 4

Slide 4 text

Dockerfileの作成 FROM ruby:2.5 RUN groupadd --gid 1000 developer \ && useradd --uid 1000 --gid developer --shell /bin/bash --create-home developer RUN apt-get update && apt-get install -y nodejs ENV APP_HOME /usr/src/app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME COPY Gemfile \ Gemfile.lock \ $APP_HOME/ ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \ BUNDLE_JOBS=4

Slide 5

Slide 5 text

docker-compose.ymlの 作成 version: '3' services: db: image: mysql ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql app: build: . user: 1000:1000 command: bin/rails s -p 3000 -b "0.0.0.0" depends_on: - db ports: - "3000:3000" stdin_open: true tty: true volumes: - .:/usr/src/app - bundle_cache:/usr/local/bundle volumes: bundle_cache: mysql_data:

Slide 6

Slide 6 text

Gemfileの作成 # frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem "rails"

Slide 7

Slide 7 text

Gemfile.lockの作成 $ touch Gemfile.lock

Slide 8

Slide 8 text

bundle install $ docker-compose run app bundle install

Slide 9

Slide 9 text

rails new $ docker-compose run app rails new . --force --database mysql

Slide 10

Slide 10 text

config/database.ymlの 編集 diff --git a/config/database.yml b/config/database.yml index 6003576..2213f5b 100644 --- a/config/database.yml +++ b/config/database.yml @@ -14,8 +14,7 @@ default: &default encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root - password: - host: localhost + host: db development: <<: *default

Slide 11

Slide 11 text

サーバ起動 $ docker-compose up

Slide 12

Slide 12 text

動いた!

Slide 13

Slide 13 text

Dockerfile FROM ruby:2.5 RUN groupadd --gid 1000 developer \ && useradd --uid 1000 --gid developer --shell /bin/bash --create-home developer RUN apt-get update && apt-get install -y nodejs ENV APP_HOME /usr/src/app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME COPY Gemfile \ Gemfile.lock \ $APP_HOME/ ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \ BUNDLE_JOBS=4

Slide 14

Slide 14 text

FROM FROM ruby:2.5 Rubyのバージョン2.5が入ってい るイメージを利用する

Slide 15

Slide 15 text

groupadd && useradd RUN groupadd --gid 1000 developer \ && useradd --uid 1000 --gid developer --shell /bin/bash --create-home developer イメージ内にグループID(1000)と ユーザID(1000)のグループとユー ザを作成

Slide 16

Slide 16 text

WORKDIR ENV APP_HOME /usr/src/app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME イメージ内に /usr/src/app を 作成してコンテナ実行時の作業 ディレクトとする

Slide 17

Slide 17 text

BUNDLE_XXXX ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \ BUNDLE_JOBS=4 bundlerの設定

Slide 18

Slide 18 text

docker-compose.yml version: '3' services: db: image: mysql ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql app: build: . user: 1000:1000 command: bin/rails s -p 3000 -b "0.0.0.0" depends_on: - db ports: - "3000:3000" stdin_open: true tty: true volumes: - .:/usr/src/app - bundle_cache:/usr/local/bundle volumes: bundle_cache: mysql_data:

Slide 19

Slide 19 text

named volume volumes: bundle_cache: mysql_data: この名前でvolumeのマウントを 行える 永続化する場所を気にせずにお 手軽

Slide 20

Slide 20 text

データベース設定 services: db: image: mysql ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql サービス名はコンテナ間の名前解 決にも利用される

Slide 21

Slide 21 text

services.db image: mysql mysqlのイメージを使用する ports: ホスト側とコンテナ側の使用ポート volumes: mysql_dataをコンテナ側の /var/lib/ mysql をマウントする

Slide 22

Slide 22 text

アプリケーション設定 services: app: build: . user: 1000:1000 command: bin/rails s -p 3000 -b "0.0.0.0" depends_on: - db ports: - "3000:3000" stdin_open: true tty: true volumes: - .:/usr/src/app - bundle_cache:/usr/local/bundle

Slide 23

Slide 23 text

services.app(1) build . カレントディレクトリのDockerfileをビ ルドする user: 1000:1000 UID/GID 1000 でコマンドを実行する

Slide 24

Slide 24 text

services.app(2) command: bin/rails s -p 3000 -b “0.0.0.0” コンテナ起動時に実行されるコマンド depends_on: -db dbコンテナが起動してから起動するよう に設定

Slide 25

Slide 25 text

services.app(3) volumes: - .:/usr/src/app ホスト側のカレントディレクト リをコンテナ側の/usr/src/app にマウント

Slide 26

Slide 26 text

まとめ Docker便利!! 簡単に使い始められるのでドンド ン使っていきましょう!