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

すぐできるDocker

 すぐできるDocker

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

hidekuni KAJITA

January 25, 2018
Tweet

More Decks by hidekuni KAJITA

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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:

    View full-size slide

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

    View full-size slide

  7. Gemfile.lockの作成
    $ touch Gemfile.lock

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  11. サーバ起動
    $ docker-compose up

    View full-size slide

  12. 動いた!

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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:

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide