65 lines
2.9 KiB
Markdown
65 lines
2.9 KiB
Markdown
# What is Ruby?
|
|
|
|
Ruby is a dynamic, reflective, object-oriented, general-purpose, open-source programming language. According to its authors, Ruby was influenced by Perl, Smalltalk, Eiffel, Ada, and Lisp. It supports multiple programming paradigms, including functional, object-oriented, and imperative. It also has a dynamic type system and automatic memory management.
|
|
|
|
> [wikipedia.org/wiki/Ruby_(programming_language)](https://en.wikipedia.org/wiki/Ruby_%28programming_language%29)
|
|
|
|
%%LOGO%%
|
|
|
|
# How to use this image
|
|
|
|
## Create a `Dockerfile` in your Ruby app project
|
|
|
|
```dockerfile
|
|
FROM %%IMAGE%%:2.5
|
|
|
|
# throw errors if Gemfile has been modified since Gemfile.lock
|
|
RUN bundle config --global frozen 1
|
|
|
|
WORKDIR /usr/src/app
|
|
|
|
COPY Gemfile Gemfile.lock ./
|
|
RUN bundle install
|
|
|
|
COPY . .
|
|
|
|
CMD ["./your-daemon-or-script.rb"]
|
|
```
|
|
|
|
Put this file in the root of your app, next to the `Gemfile`.
|
|
|
|
You can then build and run the Ruby image:
|
|
|
|
```console
|
|
$ docker build -t my-ruby-app .
|
|
$ docker run -it --name my-running-script my-ruby-app
|
|
```
|
|
|
|
### Generate a `Gemfile.lock`
|
|
|
|
The above example `Dockerfile` expects a `Gemfile.lock` in your app directory. This `docker run` will help you generate one. Run it in the root of your app, next to the `Gemfile`:
|
|
|
|
```console
|
|
$ docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app %%IMAGE%%:2.5 bundle install
|
|
```
|
|
|
|
## Run a single Ruby script
|
|
|
|
For many simple, single file projects, you may find it inconvenient to write a complete `Dockerfile`. In such cases, you can run a Ruby script by using the Ruby Docker image directly:
|
|
|
|
```console
|
|
$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp %%IMAGE%%:2.5 ruby your-daemon-or-script.rb
|
|
```
|
|
|
|
## Encoding
|
|
|
|
By default, Ruby inherits the locale of the environment in which it is run. For most users running Ruby on their desktop systems, that means it's likely using some variation of `*.UTF-8` (`en_US.UTF-8`, etc). In Docker however, the default locale is `C`, which can have unexpected results. If your application needs to interact with UTF-8, it is recommended that you explicitly adjust the locale of your image/container via `-e LANG=C.UTF-8` or `ENV LANG C.UTF-8`.
|
|
|
|
## Image assumptions
|
|
|
|
This image sets several environment variables which change the behavior of Bundler and Gem for running a single application within a container (especially in such a way that the development sources of the application can be bind-mounted inside a container and not have `.bundle` from the host interfere with the proper functionality of the container).
|
|
|
|
The environment variables we set are canonically listed in the above-linked `Dockerfiles`, but some of them include `GEM_HOME`, `BUNDLE_PATH`, `BUNDLE_BIN`, `BUNDLE_SILENCE_ROOT_WARNING`, and `BUNDLE_APP_CONFIG`.
|
|
|
|
If these cause issues for your use case (running multiple Ruby applications in a single container, for example), setting them to the empty string *should* be sufficient for undoing their behavior.
|