Docker ComposeでRailsアプリをDocker化する方法

はじめに

Docker Composeを使ってRailsアプリをコンテナ化する方法を解説します。


How to
コンテナ化したいプロジェクトを用意する

コンテナ化したいプロジェクトをGitHubからローカルにクローンします。

$ git clone <リポジトリのパス>


Dockerfileを用意する

Rails用のDockerfileを作成します。

FROM ruby:3.2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    postgresql-client \
    yarn

WORKDIR /rails-docker
COPY Gemfile Gemfile.lock /rails-docker
RUN bundle install


FROM: ベースとなるrubyのイメージを取ってきます。

FROM ruby:3.2.2

RUN: 必要なパッケージをインストールします。

RUN apt-get update && apt-get install -y \
    packages \

WORKDIR: 指定したフォルダに移動します。なければ、フォルダを作成し、そこに移動します。

WORKDIR /rails-docker

COPY: ファイルをコンテナにコピーします。

COPY Gemfile Gemfile.lock /rails-docker

RUN: コピーしたGemfileを元にrailsに必要なパッケージ(gem)をインストールする。

RUN bundle install


docker-compose.ymlを用意する

次にdocker-compose.ymlを作成します。

# docker-composeのversionを指定
version: '3'

# db-dataというvolumeを作成
volumes:
  db-data:

# ここから下にserviceを定義
services:
  # webというserviceを定義
  web:
    # docker buildと同じ。カレントディレクトリを指定
    build: .
    # サービスコンテナが起動したときに実行するコマンドを指定
    # ">" -> 折り返して表示。 "-c" -> 複数コマンドを実行
    command: >
      bash -c "rails db:create &&
              rails db:migrate &&
              rails s -b 0.0.0.0"
    # docker run -pと同じ。portを指定
    ports:
      - '3000:3000'
    # docker run -vと同じ。マウント先を指定
    volumes:
      - '.:/rails-docker'
    # コンテナ側に環境変数を設定
    environment:
      - 'DATABASE_PASSWORD=postgres'
    # docker run -itと同じ
    tty: true
    stdin_open: true
    # db serviseを作成後、docker runする
    depends_on:
      - db
    # web serviceからdb serviceにアクセスできる
    links:
      - db

  # dbというserviceを定義
  db:
    # imageを取得する
    image: postgres:12
    # マウント先を指定
    volumes:
      - 'db-data:/var/lib/postgresql/data'
    # パスワードを設定
    environment:
      - 'POSTGRES_PASSWORD=postgres'


databese.ymlを編集する

railsのconfig/database.ymlを編集します。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  user: postgres
  port: 5432
  password: <%= ENV.fetch("DATABASE_PASSWORD") %>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>


コンテナを起動する

コンテナを起動させます。
-d(detach)でコンテナがバックグラウンドで起動します。

docker-compose up -d

最後にブラウザからlocalhost:3000にアクセスしてrailsアプリが起動しているか確認しましょう。

GitHub Pagesの使い方

GittHub Pagesって何?

GitHubリポジトリからウェブサイトを公開できる無料のサイトホスティングサービスのことです。
GitHub Pagesについて


How to
事前準備

以下を参考にリモートリポジトリを作成しましょう。
GitHub Pages サイトを作成する

GitHub Pagesの公開設定

公開したいリポジトリのページででsettingタブを選択します。


左サイドバーにあるPagesを選択します。


Source

  • ブランチから公開するのでDeploy from a branchを選択します。

Branch

  1. ブランチの選択
    今回、mainブランチを公開したいのでmainを選択します。

  2. フォルダの選択
    今回、index.htmlはrootディレクトリにあるので、/ (root)を選択します。

  3. Saveを選択します。



数分待ってページを更新するとURLが表示されます。
Visit Siteをクリックして、公開したWebページを確認できます。

Linuxの基礎コマンドについて

Linuxの基礎コマンドについて解説します。



cd

change directoryのcdです。
ディレクトリを移動するコマンドです。


pwd

print name of working directoryのpwdです。
カレントディレクトリを表示するコマンドです。


ls

listのlsです。
ファイルやディレクトリの一覧表示するコマンドです。


mkdir

make directoryのmkdirです。
ディレクトリを作成するコマンドです。


rmdir

remove directoryのrmdirです。
空のディレクトリを削除するコマンドです。

cat

concatenate(連結する)のcatです。
ファイルの中身を表示するコマンドです。


less

less - opposite of moreのlessです。
ファイルの中身をスクロールするコマンドです。
長いファイルの中身を見たい時に使用します。

tail

tail(後部)のtailです。
ファイルの最終行から10行を表示するコマンドです。

ファイルに追記があるとその内容を表示することができます。

$ tail -f ~/text.txt



touch

touchのtouchです。
空のファイルを作成するコマンドです。


rm

removeのreです。
ファイル・ディレクトリを削除するコマンドです。

ファイルを削除できます。

$ rm file

ディレクトリを削除できます 。

$ rm -r dir 



mv

moveのmvです。
ファイルの移動、ファイル名を変更するコマンドです。

ファイルを移動できます。(file1をdirに移動する)

$ mv file1 dir/

ファイル名を変更できます。(file1にファイル名を変更する)

$ mv file fiel1



cp

copyのcpです。
ファイル・ディレクトリをコピーするコマンドです。

ファイルをコピーできます。

$ cp file new_file

ファイルをディレクトリ内にコピーできます。

$ cp file dir

ディレクトリをコピーできます。

$ cp -r dir new_dir



ln

linkのlnです。
リンクを張るコマンドです。

ハードリンクを張ることができます。(file1に対してfie2というハードリンクを作成する)

$ ln file1 file2

シンボリックリンクを張ることができます。(file1に対してfie2というシンボリックリンクを作成する)

$ ln -s file1 file2



find

find(探す)のfindです。
ファイルを検索するコマンドです。

ファイルを検索することができます。(カレントディレクトリを起点として、file1というファイル名を探して、パスを表示する)

$ find . -name file1 -print



chmod

change modeのchmodです。
ファイルやディレクトリのパーミッションを設定するコマンドです。

ファイルのパーミッションを設定することができます。(fileに対して所有者について読み取りの権限を追加する)

$ chmod u+r file



chown

change ownerのchmodです。
ファイルやディレクトリのユーザーやグループの所有権を変更するコマンドです。


ps

process statusのpsです。
実行中のプロセスを表示するコマンドです。

kill

kill processのkillです。
ジョブやプロセスを終了させるコマンドです。


以上、Linuxの基礎コマンドについてでした。

vimの基本的なコマンド操作について

vimの基本的なコマンド操作について解説します。

以下は、vimを使って書いたものを貼り付けています。

移動操作



編集操作



以上、vimの基本的なコマンド操作についてでした。

Web技術の基本の単語

以下の単語について自分なりにまとめました。


ステートレス

一回のリクエストで処理が完結すること。

サーバーがクライアントの情報を記録しないので、
クライアントがログインしているかの状態を保持することができない。

また、HTTPはステートレスプロトコルにあたる。

ステートフル

前回のリクエストを踏まえて次のリクエストを実行すること。

サーバーが情報を記録しているので、
クライアントがログインしているかの状態を保持することができる。

また、FTPはステートフルプロトコルにあたる

リクエス

クライアントからサーバに対する要求のこと。

指定したURLのHTMLファイルなどを要求する。

レスポンス

サーバからクライアントに対する応答のこと。

リクエストが成功したかの情報やHTMLファイルなどを返す。

HTTPの仕様を拡張してログインなどの状態を保持できるようにするもの。

Cookieは「名前=値」の組み合わせで表されて、ユーザー名やパスワードを設定することが出来る。
Webサーバが上記の情報を含んだCookieを送り、WebブラウザがそのままCookieを送り返すことでログイン状態を保持できるようにしている。

プロトコル

WebクライアントとWebサーバーが通信を行うときの規則

例えばファイルを転送するときはFTPというものに従ってファイル転送するという規則がある。
他にもメールを転送するためのSMTP、WebクライアントとWebサーバー間で情報のやり取りをするためのHTTPというプロトコルがある。

ポート番号

HTTPリクエストなどの情報をどのアプリケーションで処理するか宛先を指定する必要があるため、番号を割り振って処理するアプリケーションを明確にしているもの。

車が欲しい話

はじめに

最近本格的に車を買おうか迷っています。

欲しいと考えている車が良い条件で販売していたり、
貯金がそこそこ貯まってきたりと欲しい欲は溜まっていきます。

しかし、維持費がかかるよなぁとかで迷っています。

車が欲しいと考えるようになった経緯

私には車好きの友達がいました。
その友達から勧められたイニシャルDというアニメを見たことが始まりでした。
そこから車に興味を持ち、色々調べているうちに車が欲しいと思うようになりました。

さらに、今年入社した会社の同期にスポーツカーを乗っている人がいました。
また、その人の車に乗せてもらう機会もありました。

これは車を買えとお告げされているのかもしれません。笑

欲しい車の条件

  • スポーツカーであること

  • MTであること

  • オープンカーであること

  • 予算最大100万円前後

この条件に当てはまるのがMR-Sという車でした。
個人的には他の車にはない後ろ姿が好きです。

おわりに

車を買ったら好きな音楽をかけてドライブしたり、海辺をオープンで走ってみたいです。

本当にマイカーを手に入れる日が来るのでしょうか。
優柔不断な自分にとっては難しすぎる買い物です。

友人によると「車の購入は勢いだ!」と言っていたので、
私も勢いで買ってみようかな。笑