Docker je projekt s otevřeným zdrojovým kódem, který poskytuje otevřenou platformu pro vývojáře a správce systému pro vytváření, balení a spouštění aplikací kdekoli jako odlehčený kontejner. Docker automatizuje nasazení aplikací uvnitř softwarových kontejnerů.
Ruby on Rails (RoR) je open source webový aplikační rámec, publikovaný pod licencí MIT. Jedná se o serverový webový aplikační rámec, který se řídí konceptem MVC (Model-View-Controller).
V tomto tutoriálu vám ukážu, jak nastavit vývojové prostředí pro aplikace Ruby on Rails pomocí Docker a Docker compose. Jako hostitelský operační systém budeme používat Ubuntu 18.04 a pro náš projekt Rails budeme používat databázi PostgreSQL.
Co uděláme:
- Nainstalujte Docker a Docker Compose
- Vygenerujte projekt Rails
- Nastavení projektu Rails
- Vytvořte skript Docker Compose Script
- Sestavte projekt
- Test Create Basic CRUD on Rails
Krok 1 – Instalace Docker a Docker Compose
Prvním krokem, který musíme udělat, je nainstalovat docker a docker compose sám. Nainstalujeme docker z oficiálního úložiště dockerů a nainstalujeme docker-compose z oficiálního projektu docker GitHub.
Před instalací balíčků Docker spusťte níže uvedený příkaz apt k instalaci závislostí balíčků.
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Nyní přidejte klíč dockeru a úložiště dockeru.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Příkaz automaticky aktualizuje všechna úložiště v systému. Po dokončení nainstalujte balíčky docker-ce.
sudo apt install -y docker-ce
Počkejte na instalaci docker-ce a poté spusťte službu docker a přidejte ji do doby spouštění.
sudo systemctl start docker
sudo systemctl enable docker
Docker je v systému spuštěný.
Dále nainstalujte docker-compose stažením binárního souboru přímo z úložiště docker GitHub.
Stáhněte si binární soubor docker-compose do adresáře '/usr/local/bin/' a vytvořte z něj spustitelný soubor.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Docker a docker-compose byly nainstalovány do systému, zkontrolujte verzi pomocí příkazů níže.
docker version
docker-compose version
Níže je výsledek.
Krok 2 – Generování projektu Ruby on Rails
Po instalaci základních balíčků docker a docker-compose do systému chceme vytvořit nového uživatele a poté pomocí obrazů dockeru vygenerovat projekt Rails.
Přidejte uživatele s názvem 'hakase' a dejte uživateli heslo.
useradd -m -s /bin/bash hakase
passwd hakase
Přidejte uživatele do skupiny 'sudo' a 'docker' a přihlaste se do uživatelského prostředí 'hakase'.
usermod -a -G sudo hakase
usermod -a -G docker hakase
su - hakase
Nyní může uživatel 'hakase' spustit a spustit příkaz docker.
Dále vytvoříme nový adresář 'rails' pro náš projekt Ruby on Rails.
Vytvořte adresář 'rails' a přejděte do něj.
mkdir -p ~/rails
cd ~/rails/
Nyní spusťte níže uvedený příkaz 'docker run'.
docker run --rm -v ${PWD}:/usr/src -w /usr/src -ti ruby:alpine sh ; cd app
Příkaz spustí dočasný kontejner založený na obrázku ruby:alpine, připojí místní adresář do adresáře '/usr/src' uvnitř kontejneru a poté provede příkaz shellu 'sh' a přejde do adresáře 'app'.
Uvnitř kontejneru nainstalujte balíčky 'build-base'.
apk add build-base
Nyní nainstalujte Ruby on Rails do dočasného kontejneru.
gem install -N rails
A vygenerujte nový projekt Rails s názvem 'app' s PostgreSQL jako databází a poté ukončete/odhlaste se z kontejneru.
rails new app --database=postgresql --skip-bundle
exit
A budete v adresáři projektu Rails 'app'.
Nyní změňte vlastníka adresáře projektu 'app' na uživatele 'hakase'.
sudo chown -R hakase:hakase ~/rails/app/
ls -lah
A projekt Ruby on Rails byl vygenerován prostřednictvím dočasného kontejneru docker.
Krok 3 – Nastavení projektu Rails
V tomto kroku vytvoříme nový Dockerfile pro naše aplikace Rails.
V adresáři 'rails' vytvořte nový Dockerfile pomocí vim.
vim Dockerfile
Vložte konfiguraci níže.
FROM ruby:alpine RUN apk update RUN apk add build-base nodejs postgresql-dev tzdata RUN gem install -N rails RUN mkdir -p /app WORKDIR /app COPY ./app/Gemfile /app COPY ./app/Gemfile.lock /app RUN bundle install --binstubs
Uložte a ukončete.
Vytváříme nový docker image založený na linuxu Ruby Alpine. Instalujeme nové balíčky pro instalaci rails, vytvoříme nový adresář /app, zkopírujeme Gemfile a Gemfile.lock z místního adresáře app a nainstalujeme všechny balíčky založené na Gemfile.
Dále přejděte do adresáře 'app', vytvořte nový soubor Gemfile.lock.
cd app/
touch Gemfile.lock
Upravte soubor 'database.yml'.
vim config/database.yml
Změňte výchozí konfiguraci databáze a změňte podrobnosti, jak je uvedeno níže.
default: &default adapter: postgresql encoding: unicode host: db username: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
Uložte a ukončete.
Konfigurace projektu Rails byla dokončena.
Krok 4 – Vytvoření souboru Docker Compose
V tomto kroku vytvoříme nový soubor docker-compose pro naši aplikaci Rails. Vytvoříme pouze dvě služby db databázi PostgreSQL a web je samotná aplikace rails.
Vytvořte nový soubor 'docker-compose.yml' v adresáři 'rails'.
vim docker-compose.yml
A vložte konfiguraci níže.
version: '3.6' services: db: image: postgres:alpine volumes: - ./postgresql:/var/lib/postgresql/data web: build: . volumes: - ./app:/app working_dir: /app command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - 80:3000 depends_on: - db
Uložte a ukončete.
Nyní vytvořte adresář 'postgresql' uvnitř projektu 'rails'.
mkdir -p ~/rails/postgresql
A jsme připraveni postavit náš projekt Rails.
Krok 5 – Sestavení projektu
Vytvořte obraz ukotvitelného panelu Rails pomocí příkazu docker-compose níže.
docker-compose build
Příkaz stáhne bitovou kopii Ruby Alpine Linux a vytvoří vlastní bitovou kopii, jak potřebujeme, na základě našeho Dockerfile.
Vygenerujte PostgreSQL databázi pro projekt.
docker-compose run web rake db:create
Nyní aktivujte služby 'db' a 'web'.
docker-compose up -d
A služby rails fungují, zkontrolujte to pomocí příkazu docker-compose níže.
docker-compose ps
Můžete vidět, že služba 'web' běží na portu '80' na hostiteli.
Nyní zkontrolujte obrázky dockerů v našem systému.
docker-compose images
A dostanete výsledek, jak je uvedeno níže.
Nyní otevřete webový prohlížeč a zadejte IP adresu serveru nebo název domény. Můj je:
http://rails.hakase-labs.io/
A získáte na něm výchozí aplikaci stránky Rails.
Nyní jsme připraveni vyvinout náš projekt Rails.
Krok 6 – Otestujte vytvoření základního CRUD on Rails
Vygenerujte jednoduchý CRUD on rails spuštěním příkazu rails uvnitř 'web' kontejnerové služby.
docker-compose exec web rails g scaffold Post title:string body:text
Nyní vygenerujte databázi.
docker-compose exec web rake db:migrate
Nyní otevřete webový prohlížeč a do adresního řádku zadejte IP adresu serveru s cestou '/posts'. Můj je:
http://rails.hakase-labs.io/posts
A získáte jednoduchou stránku CRUD, jak je uvedeno níže.
Napište příspěvek a klikněte na tlačítko 'Vytvořit příspěvek'.
A dostanete výsledek, jak je uvedeno níže.
Nastavení vývojového prostředí pro Ruby on Rails pomocí Docker a Docker Compose bylo úspěšně dokončeno.