{"id":2238,"date":"2024-07-12T17:15:39","date_gmt":"2024-07-12T15:15:39","guid":{"rendered":"https:\/\/alessandromasciadri.com\/?p=2238"},"modified":"2024-07-12T17:20:40","modified_gmt":"2024-07-12T15:20:40","slug":"come-inizializzare-un-progetto-laravel-con-docker","status":"publish","type":"post","link":"https:\/\/alessandromasciadri.com\/come-inizializzare-un-progetto-laravel-con-docker\/","title":{"rendered":"Come inizializzare un progetto Laravel con Docker"},"content":{"rendered":"\t\t<div data-akihiro-type=\"ama-post\" data-akihiro-id=\"2238\" class=\"akihiro akihiro-2238\" data-akihiro-post-type=\"post\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2773a73 e-flex e-con-boxed e-con e-parent\" data-id=\"2773a73\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-472b9e9 akihiro-widget akihiro-widget-text-editor\" data-id=\"472b9e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Laravel \u00e8 un framework PHP per applicazioni web che permette allo sviluppatore di semplificare alcune delle attivit\u00e0 pi\u00f9 comuni dei progetti web, come ad esempio autenticazione, autorizzazione, routing, sessioni e caching.<\/p><p>Essendo Laravel ampiamente diffuso, in questo articolo affrontiamo il problema della containerizzazione di un progetto Laravel. Vediamo quindi come creare un progetto Laravel in un container Docker.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-c353215 akihiro-widget akihiro-widget-heading\" data-id=\"c353215\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Opzione 1: Usiamo la command line utility Docker<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2571d51 akihiro-widget akihiro-widget-text-editor\" data-id=\"2571d51\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per amministrare Docker non c&#8217;\u00e8 cosa migliore che l&#8217;utility a riga di comando. Vediamo quindi come istanziare il nostro progetto Laravel in pochi comandi.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-0819514 akihiro-widget akihiro-widget-heading\" data-id=\"0819514\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h5 class=\"akihiro-heading-title akihiro-size-default\">Creazione della Docker network<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-68cea08 akihiro-widget akihiro-widget-text-editor\" data-id=\"68cea08\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>La prima cosa da fare \u00e8 creare la Docker network che verr\u00e0 usata dai container della nostra applicazione Laravel.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-9c01ec7 akihiro-widget akihiro-widget-code-highlight\" data-id=\"9c01ec7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>sudo docker network create laravel-network<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2786fc9 akihiro-widget akihiro-widget-heading\" data-id=\"2786fc9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h5 class=\"akihiro-heading-title akihiro-size-default\">Creazione del Docker volume per MariaDB<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-3f0e87d akihiro-widget akihiro-widget-text-editor\" data-id=\"3f0e87d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ora \u00e8 necessario creare un Docker volume per garantire la persistenza dei dati di MariaDB.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-1aa8b2d akihiro-widget akihiro-widget-code-highlight\" data-id=\"1aa8b2d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>sudo docker volume create --name mariadb_data<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-4d9cc9e akihiro-widget akihiro-widget-heading\" data-id=\"4d9cc9e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h5 class=\"akihiro-heading-title akihiro-size-default\">Istanziare il container di MariaDB<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-e0a4608 akihiro-widget akihiro-widget-text-editor\" data-id=\"e0a4608\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Creiamo quindi il container Docker di MariaDB<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-b367ce8 akihiro-widget akihiro-widget-code-highlight\" data-id=\"b367ce8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>sudo docker run -d --name mariadb \\\n  --env ALLOW_EMPTY_PASSWORD=yes \\\n  --env MARIADB_USER=laravel \\\n  --env MARIADB_DATABASE=app_db \\\n  --network laravel-network \\\n  --volume mariadb_data:\/bitnami\/mariadb \\\n  bitnami\/mariadb:latest<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-ed849bb akihiro-widget akihiro-widget-heading\" data-id=\"ed849bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h5 class=\"akihiro-heading-title akihiro-size-default\">Avviare il container utilizzando la directory corrente come volume (bind mounting)<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-48bf1d2 akihiro-widget akihiro-widget-code-highlight\" data-id=\"48bf1d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>sudo docker run -d --name laravel-app \\\n  -p 8000:8000 \\\n  --env DB_HOST=mariadb \\\n  --env DB_PORT=3306 \\\n  --env DB_USERNAME=laravel \\\n  --env DB_DATABASE=app_db \\\n  --network laravel-network \\\n  --volume ${PWD}\/my-project:\/app \\\n  bitnami\/laravel:latest<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-34d13e8 akihiro-widget akihiro-widget-heading\" data-id=\"34d13e8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Opzione 2: Usiamo il docker-compose.yml<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-d937248 akihiro-widget akihiro-widget-text-editor\" data-id=\"d937248\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\tLe stesse operazioni che abbiamo eseguito usando l&#8217;utility a riga di comando di Docker, le possiamo condensare nel file di configurazione <code>docker-compose.yml<\/code> per poi eseguirle lanciando l&#8217;utility docker compose. Il file Yaml \u00e8 il seguente:\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-d6d0770 akihiro-widget akihiro-widget-code-highlight\" data-id=\"d6d0770\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>version: '3.8'\n\nservices:\n  app:\n    image: bitnami\/laravel:latest\n    container_name: laravel-app\n    restart: unless-stopped\n    environment:\n      DB_HOST: mariadb\n      DB_PORT: 3306\n      DB_USERNAME: laravel\n      DB_DATABASE: app_db\n    volumes:\n      - .\/my-project:\/app\n    ports:\n      - \"8000:8000\"\n    networks:\n      - laravel-network\n  \n  db:\n    image: bitnami\/mariadb:latest\n    container_name: mariadb\n    restart: unless-stopped\n    environment:\n      ALLOW_EMPTY_PASSWORD: yes\n      MARIADB_USER: laravel\n      MARIADB_DATABASE: app_db\n    volumes:\n      - mariadb_data:\/bitnami\/mariadb\n    networks:\n      - laravel-network\n\nvolumes:\n  mariadb_data:\n    driver: local\n\nnetworks:\n  laravel-network:\n    driver: bridge<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-74e9237 akihiro-widget akihiro-widget-text-editor\" data-id=\"74e9237\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Lanciamo quindi il seguente comando per istanziare i container della nostra applicazione Laravel:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2c2c17f akihiro-widget akihiro-widget-code-highlight\" data-id=\"2c2c17f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>sudo docker compose up -d<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-3dfc026 akihiro-widget akihiro-widget-heading\" data-id=\"3dfc026\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Considerazioni finali<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-a706793 akihiro-widget akihiro-widget-text-editor\" data-id=\"a706793\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\tIn questo articolo abbiamo visto come creare in pochi comandi una applicazione Laravel in un Docker container. Abbiamo usato come base l&#8217;immagine Docker ufficiale <code>bitnami\/laravel<\/code>. Per approfondimenti, fare riferimento alla documentazione ufficiale dell&#8217;immagine <a href=\"https:\/\/hub.docker.com\/r\/bitnami\/laravel\/\" target=\"_blank\" rel=\"noopener\">https:\/\/hub.docker.com\/r\/bitnami\/laravel\/<\/a>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Laravel \u00e8 un framework PHP per applicazioni web che permette allo sviluppatore di semplificare alcune delle attivit\u00e0 pi\u00f9 comuni dei progetti web, come ad esempio autenticazione, autorizzazione, routing, sessioni e caching. Essendo Laravel ampiamente diffuso, in questo articolo affrontiamo il problema della containerizzazione di un progetto Laravel. Vediamo quindi come creare un progetto Laravel in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[27,29],"class_list":["post-2238","post","type-post","status-publish","format-standard","hentry","category-programmazione","tag-docker","tag-laravel"],"_links":{"self":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/2238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/comments?post=2238"}],"version-history":[{"count":13,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/2238\/revisions"}],"predecessor-version":[{"id":2252,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/2238\/revisions\/2252"}],"wp:attachment":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/media?parent=2238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/categories?post=2238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/tags?post=2238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}