Ruby on Rails」タグアーカイブ

Railsでサクッと電子掲示板を作成する

前提

以下の環境で開発、動作確認を行う

要素 バージョン
Ubuntu 16.04.2
Ruby 2.4.1
Ruby on Rails 5.1.0
mySQL 14.14

また、上記環境はDockerで構築したコンテナで、環境構築についてはコチラを参照

概要

本記事では、1.前提 の環境にて、簡易的な電子掲示板サービスの開発を行う。電子掲示板サービスの概要は以下の通り。
なお、本記事ではRuby on Railsに関する基本的な説明は割愛している。railsの経験がない人が雰囲気で何か掴めれば程度の内容。

電子掲示板の概念

  • 電子掲示板には0個以上のトピックが存在する
  • トピックにはタイトルが存在する
  • トピックには0個以上の書き込みが存在し、全ての書き込みは一つのトピックに属する
  • 書き込みには投稿者名と本文が存在する

画面イメージ

  • ユーザはトップページにアクセスすると、トピック一覧を確認することができる
  • トピック一覧画面の末尾には、新規トピック投稿フォームが存在し、新規投稿を行うことができる
  • 各トピックごとに、「削除」リンクが付与されており、それをクリックするとトピックを削除することができる
  • トピック削除時に、トピックに紐付いた書き込みもあわせて削除する
  • ユーザはトピック名をクリックすることで、そのトピックの書き込み一覧を確認することができる
  • トピックの書き込み一覧画面の末尾には、新規投稿のフォームが存在し、新規投稿を行うことができる

データベーススキーマ

電子掲示板サービスのスキーマは以下の通り

実装

実装(準備編)

rails newコマンドで、railsアプリケーションの雛形を作成することができる。ここでは、使用するデータベースをmysqlに指定して雛形を作成している(デフォルトではsqlite)

$ rails new mybbs -d mysql
(省略)
$ cd mybbs

作成したrailsアプリケーションの雛形を元に、データベースを作成する。アプリケーション名(mybbs)を元に、development用とtest用の2つのデータベースが作成される。本記事ではテストを対象としないので、mybbs_developmentデータベースを基本的に使用する。

$ rake db:create
Created database 'mybbs_development'
Created database 'mybbs_test'

実装(トピック編)

本項では、複数の書き込みを束ねる「トピック」に関する実装を行う

トピックモデルを作成

ここでは、rails generateコマンドを用いて、topicモデルを作成する。
topicモデルに対応づいたtopicsテーブルに必要な属性は以下の通り。
* id
* title
* created_at
* updated_at
id,created_at,updated_atは、自動生成してくれるため、ここで明示的に指定する必要があるのはtitleだけなので、以下のようなコマンドでtopicモデルを作成する。

$ rails generate model topic title:string
Running via Spring preloader in process 1142
      invoke  active_record
      create    db/migrate/20170505141519_create_topics.rb
      create    app/models/topic.rb
      invoke    test_unit
      create      test/models/topic_test.rb
      create      test/fixtures/topics.yml

すると、以下のマイグレーションファイル(テーブルを作成するスクリプト)が生成されるので

class CreateTopics < ActiveRecord::Migration[5.1]
  def change
    create_table :topics do |t|
      t.string :title
      t.timestamps
    end
  end
end

以下のコマンドでマイグレーション(テーブル作成)実行

$ rake db:migrate
== 20170505141519 CreateTopics: migrating =====================================
-- create_table(:topics)
   -> 0.1048s
== 20170505141519 CreateTopics: migrated (0.1050s) ============================

データベース内にtopicsテーブルが作成されていることを確認

mysql> show columns from topics;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255) | YES  |     | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

動作確認用Topicsレコードの作成

Railsでは、console機能を用いてCLI上でRailsアプリケーションに対するスクリプトを行うことができる。ここでは作成したTopicsモデルを用いて、console上でテストデータを登録する

$ rails console
Running via Spring preloader in process 1312
Loading development environment (Rails 5.1.0)
irb(main):001:0> Topic.create(:title => 'プロ野球について')
=> #<Topic id: 2, title: "プロ野球について", created_at: "2017-05-05 14:27:31", updated_at: "2017-05-05 14:27:31">
irb(main):002:0> Topic.create(:title => 'ラーメンについて')
=> #<Topic id: 3, title: "ラーメンについて", created_at: "2017-05-05 14:27:49", updated_at: "2017-05-05 14:27:49">
irb(main):003:0> Topic.create(:title => 'プログラミングについて')
=> #<Topic id: 4, title: "プログラミングについて", created_at: "2017-05-05 14:27:54", updated_at: "2017-05-05 14:27:54">

テーブルにレコードが追加されていることを確認

mysql> select * from topics;
+----+-----------------------------------+---------------------+---------------------+
| id | title                             | created_at          | updated_at          |
+----+-----------------------------------+---------------------+---------------------+
|  2 | プロ野球について                  | 2017-05-05 14:27:31 | 2017-05-05 14:27:31 |
|  3 | ラーメンについて                  | 2017-05-05 14:27:49 | 2017-05-05 14:27:49 |
|  4 | プログラミングについて            | 2017-05-05 14:27:54 | 2017-05-05 14:27:54 |
+----+-----------------------------------+---------------------+---------------------+
3 rows in set (0.00 sec)

トピックのコントローラとビューを作成

同様にトピック用のビューとコントローラを作成する。トピックを一覧するページ(index)と、トピックの詳細を表示するページ(show)の2つが欲しいので、以下のコマンドを実行する。

$ rails generate controller topics index show
(省略)

上記コマンドを実行することで、トピック用のコントローラ/ビュー及びルーティングの設定が作成される。

自動で生成されたルーティングだけだと少し足りないので、db/routes.rbに以下のように記述する。

Rails.application.routes.draw do
  get 'topics/index'
  get 'topics/show/:id' => 'topics#show', as: :topics_show
end

上記の例だと、’topics/show/:id’へのアクセスは、tpicsコントローラのshowメソッドが受け取る。このルーティングに対して、tpics_showという識別子を付与することで、プログラムからルーティングを特定することができる。

トピック一覧を画面に表示する機能を実装

実装の第一段階として、”/topics/index”アクセス時に、データベースに登録されているトピックの一覧を画面上に表示する。

コントローラの設定

/topics/indexアクセスは、topics_controllerのindexメソッドで受け取るので、そこでトピックの一覧をDBから取得し、ビューに受け渡す。
Tpic.allは、topicsテーブルの全ての行を取得する。

class TopicsController < ApplicationController
  def index
    @topics = Topic.all
  end
end

ビューの設定

railsでは、標準でテンプレートエンジンとしてERBを採用している。そのため、以下のようにHTML内でRubyスクリプトを挿入することができるので、コントローラから受け取った@topicsの数だけ、トピックのタイトルを表示している。

link_toは、railsのヘルパーメソッドで、aタグを生成してくれる。

<h1>トピック一覧</h1>
<ul>
  <% @topics.each do |topic| %>
    <li><%= link_to topic.title, topics_show_path(topic.id) %></li>
  <% end %>
</ul>

動作確認

以上より、/topics/indexにアクセスした際の画面が以下の通り。動作確認用に登録したトピックの一覧が画面に表示されていることが確認できる。

トピックを新規登録する機能を実装

本項では、トピックの新規登録機能を実装する。新規登録用のフォームはトピック一覧画面の一番下に設置し、そこからタイトルを入力して登録できるようにする。

ルーティングの追加

新規登録用フォームから、’tpics/create’に対してPOSTすることで新規登録を実行できるようにしたいので、ルーティングに以下を追加する

post 'topics/create' => 'topics#create'

コントローラの設定

新規登録用フォームは、トピック一覧ページに表示するため、topicコントローラのindexメソッドにて、@newTopicを生成する。これは、後述するform_forメソッドで必要になるので、ここでは割愛する。

def index
  @topics = Topic.all
  @newTopic = Topic.new
end

また、createメソッドは、新規登録用フォームからPOSTされたデータを受け取るので、ここでPOSTデータを元に新たにtopicsレコードを生成する。生成後は、トピック一覧画面にリダイレクトする。

def create
  @topic = Topic.new(params[:topic].permit(:title))
  @topic.save
  redirect_to topics_index_path
end

ビューの設定

ビューでは、railsのヘルパーメソッドである、form_forメソッドを用いてフォームを自動生成する。
form_forでは、formが登録する対象のモデル(ここでは@newTopic)を指定することで、良い感じのフォームを作成してくれる。

<h1>トピック新規登録</h1>
<%= form_for @newTopic, :url => {:action => 'create'} do |f| %>
  <%= f.text_field :title %>
  <%= f.submit %>
<% end %>

動作確認

以上より、トピックの新規登録ができるようになった

トピックを削除する機能を実装

トピックの削除は、トピック一覧のトピック名の横に「削除」というリンクを作成し、それをクリックすると”topics/delete/:id”にDELETEリクエストを送信するようにする。

ルーティングの追加

まず、topics/delete/:idにdeleteリクエスト送信時に、topicsコントローラのdeleteメソッドが受け取るようにルーティングを追加する

delete 'topics/delete/:id' => 'topics#delete', as: :topic_delete

コントローラの設定

topicsコントローラでは、削除リクエストを受け取った際に、該当するトピックを削除する。削除後、トピック一覧画面にリダイレクトする
def delete
  @topic = Topic.find(params[:id])
  @topic.destroy
  redirect_to topics_index_path
end

ビューの設定

ビューには、トピックごとに以下の削除リンクが表示されるように追記する。confirmは、リンククリック時に通知されるconfirmで、「OK」をクリックした場合にのみリンクが実行される。

<%= link_to '[削除]', topic_delete_path(topic.id), method: :delete, data: {confirm: "削除してもよろしいですか?"} %>

動作確認

以下のように、「削除」リンクをクリックすると、確認ダイアログが表示され、「OK」をクリックするとトピックが削除されたことが確認できる

実装(書き込み編)

本項では、トピックごとに0件以上存在する「書き込み(post)」について実装を行う。トピック(topic)の実装と重複する内容が多いので、サクッと流していく

書き込みモデルの作成

まずはトピック同様に、postのモデルを作成する。postは、投稿者名(name)と、本文(body)と、トピック番号(topic_id)が必要になる。以下のtopic:referencesのように指定すると、topicテーブルに外部キー制約を持つtpic_id列が生成される。

$ rails generate model Post name body:text topic:references
Running via Spring preloader in process 2470
      invoke  active_record
      create    db/migrate/20170505154158_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/models/post_test.rb
      create      test/fixtures/posts.yml

マイグレーション実行

$ rake db:migrate
== 20170505154158 CreatePosts: migrating ======================================
-- create_table(:posts)
   -> 0.1274s
== 20170505154158 CreatePosts: migrated (0.1277s) =============================

postsテーブルが作成されたことが確認できる

mysql> show columns from posts;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | YES  |     | NULL    |                |
| body       | text         | YES  |     | NULL    |                |
| topic_id   | bigint(20)   | YES  | MUL | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

動作確認用のPostsレコードを作成

トピックと同様に動作確認用のPostsレコードを、console上で作成する。内容が重複しているので結果のみ以下に示す

mysql> select * from posts;
+----+-----------+--------------------------------------------------------------+----------+---------------------+---------------------+
| id | name      | body                                                         | topic_id | created_at          | updated_at          |
+----+-----------+--------------------------------------------------------------+----------+---------------------+---------------------+
|  1 | ササキ    | プロ野球について一緒に語りましょう!                          |        2 | 2017-05-05 15:49:29 | 2017-05-05 15:49:29 |
|  2 | サトウ    | オススメのラーメン屋など教え合いましょう                     |        3 | 2017-05-05 15:49:52 | 2017-05-05 15:49:52 |
|  3 | ヤマダ    | 皆さんの得意な言語はなんですか?                             |        4 | 2017-05-05 15:50:11 | 2017-05-05 15:50:11 |
+----+-----------+--------------------------------------------------------------+----------+---------------------+---------------------+
3 rows in set (0.00 sec)

書き込みコントローラ/ビューの作成

$ rails generate controller Post
Running via Spring preloader in process 2508
      create  app/controllers/post_controller.rb
      invoke  erb
      create    app/views/post
      invoke  test_unit
      create    test/controllers/post_controller_test.rb
      invoke  helper
      create    app/helpers/post_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/post.coffee
      invoke    scss
      create      app/assets/stylesheets/post.scss

書き込み一覧を表示する機能を実装

“/topics/show/:id” にアクセスすることで、該当のトピックに関する書き込み一覧を表示させる

コントローラの設定

“/topics/show/:id”は、topicコントローラのshowメソッドにルーティンぎしているので、showメソッドにて、以下のようにTopicモデルと対応する書き込み一覧を取得してビューに引き渡す

def show
  @topic = Topic.find(params[:id])
  @posts = Post.where(topic_id: params[:id])
end

ビューの設定

ビューでは、トピックのタイトルと合わせて、コントローラから受け取った書き込み一覧を表示する

<h1><%= @topic.title %></h1>
<% @posts.each_with_index do |post , idx| %>
  <p>
    <%= idx + 1 %>. <%= post.name %> : <%= post.body %>
  </p>
<% end %>

動作確認

以下のように、書き込み一覧が表示されることが確認できる

新規書き込みを登録する機能を実装

新規書き込みの登録は、書き込み一覧ページの一番下に設置する新規投稿フォームを用いて登録する

ルーティングの追加

新規書き込み登録のリクエストは、’posts/create’にPOSTし、postコントローラのcreateメソッドが受け取るようにしたいので、以下のようにルーティングを追加する

post 'posts/create' => 'post#create', as: :post_create

コントローラの設定

まず、トピックの新規登録と同様に、書き込み一覧画面でform_forメソッドを使うために、topicコントローラのshowメソッドにて、新しいPostモデルを生成しておく

def show
  @topic = Topic.find(params[:id])
  @newpost = Post.new(:topic_id => params[:id]) #ここを追加
  @posts = Post.where(topic_id: params[:id])
end

postコントローラのcreateメソッドには、新規書き込みの内容がPOSTされるので、postsレコードを生成して書き込み一覧画面にリダイレクトする

class PostController < ApplicationController
  def create
    @post = Post.new(params[:post].permit(:topic_id, :name, :body))
    @post.save
    redirect_to topics_show_path(params[:post]['topic_id'])
  end
end

ビューの設定

書き込み一覧画面のビューに、以下を追加する。トピックの追加と同様にform_forメソッドを用いてformを自動生成する。

<h3>新規書き込み</h3>
<%= form_for @newpost, :url => post_create_path do |f| %>
  <p>お名前</p>
  <p><%= f.text_field :name %></p>
  <p>本文</p>
  <p><%= f.text_area :body %></p>
  <%= f.hidden_field :topic_id %>
  <%= f.submit %>
<% end %>

動作確認

以下のように、新規書き込み登録フォームを用いて書き込みを追加できるようになったことが確認できる

まとめ

以下のような簡易的な電子掲示板ができあがった

所感

  • 初めてRailsで1からアプリケーションを作ったが、想像以上に何でもフレームワーク側でやってくれて驚き
  • 元々触れたことがあったLaravelと似ている部分が多かったので、適応しやすかった
  • テーブル間の関連付けはもっとフレームワークの機能で出来た気がする(トピック削除時に自動で対応する書き込みを削除したり、トピック取得時に自動で書き込み一覧を取得したり)
  • 命名などの制約が非常に厳しいが、それに従うことで色々自動化出来る上、定まったルールの元で開発できるのが良い
  • ネット上に情報が膨大にあるので、他のフレームワークよりも遥かにググりやすい

その他

本記事で作成したRailsアプリケーションは、以下のリポジトリで公開している。記事内で作成したコードから微妙に改良したりしているので、記事と内容が合致しない部分もある。
https://github.com/Sa2Knight/rails-bbs

参考

DockerでRailsの開発環境を構築する

前提

以下の環境でDockerを使用する。またDockerHubのアカウントについては既に準備しているものとする。

要素 バージョン
debian 8.6
docker 1.13.0

概要

Mac上に立ち上げたDebian内でDockerを用いてRuby on railsの開発環境を構築する。railsについても学習用の環境にすぎないので、細かいバージョンなどはあまり気にしない方針。

構築にあたっては、rails環境用のDockerイメージをDockerHubから探すだけでも済むが、今回はDocker及び環境構築の学習を含めて以下の手順で構築する。

  1. DockerHubからUbuntuのベースイメージをpull
  2. コンテナを作成し、コンテナ内で環境構築(=Dockerfileは使わない)
  3. コンテナをコミット
  4. 作成したイメージをDockerHubにpush

元となるDockerイメージを取得

今回は使い慣れているUbuntuを用いてrails環境を構築するので、DockerHubからubuntuのイメージをpullする。

$ docker pull ubuntu

イメージが手に入ったら、コンテナを生成してアクセスする。以降の項ではコンテナ内で作業を行う。後々動作確認でコンテナにWebブラウザでアクセスするので、ポートフォワーディングの設定(8081→3000)も指定しておく

$ docker run -it -p 8081:3000 -name my_ubuntu ubuntu

Railsの環境構築

開発環境の前準備

まずはapt-getを更新

$ apt-get update
$ apt-get upgrade

日本語が使えない状態だったので日本語化作業

$ apt-get install language-pack-ja
$ update-locale LANG=ja_JP.UTF-8
$ echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc

開発に必要になる基本的なツールをインストール

$ apt-get install vim git git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libpq-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev aptitude

後々必要になりそうなのでnodejsも適当に入れておく

$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ apt-get install -y nodejs

Rubyのインストール

Rubyについては、最新版をサクッと入れたいのでapt-getでなくrbenvを用いてインストールする

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

rbenv用の初期化コマンドをbashrcに追加。これでrbenvディレクトリ経由でrubyを実行できるようにする。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ exec $SHELL

rbenvのプラグインで、rubyをインストールするためのruby-buildをインストール

$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
$ exec $SHELL

rbenvを用いて、現在の最新の安定版であるRUby2.4.1をインストール

$ rbenv install 2.4.1

rbenvで利用するRubyのバージョンを、先程インストールした2.4.1にする

$ rbenv global 2.4.1

Rubyのパッケージ管理ツールであるgemをインストール

$ apt-get install gem

gemがドキュメントもインストールするのを抑止するため、.gemrcに以下を記述

install: --no-document
update: --no-document

gemをインストールする度に自動でrbenbをrehashしてくれるrbenv-rehashをインストール

$ gem i rbenv-rehash

gemの依存管理をしてくれるbundleをインストール

$ gem i bundle

Ruby on railsの導入

railsをインストール

$ gem install rails

5.1.0がインストールできたことを確認

$ rails -v
Rails 5.1.0

mySQLをインストール

$ apt install mysql-server mysql-client

なんか以下も必要らしいのでインストール

$ sudo apt-get install libmysqld-dev

mysqlserverを起動

$ /etc/init.d/mysql start

railsアプリケーションの雛形を作成

$ rails new myapp -d mysql

雛形がデキていることを確認

$ ls
Gemfile  Gemfile.lock  README.md  Rakefile  app  bin  config  config.ru  db  lib  log  package.json  public  test  tmp  vendor

rails用のDBを作成

$ rake:db

DBがデキていることを確認

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myapp_development  |
| myapp_test         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

railsアプリケーションを起動

rails s -b 0.0.0.0 -p 3000

が、何故かエラーが出る。gemライブラリが足りない的なエラーだがどうみても足りている。ググってもどうしても解決できなかったので、該当するコードをコメントアウト。調べてみるとタイムゾーン関係に必要になるそうなので、学習段階では大きな影響を受けないと判断。

myapp/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.0/lib/active_support/railtie.rb

 19       #begin
 20       #  TZInfo::DataSource.get
 21       #rescue TZInfo::DataSourceNotFound => e
 22       #  raise e.exception "tzinfo-data is not present. Please add gem 'tzinfo-data' to your Gemfile and run bundle install"
 23       #end
 24       #require "active_support/core_ext/time/zones"
 25       #zone_default = Time.find_zone!(app.config.time_zone)
 26
 27       #unless zone_default
 28       #  raise "Value assigned to config.time_zone not recognized. " \
 29       #    'Run "rake time:zones:all" for a time zone names list.'
 30       #end
 31
 32       #Time.zone_default = zone_default

改めてrailsアプリケーションを起動。無事に起動。

=> Booting Puma
=> Rails 5.1.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.8.2 (ruby 2.4.1-p111), codename: Sassy Salamander
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000

Railsアプリケーションの起動をブラウザで確認する

  • rails用のWebサーバはコンテナ内の3000番ポートで起動している
  • コンテナ起動時に、Dockerホストの8081番ポートをコンテナの3000番ポートにポートフォワーディングするように指定している
  • Macの8081番ポートをDebian(Dockerホスト)の8081番ポートにポートフォワーディングするように設定している(Vagrantfileにて)
    以上より、Macのブラウザでlocalhost:8081にアクセスすることで、コンテナ内で起動しているWebサーバにリクエストを送ることができる。

実際にブラウザを用いてアクセスしてみると、以下のようにrailsのウェルカムページが表示され、Dockerコンテナ側でもアクセスログが表示されているので、環境構築が成功したことがわかる。

Started GET "/" for 10.0.2.2 at 2017-05-03 14:19:10 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Rails::WelcomeController#index as HTML
  Rendering vendor/bundle/ruby/2.4.0/gems/railties-5.1.0/lib/rails/templates/rails/welcome/index.html.erb
  Rendered vendor/bundle/ruby/2.4.0/gems/railties-5.1.0/lib/rails/templates/rails/welcome/index.html.erb (2.7ms)
Completed 200 OK in 115ms (Views: 5.4ms)

Dockerイメージのコミット

※ 以降ではコンテナから切断し、Dockerホスト側で作業を行う

4の項で、rails用の環境が構築されたコンテナが出来上がったので、このコンテナを元に新たなイメージをコミットする。

DockerHubにpushするためには、イメージ名が”DockerHubのユーザ名/イメージ名”である必要があるので、ここではそれに従ってコミットする

$ docker commit my_ubuntu sa2knight/rails

イメージ一覧に新しいイメージが追加されていることを確認。元のUbuntuとくらべて、様々なツールをインストールしたので容量が増大していることがわかる

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sa2knight/rails     latest              519638e57a05        22 hours ago        1.55 GB
ubuntu              latest              f7b3f317ec73        8 days ago          117 MB

DockerHubへのpush

ここでは、DockerHubに作成したイメージをpushするが、既にDockerHubアカウント及びリポジトリは作成済みで、ログインも完了しているものとする。

DockerHubへのpushは以下のコマンドで行う

$ docker push sa2knight/rails
The push refers to a repository [docker.io/sa2knight/rails]
d675a105e8a6: Pushing [========================================>          ] 1.153 GB/1.431 GB
d675a105e8a6: Pushed
08f405d988e4: Pushed
511ddc11cf68: Pushed
a1a54d352248: Pushed
9d3227c1793b: Pushed

latest: digest: sha256:2c8b2bb969347c41be37d8bb788e9c5a531b6478c8f4089039692d28bd74ec5d size: 1570

1.5HBをアップロードするのでかなり時間がかかるが、気長に待ってたらいつのまにか終わった。

DockerHubにアクセスすると、イメージがアップロードされていることが確認できる。

参考