茶の間で読めるITチップス

情報セキュリティ、ITの便利用途など直ぐに役立つ知見を発信してきます!

DockerでRailsの開発環境を作ってみる(その①)

cloud9でrailsの開発をしていたが、自分が普段使っているエディターで開発したいこともあり、ローカルにDockerとrailsの環境を作ることにしました。

 

環境情報

自宅PC

Ubuntu 16.04.6 LTS

・Docker version 18.09.7

cloud9

Ubuntu 18.04.3 LTS

・Docker version 19.03.5

Docker基礎知識

少し前にDockerをインストールして放置だったので、まずはDockerの再勉強から始めた。

下記のサイトを参考。

Docker入門(第一回)~Dockerとは何か、何が良いのか~ | さくらのナレッジ

 

自分なりにまとめてみる。

Dockerの良さ

仮想マシンはゲストOSを用意して動かすが、DockerはホストOSは共有して、プロセスとユーザーを隔離してマシンが複数あるかのように動かすため軽量。

・環境設定をコード化したファイルを作成できるので、どこでも同じ環境が作れる。

・CIツールと組み合わせて、自動ビルド&デプロイ&テストができる。

Dockerインストール

下記を参考にインストールした。

Ubuntuにdockerをインストールする - Qiita

Rails環境構築

こっからは、実際にcloud9内で環境を作っていきます!

下記を参考に進めていきます。

DockerでRuby on Railsの開発をしよう - Qiita

 以下の作業フォルダを作る。

 
ubuntu:~/environment $ mkdir sample_ruby
ubuntu:~/environment $ cd sample_ruby
ubuntu:~/environment/sample_ruby $ touch docker-compose.yml
ubuntu:~/environment/sample_ruby $ mkdir ruby
ubuntu:~/environment/sample_ruby $ touch ruby/Dockerfile
ubuntu:~/environment/sample_ruby $ touch ruby/Gemfile
ubuntu:~/environment/sample_ruby $ touch ruby/Gemfile.lock
 

 

Dockerfile(コピペしてrubyのバージョンを変更)

 
FROM ruby:2.6.3
ENV LANG C.UTF-8

RUN apt-get update -qq && apt-get install -y \
    build-essential \
    nodejs \
 && rm -rf /var/lib/apt/lists/*

RUN gem install bundler

WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install

ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
 

※rm -rf /var/lib/apt/lists/*の意味

ubuntuをdocker buildするときaptのキャッシュを削除し容量を小さくする - Qiita

ということらしい

 

docker-compose.yml(コピペして、コメントの削除とbuildとmysqlのバージョンを変更)

 
version'3'

services:
  web:
    build./ruby
    ports:
      - "3000:3000"
    commandbundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
      - bundle:/usr/local/bundle
    depends_on:
      - db
  db:
    imagemysql:8.0
    environment:
      MYSQL_ROOT_PASSWORDpassword
    ports:
      - '3306:3306'
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  bundle:
  mysql_data:
 

 

Gemfile(コピペしてrailsのバージョンを変更)

 
gem 'rails''6.0.1'
 

 

docker-composeでコンテナ起動

 
ubuntu:~/environment/sample_ruby $ docker-compose run web bundle exec rails
new --force --database=mysql --skip-bundle
 

 docker-composeのインストールがされてなかったのでインストール後に再度起動

ubuntu:~/environment/sample_ruby $ sudo apt  install docker-compose

結果エラー・・・

ERROR: for sampleruby_db_1 Cannot start service db: driver failed programming

external connectivity on endpoint sampleruby_db_1 (ea47a718d7390b13f4638e7b34

a7d2c9090e070cc0cff06b04fe94169c0a8f15): Error starting userland proxy:

listen tcp 0.0.0.0:3306: bind: address already in use

ERROR: for db Cannot start service db: driver failed programming external

connectivity on endpoint sampleruby_db_1 (ea47a718d7390b13f4638e7b34a7d2c9090

e070cc0cff06b04fe94169c0a8f15): Error starting userland proxy: listen

tcp 0.0.0.0:3306: bind: address already in use

ポート3306が使われてるからかなーと思い、調べたらmysqldがあるので削除。

  
  ubuntu:~/environment/sample_ruby $ sudo lsof -i:3306
  COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  mysqld  1086 mysql   27u  IPv4  21433      0t0  TCP localhost:mysql (LISTEN)
  ubuntu:~/environment/sample_ruby $ sudo kill 1086
 

またしてもTraceback (most recent call last):から始まる長いエラー・・・が出たので、バージョンを記事と合わせた。

ruby:2.6.3 → 2.3.1

mysql:8.0 → 5.7

'rails', '6.0.1' → 5.1.4

しかし、またTraceback〜以下略が出たので、いろいろ調べた。

docker-composeのバグを踏んだのでアップグレードした話 - mimikunの技術メモ

上記の記事を参考にしてアップグレートをしたが、それでも直らない・・・。

というわけで公式(Quickstart: Compose and Rails | Docker Documentation)を見ることにした。(最初にそれすべきだった)

 続きはその②で成功したら報告します・・・