目的
ポートフォリオ実装してdockerを導入したのでアウトプットします。
Dockerがなんなのかわからなかったので色々な方のQiitaを参考にしております
Dockerのインストール
私はこの方の記事を見てインストールしました!!
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81
インストールできたら以下コマンドを実行します。
% docker run -d -p 80:80 docker/getting-started
インストールの確認
% docker -v
このようなコマンドが出たらインストール完了です。
Docker version 20.10.2, build 2291f61
% docker-compose -v
こちらも同様にdocker-compose version 1.27.4, build 40524192
が出力されたら完了です。
Docker導入に渡って
メリットとしてはローカル環境に構築したrailsとmysqlを1コマンド叩くだけで実行できるようになる。
と記載されていたのですが、初学者の私には理解が難しかったです。dockerを導入した後にこの意味がわかったのでまずは手を動かした方がいいです。
開発中のアプリでdockerを導入
早速ですが導入していきます。
フレームワークはRubyonRails6を使用しています。
Dockerfileの作成
手順としてDockerを導入したい開発中のアプリに移動します
~ % cd アプリ名
アプリ名 % touch Dockerfile
Dockerfileが作成されたので下記を記載してください。
FROM ruby:2.6.5
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
RUN mkdir /アプリ名
WORKDIR /アプリ名
ADD ./Gemfile /アプリ名/Gemfile
ADD ./Gemfile.lock /アプリ名/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . /アプリ名
アプリ名を自身の開発しているアプリ名に変えましょう。
Docker-compose.ymlを作成しましょう。
アプリ名 % touch docker-compose.yml
下記を記述しましょう。
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 'password' # このままpasswordとしても問題なく動く
ports:
- "4306:3306" #DockerコンテナとSequelpro接続の為に必要な設定
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/アプリ名
ports:
- "3000:3000"
depends_on:
- db
config/database.ymlを編集
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
socket: /tmp/mysql.sock
host: db
development:
<<: *default
database: アプリ名_development
production.
test:
<<: *default
database: アプリ名_test
追加されたのは、password
とhost: db
のみ
docker-compose.yml buildでコンテナの作成
アプリ名 % docker-compose build
エラーがなかったら成功です。
コンテナ上でDB作成とmigrateの実行
アプリ名 % docker-compose run web bundle exec rails db:create
Rails6だとこのコマンドを実行するとエラーが出てしますので編集します。
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: false
およそ56行目あたりcheck_yarn_integrity: true
になっているのでこれをfalse
に変えます。
編集が終わったら、もう一度同じコマンドを実行しましょう。
続いてmigrateしましょう。
アプリ名 % docker-compose run web bundle exec rake db:migrate
これでコンテナ上でdb設計ができました。最後にコンテナを起動しましょう。
アプリ名 % docker-compose up
localhost:3000にアクセスし起動できていたら導入完了です。
docker hubから起動
複数のアプリをコンテナに積んだのでコマンドを打たずクリック一つでアプリを起動できます。
赤字のRANをクリックすると起動できます。
もう一回クリックすれば停止できます。
単語集
①dockerfileって何
コンテナを作成する材料。docker-compose build
のコマンドを実行するとステップに分けた読み込みをしていたと思います。読み込みが成功したらコンテナが作成されたよの意味。
②docker-composeって何
複数のコンテナを同時に動かすためのツールのこと
こんな感じです!
もっと詳しく書けるように頑張ります。