Guida: preparare un ambiente di sviluppo Ruby On Rails su Windows 10 tramite Docker
Viste le non poche difficoltà che ho avuto nel preparare un ambiente di sviluppo per una applicazione scritta con Ruby On Rails da una macchina Windows 10 sfruttando Docker, ho deciso di preparare questa guida sperando di far risparmiare un po' di tempo a qualche interessato ;)
L'idea è quella di sviluppare l'applicazione scrivendo il codice direttamente sul filesystem della macchina Windows 10. Volevo però avere avere l'application server in container in modo da poter sfruttare tutte le potenzialità di Ruby e sopratutto di Rails. Inoltre volevo che l'applicazione si appoggiasse su un database MySql anch'esso in un container Docker.
Come prima cosa bisogna installare Docker per Windows, il software è reperibile nel sito ufficiale di Docker, in particolare bisogna installare "Docker for Windows versione Stable".
Una volta scaricato bisognerà installarlo, al termine dell'installazione verrà proposto questo messaggio:
Se tutto è andato a buon fine potrete vedere la versione di Docker installata, nel mio caso la 1.12.1
Nella nuova cartella dovremo creare il file vuoto Gemfile.lock e il file Gemfile contenente il minimo indispensabile per lanciare una installazione di Rails, ovvero le seguenti righe;
Ora possiamo avviare il container web lanciando la sua bash e mappando il volume che ospiterà il codice:
Avremo dentro C:/privata/devs/swrap/ tutti i file creati. Andiamo ad editare il Gemfile scommentando la gemma therubyracer.
Infine modifichiamo la configurazione del database per usare il nostro dbms MySql, agendo nel file config\database.yml:
Ebbene, è tutto pronto per avviare i container:
Spero di essere stato utile e di non aver dimenticato qualche passaggio.
Il setup sembra ancora un po' macchinoso su Windows e le limitazioni che ho trovato rispetto ad un analogo setup sotto Linux non sono poche, spero che Docker rilasci a breve nuovi sviluppi.
L'idea è quella di sviluppare l'applicazione scrivendo il codice direttamente sul filesystem della macchina Windows 10. Volevo però avere avere l'application server in container in modo da poter sfruttare tutte le potenzialità di Ruby e sopratutto di Rails. Inoltre volevo che l'applicazione si appoggiasse su un database MySql anch'esso in un container Docker.
Come prima cosa bisogna installare Docker per Windows, il software è reperibile nel sito ufficiale di Docker, in particolare bisogna installare "Docker for Windows versione Stable".
Una volta scaricato bisognerà installarlo, al termine dell'installazione verrà proposto questo messaggio:
Hyper-V feature is not enabled.In poche parole per poter usare i container su Windows è necessario abilitare l'Hyper-V, questo può essere un problema se si utilizzano altri software di virtualizzazione come VirtualBox o VMware, tuttavia possiamo tranquillamente attivarlo e poi disabilitarlo quando dovremo usare uno di quei software.
Do you want to enable it for Docker to be able to work properly?
Your computer will restart automatically.
Note: VirtualBox will no longer work.
Se tutto è andato a buon fine potrete vedere la versione di Docker installata, nel mio caso la 1.12.1
C:\Users\marco.fracassi>docker -vOra dobbiamo creare la cartella che ospiterà i file dell'applicazione che nel mio caso si chiamerà swrap.
Docker version 1.12.1, build 23cf638
Nella nuova cartella dovremo creare il file vuoto Gemfile.lock e il file Gemfile contenente il minimo indispensabile per lanciare una installazione di Rails, ovvero le seguenti righe;
source 'https://rubygems.org'Ci serve poi il file che serve per produrre l'immagine che ospiterà l'applicazione web. Creiamo quindi il file Dockerfile_web con questo contenuto:
gem 'rails', '4.2.0'
FROM ruby:latestSempre nella nuova cartella creiamo il file che serve per orchestrare i vari container coinvolti nel setup dell'ambiente di sviluppo: il file docker-compose.yml. In questo file vengono descritti i servizi, come essi devono essere fatti partire e le loro dipendenze:
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /swrap
WORKDIR /swrap
ADD Gemfile /swrap/Gemfile
ADD Gemfile.lock /swrap/Gemfile.lock
RUN bundle install
ADD . /swrap
version: '2'Siamo quasi pronti per avviare il container web ma prima dobbiamo attivare nella configurazione di Docker lo share del disco C per poter condividere parte del volume con i container:
services:
database:
image: mysql/mysql-server:latest
# environment:
#- MYSQL_ROOT_PASSWORD: p4ssw0rd
web:
build:
context: .
dockerfile: Dockerfile_web
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/swrap
ports:
- "3000:3000"
depends_on:
- database
Ora possiamo avviare il container web lanciando la sua bash e mappando il volume che ospiterà il codice:
docker run -it -v C:/privata/devs/swrap/:/swrap swrap_web bashquindi si può creare l'applicazione forzandola ad usare un database MySql:
rails new . --force --database=mysql --skip-bundlesi può quindi chiudere la bash.
Avremo dentro C:/privata/devs/swrap/ tutti i file creati. Andiamo ad editare il Gemfile scommentando la gemma therubyracer.
Infine modifichiamo la configurazione del database per usare il nostro dbms MySql, agendo nel file config\database.yml:
default: &defaultUna limitazione che non sono riuscito a superare è quella di usare l'utente root e la sua password di default root per connettere l'applicazione al database. Sembra che la versione Windows di docker-compose non si comporti bene con le variabili d'ambiente che infatti sono commentate nel docker-compose.yml che ho riportato in precedenza (sono benvenuti consigli su come superare questa limitazione).
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: root
host: database
Ebbene, è tutto pronto per avviare i container:
docker-compose uppossiamo quindi andare nel container web per creare il database, per collegarsi;
docker run -it -v C:/privata/devs/swrap/:/swrap swrap_web bashe una volta nella bash creiamo il database con:
rake db:createse dalla macchina Windows apriamo la url http://localhost:3000/ dovremmo vedere il risultato di cotanti sforzi:
Spero di essere stato utile e di non aver dimenticato qualche passaggio.
Il setup sembra ancora un po' macchinoso su Windows e le limitazioni che ho trovato rispetto ad un analogo setup sotto Linux non sono poche, spero che Docker rilasci a breve nuovi sviluppi.
Comments
Post a Comment