はじめまして、にしむらです。
今回はrubyフレームワークSinatraの構築を通じてDockerfileのはじめの一歩を紹介します。
具体的にはDocker公式rubyイメージをもとに、Sinatraのgemをインストールし実行ファイルをコピーしたイメージを作成し、コンテナとしてを実行します。
動作環境
- OS macOS 10.15.7
- docker desktop community 2.5.0.1
使用するファイル
以下のファイルを同一ディレクトリに作成してください。
Dockerfile:イメージ構築(ビルド)用
sample.rb:sinatraで 「Hellow docker!」と表示
Dockerfile
# FROM:公開リポジトリからベースとなるイメージを取得 # → rubyイメージを取得 FROM ruby:2.7.2-alpine # RUN:イメージ作成中に実行させたいコマンド # → sinatraのインストール RUN gem install sinatra # COPY:ファイルのコピー # → 実行ファイルをイメージにコピー COPY sample.rb . # EXPOSE:コンテナ実行時にリッスンするポート番号 # → sinatra標準の4567を指定 EXPOSE 4567 # CMD:コンテナ実行時のデフォルトの処理 # → "ruby sample.rb"を実行させる CMD ["ruby", "sample.rb"]
参考 Dockerfile リファレンス — Docker-docs-ja 17.06 ドキュメント
sample.rb
require 'sinatra' set :bind, '0.0.0.0' get '/' do 'Hello docker!!' end
手順
1.Dockerイメージを作成する
コマンド docker build -t sinatra_sample1 .
を実行
解説
使い方 docker build [オプション] パス
パスにあるソースコードから新しいイメージを構築します。オプション-t sinatra_sample1
はイメージにsinatra_sample1
とタグ付けします。
結果
=> [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 37B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ruby:2.7.2-alpine 2.0s => [1/3] FROM docker.io/library/ruby:2.7.2-alpine@sha256:f9f332eece9188d10abb30ff6b109a1b0fee9f3e82683df8df8bf81be8121567 0.0s => [internal] load build context 0.0s => => transferring context: 30B 0.0s => CACHED [2/3] RUN gem install sinatra 0.0s => CACHED [3/3] COPY sample.rb . 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:6f5b0317471fe7b32e1ebe912821de20fc728c986014aa85740226e15696fe45 0.0s => => naming to docker.io/library/sinatra_sample1 0.0s
確認
コマンド docker images
を入力してREPOSITORY
にsinatra_sample1
があることで確認できます。
REPOSITORY TAG IMAGE ID CREATED SIZE sinatra_sample1 latest 6f5b0317471f 3 hours ago 54.3MB
2.コンテナの作成と実行
コマンドdocker run -d -p 8000:4567 --name sinatra sinatra_sample1
を実行
解説
使い方 docker run [オプション] イメージ [コマンド] [引数...]
今回の場合 -d -p 8000:4567 --name sinatra
がオプションで、イメージがsinatra_sample1
となります。
run
コマンドは指定したイメージでコンテナを作成create
して、指定したコマンドでコンテナを実行start
します。
-d
オプションはコンテナをバックグラウンドで実行(デタッチ)します。
-p
オプションは コンテナのポート4567
をホストのポート8000
に割り当てています。
--name
オプションはコンテナに名前sinatra
を割り当てます。
コマンドを省略するとイメージで指定したCMD
が実行されます。指定すると上書きされます。
結果
成功なら作成したコンテナIDが表示されます。IDは実行ごとに異なります。
9efd21eae197db966ad7d2011398579874b7fbce11be1903b89b920186816040
確認
コマンド docker ps
を入力してコンテナが稼働していることを確認します。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9efd21eae197 sinatra_sample1 "ruby sample.rb" 37 seconds ago Up 36 seconds 0.0.0.0:8000->4567/tcp sinatra
3.ブラウザで確認
ブラウザで、URLhttp://localhost:8000
と入力して、「Hello docker!!」と表示されていればSinatra
が正常に稼働しています。
コマンドdocker stop sinatra
と入力するとコンテナが停止します。再度、実行させたい場合は コマンドdocker start sinatra
と入力してください。
以上です、編集長!!