Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

TDD o Test-Driven Development
immagine docker per lavorare con lazarus e free pascal
Indice
Installare lazarus su mac osx sierra
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non)
Advanced Record Syntax: un esempio pratico
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
DB concetti fondamentali e DBGrid
Advanced Record Syntax
DB concetti fondamentali e ZeosLib
DB concetti fondamentali e connessioni standard
guida all'installazione di fpc trunk da subversion in linux gentoo
Creare un server multithread
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Free Pascal e Lazarus sul Raspberry Pi
fpcup: installazioni parallele di lazarus e fpc
Ubuntu - aggiornare free pascal e lazarus
Come interfacciare periferica twain
Lazarus 1.0
Aspetto retrò (Cmd Line)
Disporre le finestre in un blocco unico (come Delphi)
Zeos ... dietro le quinte (prima parte)
Lavorare con file in formato JSON con Lazarus
Overload di operatori
Dataset virtuale
Linux + Zeos + Firebird
Pascal Script
La gestione degli errori in Lazarus
Indy 10 - Invio email con allegati
Brute force
Le permutazioni
Da DataSource a Excel
StatusBar - aggirare l'errore variabile duplicata
Visualizzare un file Html esterno
Evidenziare voci TreeView
Toolbar
Direttiva $macro
Indy gestiore server FTP lato Client
TImage su Form e Panel
PopUpMenu sotto Pulsante (TSpeedButton)
Conversione numerica
Proprietà
Funzioni a parametri variabili
Overload di funzioni
Liste e puntatori
Conferma di chiusura di un applicazione
Il file: questo sconosciuto
UIB: Unified Interbase
System Tray con Lazarus
Intercettare tasti premuti
LazReport, PDF ed immagini
Lazarus e la crittografia
Ampliare Lazarus
Generare controlli RUN-TIME
TTreeview e Menu
TTreeView
Utilizzare Unità esterne
Lavorare con le directory
Realizzare programmi multilingua
Codice di attivazione
File INI
Esempio lista in pascal
Stabilire il sistema operativo
Recuperare codice HTML da pagina web
Trascinare un file nel programma
Mandare mail con Lazarus
Welcome to Italian community of Lazarus and Free Pascal. Please login or sign up.

Recenti

How To

Utenti
Stats
  • Messaggi totali: 20.565
  • Totale discussioni: 2.471
  • Online today: 26
  • Online ever: 5.949 (Luglio 30, 2026, 09:49:59 PM)
Utenti online
4 Visitatori, 1 Utente
Docker, brevemente

Docker è stato concepito come sistema di distribuzione di applicazioni, costruito sopra un sistema operativo virtualizzato.
Il sistema di virtualizzazione di Docker è molto diverso dagli altri sistemi di virtualizzazione più conosciuti, quello che ci importa sapere per capirne il funzionamento - molto brevemente - è che è costituito da immagini e container.
Una immagine consiste in un file fisico che contiene l'ambiente virtualizzato (OS + applicazione).
Un container è una istanza in esecuzione in memoria di una certa immagine.
Il container è destinato a mutare il suo contenuto rispetto all'immagine e si possono mandare in esecuzione più container contemporaneamente a partire dalla stessa immagine.

Non vado oltre in quanto la documentazione sulla rete è molto esaustiva.



Lavorare con Docker, Lazarus e Free Pascal

Visto quindi che abbiamo a che fare con un sistema di distribuzione di applicazioni, ci sono diversi ambiti in cui una immagine docker può essere utile:
1) immagine docker con all'interno lazarus e free pascal per compilare progetti per un determinato sistema operativo
2) diverse immagini docker, una per ogni versione del compilatore fpc, in modo da compilare lo stesso progetto con diverse versioni del compilatore
3) una immagine pronta per il cross-compile

Sicuramente un sistema di questo tipo potrà essere utile anche in altre occasioni, quindi ho provato a realizzarne una, per esperienza personale, contenete Lazarus 1.8.4 e Free Pascal 3.0.2.
Il sistema operativo virtualizzato è Devuan (si tratta di un fork di Debian senza systemd).
Quindi se volete fare delle prove... potete installare Docker e continuare nella lettura.


Prova su strada

La prima cosa da fare è scaricare l'immagine che ho preparato e questo si fa con il seguente comando:
docker pull nomorelogic/lazimages:laz184_fpc302


Una volta scaricata l'immagine, se volete provare l'immagine, potete lanciare un nuovo container con il seguente comando:
docker run -i -t nomorelogic/lazimages:laz184_fpc302 /bin/bash
In questo modo avete lanciato un container in modalità interattiva (-i) ed inoltre avete agganciato la vostra console alla tty virtuale di Devuan (-t): esplorate i comandi linux e potete constatare che fpc è installato.

Per uscire potete usare la combinazione di tasti Ctrl+D

Digitando ora sulla console dell'host il comando
docker ps -a
otterrete qualcosa del genere
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS                       PORTS               NAMES
b42dcb2fb18c        nomorelogic/lazimages:laz184_fpc302     "/bin/bash"              8 seconds ago       Exited (130) 3 seconds ago                       nostalgic_matsumoto

che significa:
Il container in memoria: si chiama nostalgic_matsumoto, ha come id b42dcb2fb18c, è basato sull'immagine nomorelogic/lazimages:laz184_fpc302 e qualcuno è uscito 3 secondi fa...

Bene, distruggiamo ora il container:
docker rm nostalgic_matsumoto

Digitando ancora
docker ps -a
vi mostrerà un elenco vuoto di containers.



Prova con Lazarus e Free Pascal

Proviamo ora ad usarlo per compilarci qualcosa...
Eseguite uno alla volta i seguenti comandi

# lancio un nuovo container chiamato testlaz, monto la cartella locale dell'host /media/dati/dev/docker/dockerout in /var/opt del container (si, avete letto bene!) ed esco (-d = detach)
docker run --name testlaz -v /media/dati/dev/docker/dockerout:/var/opt -i -d nomorelogic/lazimages:laz184_fpc302

# dall'host lancio un comando nel container: clono il repo del package paxjson
docker exec -d testlaz sh -c "git clone https://github.com/paxtibi/paxjson.git /home/test/packages/paxjson >/var/opt/01_gitclone_paxjson.log 2>&1"

# clono il repo del package paxlogging
docker exec -d testlaz sh -c "git clone https://github.com/paxtibi/paxlogging.git /home/test/packages/paxlogging >/var/opt/02_gitclone_paxlogging.log 2>&1"

# clono il repo del package paxhttp
docker exec -d testlaz sh -c "git clone https://github.com/paxtibi/paxhttp.git /home/test/packages/paxhttp >/var/opt/03_gitclone_paxhttp.log 2>&1"

# compilo il package paxhttp e redirigo l'output nella cartella del container /var/opt
docker exec -d testlaz sh -c "lazbuild --add-package /home/test/packages/paxhttp/pck/paxhttp_package.lpk >/var/opt/04_lazbuild_paxhttp.log 2>&1"

# compilo il package paxjson e redirigo l'output nella cartella del container /var/opt
docker exec -d testlaz sh -c "lazbuild --add-package /home/test/packages/paxjson/pck/paxjson_package.lpk >/var/opt/05_lazbuild_paxjson.log 2>&1"

# compilo il package paxlogging e redirigo l'output nella cartella del container /var/opt
docker exec -d testlaz sh -c "lazbuild --add-package /home/test/packages/paxlogging/pck/paxlogging_package.lpk >/var/opt/06_lazbuild_paxlogging.log 2>&1"

# clono il progetto jsonserver che utilizza i packages di cui sopra
docker exec -d testlaz sh -c "git clone --branch=master https://github.com/paxtibi/jsonserver.git /home/test/paxtibi/jsonserver >/var/opt/07_gitclone_jsonserver.log 2>&1"

# compilo il progetto jsonserver e redirigo l'output nella cartella del container /var/opt
docker exec -d testlaz sh -c "lazbuild /home/test/paxtibi/jsonserver/pck/jsonserver.lpi >/var/opt/08_lazbuild_jsonserver.log 2>&1"

# fermo il container e lo elimino dalla memoria
docker stop testlaz && docker rm testlaz

# ora, nella cartella precedentemente montata nell'immagine avrete i log dello script sopra.

Buon lavoro e fatemi sapere le votre impressioni.








Share on Facebook!Share on Twitter!RedditDigg this story!Del.icio.usStumbleUpon

Comments: 0 *

You don't have permission to comment, or comments have been turned off for this article.

Articles in « Lazarus 1.0 »

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.