Upgrade to Pro — share decks privately, control downloads, hide ads and more …

すぐできるDocker

 すぐできるDocker

2018 アジャイル事業部 年始のご挨拶

54f611649247463e935ff64b05c0f6b8?s=128

hidekuni KAJITA

January 25, 2018
Tweet

Transcript

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

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

  3. やってみよう! YARIMASU!!

  4. 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
  5. 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:
  6. Gemfileの作成 # frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

    gem "rails"
  7. Gemfile.lockの作成 $ touch Gemfile.lock

  8. bundle install $ docker-compose run app bundle install

  9. rails new $ docker-compose run app rails new . --force

    --database mysql
  10. 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
  11. サーバ起動 $ docker-compose up

  12. 動いた!

  13. 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
  14. FROM FROM ruby:2.5 Rubyのバージョン2.5が入ってい るイメージを利用する

  15. groupadd && useradd RUN groupadd --gid 1000 developer \ &&

    useradd --uid 1000 --gid developer --shell /bin/bash --create-home developer イメージ内にグループID(1000)と ユーザID(1000)のグループとユー ザを作成
  16. WORKDIR ENV APP_HOME /usr/src/app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME

    イメージ内に /usr/src/app を 作成してコンテナ実行時の作業 ディレクトとする
  17. BUNDLE_XXXX ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \ BUNDLE_JOBS=4 bundlerの設定

  18. 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:
  19. named volume volumes: bundle_cache: mysql_data: この名前でvolumeのマウントを 行える 永続化する場所を気にせずにお 手軽

  20. データベース設定 services: db: image: mysql ports: - "3306:3306" volumes: -

    mysql_data:/var/lib/mysql サービス名はコンテナ間の名前解 決にも利用される
  21. services.db image: mysql mysqlのイメージを使用する ports: ホスト側とコンテナ側の使用ポート volumes: mysql_dataをコンテナ側の /var/lib/ mysql

    をマウントする
  22. アプリケーション設定 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
  23. services.app(1) build . カレントディレクトリのDockerfileをビ ルドする user: 1000:1000 UID/GID 1000 でコマンドを実行する

  24. services.app(2) command: bin/rails s -p 3000 -b “0.0.0.0” コンテナ起動時に実行されるコマンド depends_on:

    -db dbコンテナが起動してから起動するよう に設定
  25. services.app(3) volumes: - .:/usr/src/app ホスト側のカレントディレクト リをコンテナ側の/usr/src/app にマウント

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