• Stars
    star
    61
  • Rank 497,051 (Top 10 %)
  • Language
    Ruby
  • License
    Apache License 2.0
  • Created almost 3 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The zero-configuration Dockerfile generator for Ruby.

Boxing

Ruby

The zero-configuration Dockerfile generator for Ruby.

The Database Repository will be used for package information.

Installation

Add this line to your application's Gemfile development group:

group :development do
  gem 'boxing'
end

And then execute:

$ bundle install

Features

Automatic Package Finder

This gem will read Gemfile and find any "knows" gem in the dependency database and put the necessary package as a dependency for build and runtime.

That means you never need to know the actual package and don't need to write your Dockerfile by hand.

Optimized Size

By the default, the base image is depend on ruby:[VERSION]-alpine which is minimal size for Ruby in most cases.

To let your image as small as possible, this gem uses multi-stage and strip useless artifacts while the c-extension compiling.

The final Rails image will be around 100MB and can be flexible to delivery to any environment.

We suggest using puma as the webserver to avoid the extra dependency to keep the image small.

Bootsnap Precompile (Experimental)

If your gem dependency included bootsnap the generated Dockerfile will add precompile options to speed up the application bootstrap.

AWS Lambda Runtime Interface Client

When the aws_lambda_ric gem is detected, the boxing will choose to use bin/aws_lambda_ric as entrypoint.

To make it works correctly, run bundle binstub aws_lambda_ric to make it can run it correctly.

Revision

To identity your image version, the default build argument REVISION will be configured by default.

You can add extra options when you are building images in your CI.

# GitLab CI example
docker:rails:
  extends: .docker
  stage: package
  script:
    - docker build
      --cache-from $RAILS_IMAGE:latest
      --build-arg REVISION=${CI_COMMIT_SHORT_SHA}
      --build-arg BUILDKIT_INLINE_CACHE=1
      --tag $RAILS_IMAGE:$CI_COMMIT_REF_SLUG
      --tag $RAILS_IMAGE:latest .

It will helpful for Sentry to detect the released version or use <%= ENV['REVISION'] %> to help you identify the current version.

Usage

Generate

To generate Dockerfile for current project

bundle exec boxing generate

Update

To update the database for package information

bundle exec boxing update

If the generated Dockerfile is not satisfy, please try to update it.

Configuration

If config/boxing.rb is found, it will be loaded and change the generated Dockerfile and .dockerignore

Source Code Root

Boxing.config do |c|
  c.root = '/var/www'
end

Customize Entrypoint

Boxing.config do |c|
  c.entrypoint = ['bin/rails']
end

Customize Command

Boxing.config do |c|
  c.command = ['server', '-b', '127.0.0.1']
end

Ignore Files

Boxing.config do |c|
  c.ignores = %w[
    vendor/gems
  ]
end

Extra Packages

Boxing.config do |c|
  c.build_packages = %w[nodejs]
  c.runtime_packages = %w[git]
end

Revision Information

Boxing.config do |c|
  c.revision = true
end

When building the image, you have to add --build-arg REVISION=... to set your revision name to compile it correctly.

Sentry Support

Boxing.config do |c|
  c.sentry_release = true
end

When building the image, you have to add --build-arg SENTRY_RELEASE=... to set your release name to compile it correctly.

Assets Precompile

This feature is disabled by default and suggest to use CI to build it.

Boxing.config do |c|
  c.assets_precompile = true
  # If not given the `node -v` will be execute
  c.node_version = '14.18'
end

When building the image, you have to add --build-arg RAILS_MASTER_KEY=... to set your production key to compile it correctly.

Health Check

Boxing.config do |c|
  c.health_check = true
  c.health_check_path = '/api/status.json'
end

If liveness gem is installed, the health check will enabled by default with /status path.

Roadmap

  • Dockerfile generator
  • .dockerignore generator
    • Common ignore files
    • Customizable ignore files
  • Docker Compose generator
    • Production Version
    • Development Version
  • Allow run Assets Precompile in Container
    • Disable RAILS_SERVE_STATIC_FILES by default
  • Customize config file config/boxing.rb
    • Customize APP_ROOT
    • Extra packages
    • DSL to customize Dockerfile
      • Build Stage
      • Entrypoint
      • Command
      • Expose Port
  • Health Check
    • Liveness gem detection
    • Add curl for web application
  • Entrypoint Detection
    • Openbox (Suggested)
    • Ruby on Rails
    • Rack (Default)
    • AWS Lambda Runtime Interface Client
      • Lamby supported (Default)
      • SQS ActiveJob Lambda Handler
  • Package Database
    • Built-in (Move to standalone repoistory in future)
    • Standalone Repoistory
    • Support gems from git repoistory
    • Customize Source
    • Base Image
      • Alpine
      • Ubuntu
    • Filter by Ruby Version
    • Filter by Gem Version

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/elct9620/boxing. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

Code of Conduct

Everyone interacting in the Boxing project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

More Repositories

1

rails-letsencrypt

The Let's Encrypt certificate manager for rails
Ruby
126
star
2

mwc

The tool to compile mruby on WebAssembly
Ruby
18
star
3

ruby-gitlab-ci

The GitLab CI templates for Ruby project
12
star
4

go-plurk-robot

登入國軍 Online 為了安撫寂寞的網友(才沒有)所製作的機器人
Go
11
star
5

heroku-buildpacks-php-with-phalcon

Heroku Buikdpack PHP with PhalconPHP and Composer
Shell
11
star
6

mruby-go

The pure go mruby virtual machine implementation.
Go
11
star
7

doll

The Chatbot Framework written in Ruby
Ruby
10
star
8

mruby.wasm

mruby WebAssembly using WebIDL
HTML
9
star
9

openbox

The zero-configuration Ruby container entry-point.
Ruby
9
star
10

terraform-provider-lambdalabs

The Lambdalabs provider for Terraform
Go
8
star
11

liveness

The Rack middleware to provide health check endpoints.
Ruby
8
star
12

replicate-pastel-mix

The pastel-mix model implementation on replicate
Python
8
star
13

laravel-guestbook-example

A simple guestbook create via Laravel Framework
PHP
8
star
14

mcoin

The cryptocurrency market monitor tool
Ruby
7
star
15

FiveFood

五食,每個上班族必備的午餐決策系統。
Ruby
7
star
16

hiro

The game framework based on mruby.
C
6
star
17

middleman-webpacked

Ruby
6
star
18

magica

A tool to build C++ project
Ruby
5
star
19

tide.ex

Communicate with Ruby via Erlport
Elixir
5
star
20

terraform-proxmox-kubernetes

The terraform module for create Kuberentes cluster on ProxmoxVE
HCL
5
star
21

30minGuestBook

PHP
5
star
22

administrate-notus_theme

The Administrate Notus Theme designed by Creative Tim
CSS
5
star
23

mitake

The ruby gem for Mitake SMS
Ruby
4
star
24

blog-ai.aotoki.me

The RAG API for blog.aotoki.me
TypeScript
4
star
25

hanami-lambda

Hanami Lambda is a gem that provides a way to run hanami application on AWS Lambda.
Ruby
4
star
26

gitlab-sonar-scanner

The sonar runner for gitlab-ci
Shell
4
star
27

pagoda-wp-zh_TW

WordPress zh_TW on PagodaBox
PHP
4
star
28

ai-gacha

Generate a mobile game-like card from AI
TypeScript
4
star
29

GlobalGameJam2023

Global Game Jam 2023 @ Taipei, Taiwan
TypeScript
4
star
30

202102-tdd-refactor-budget

The budget query practice of TDD & Refactor class
Ruby
3
star
31

5compiler

The compiler example written in Ruby
Ruby
3
star
32

book-craft-your-mruby-virtual-machine

The sample code of my book - craft-your-mruby-virtual-machine
C
3
star
33

warden-line

The warden strategies for LINE ID Token
Ruby
3
star
34

mask-map

2020 年最流行的口罩地圖
Vue
3
star
35

lita-gitlab-ci

Lita Gitlab handler for send message about build status.
Ruby
3
star
36

packer-rails

Using Packer.io to builds Ruby on Rails image.
Shell
3
star
37

flowhook

Convert flowdock straming into webhook
Ruby
3
star
38

nginx-pagespeed

A docker image include nginx with pagespeed.
Shell
2
star
39

elct9620.github.com

My personal website.
HTML
2
star
40

MRubyShader

Using OpenFrameworks and mruby to build a simple shader playground.
C++
2
star
41

iv-plurk

The Plurk API client
Ruby
2
star
42

newebpay-ruby

The offsite payments implement for Newebpay
Ruby
2
star
43

MCUCourseAPI

A Ming Chuan University Course API service, using phalcon on heroku.
PHP
2
star
44

mcu-course-query-demo

A simple mcu course query demo.
JavaScript
2
star
45

plurk-salary

JavaScript
2
star
46

wvs

The "Walrus vs Slime" rewritten in DDD style
Go
2
star
47

Aotoki-Backbone.js

My Backbone.js Practice
2
star
48

mruby-shader-generator

The Ruby DSL GLSL shader code
Ruby
2
star
49

.cat

The loading cat generator
Ruby
2
star
50

cybersource

The ruby gem for Visa CyberSource API
Ruby
2
star
51

dcha

An blockchain test live in LAN using Multicast
Ruby
1
star
52

hahamut

The Bahamut Forum's chatbot ruby client implement
Ruby
1
star
53

hubot-plurk

HuBot 的 Plurk Adapter
1
star
54

ddd-in-unity3d-demo

A toy project to verify DDD can works in Unity3D
ShaderLab
1
star
55

try_git

1
star
56

coscup-2020-cdktf

Demo project for COSCUP 2020 LT
TypeScript
1
star
57

ar-bottle-royale

The Global Game Jam 2021
Ruby
1
star
58

turn-based-game-model-prototype

The turn-based game model prototype for @BasalticStudio NewEra
Ruby
1
star
59

RichBike

The web game prototype built in 5xRuby's Vue x uBike workshop
Ruby
1
star
60

do-kubernetes-challenge-2021

The DigitalOcean Kubernetes Challenge at 2021
Ruby
1
star
61

go-steam

Steam Web API implements in Go
Go
1
star
62

elct9620

My Profile README
1
star
63

open-story

The experimental open world story bot
Ruby
1
star
64

FlashSocketIO

FlashSocketIO implement, via AS3Websocket
ActionScript
1
star
65

gh-category

Firefox OS App Days @ Taiwan Project - Github Category
JavaScript
1
star
66

coscup-chat

A simple socket.io/express chat create at COSCUP 2012.
JavaScript
1
star
67

ac-nh-turnip-prices

Ruby
1
star
68

go-chatter

A practice using golang write a simple chatroom.
CSS
1
star
69

build-game-with-react-prototype

Inspired by https://steina.vercel.app
JavaScript
1
star
70

granblue.api

The API Endpoint for Granblue Fantasy Database
Go
1
star
71

fireplurk

A simple plurk public timeline webapp.
JavaScript
1
star
72

cucumber-playwright-example

Use cucumber and playwright together for E2E testing
TypeScript
1
star
73

elct9620-vim

My personal vimrc version.
Vim Script
1
star
74

phpconf2014-sample

My PHPConf 2014 (Taiwan) talk's sample code.
PHP
1
star
75

elixir-mud

Elixir TCP Server practice
Elixir
1
star
76

MCUCourseCLI

Ming Chuan University Course command line tools for developer.
PHP
1
star
77

pio-mrubyc

Provide mruby/c support for PlatformIO
Python
1
star
78

concourse-example-rails

T 客邦 2017 年鐵人賽 - Concourse 的 Deploy 範例專案
Ruby
1
star
79

reactive-pixi-poc

Domain-Driven Design with React + RxJS + PIXI.js (PoC)
TypeScript
1
star
80

setup-mruby

An action to compile mruby
TypeScript
1
star
81

nix-aura

The nix-based universal development environment
Nix
1
star
82

snake-online

A simple snake game online version
JavaScript
1
star
83

mini-cinema-bot

The LINE bot for query cinema information
Ruby
1
star