Chose Language:
Author: Admin/Publisher |not finished |not checked

Docker y Laravel

Ya hace un tiempo que se prefiere usar Docker en vez de homestead, u otras forma de probar nuestros proyectos, aunque a mí generalmente me gusta utilizar directamente la máquina virtual, esto consume bastantes recursos. Así pues, en este post veremos como utilizar laravel con docker.

Introducción a Docker

¿Bueno, primero que nada que es Docker? Para descubrir eso veamos la definición misma que se da en el sitio oficial de Docker.

Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

https://docs.docker.com/get-started/overview/

Docker es una plataforma abierta que permite el desarrollo, entrega o envió(shipping), y correr Aplicaciones.

La plataforma permite la separación de tu aplicación de tu infraestructura y, por lo tanto, permite la entrega de software de una manera más rápida/eficiente. Puedes gestionar tu infraestructura de la misma manera en la que puedes gestionar tus aplicaciones. Al tomar ventaja de las metodologías de Docket puedes reducir en forma significante el tiempo entre escritura de código y correr el proyecto en producción.

En pocas palabras podremos correr una app en varios OS e incluso servidores para realizar las pruebas sin necesidad de ligar nuestra app a un servidor por ejemplo correr mi app en Apache o NGINX, LInux, Windows, MAC.

Y como permitiría esto en Windows por tirar un ejemplo, al parecer Docker utiliza Windows Subsystem for Linux que es un kernel de Linux creado por Microsoft. Permitiendo los contenedores Linux correr nativamente(sin emulación alguna).

Instalando Docker

Instalar docker no tiene mayor dificultad que ir a la página oficial, he instalado. En tanto a Windows al usar docker por primera vez corriendo el código de ejemplo le pedirá instalar WSL.

 docker run -d -p 80:80 docker/getting-started

Creará nuestro primer contenedor en docker.

Containers de Docker

Es un proceso en modo sandbox en tu maquina que esta aislado del os otros procesos en la maquina que es host(directamente tu pc). Ese proceso aislado utilizara los namespaces y cgroups de kernel, caracteristicas que han estado en linux por un largo tiempo.

Docker ha trabajado para que estas capacidades sean accesibles y fáciles de usar.

A esto le llamamos contenedor o container.

  • is a runnable instance of an image. You can create, start, stop, move, or delete a container using the DockerAPI or CLI.
  • can be run on local machines, virtual machines or deployed to the cloud.
  • is portable (can be run on any OS)
  • Containers are isolated from each other and run their own software, binaries, and configurations.

OK OK entiendo esto es parecido a las maquinas virtuales no?

Windows

Ahora si vamos al panel de docker y una vez corramos el container nos pedirá instalar el WSL( caso de windows)

En caso de que no pida su instalación, puedes instalar el WSL desde Windows con el siguiente comando

wsl --install

Chequea que la versión de wsl sea WSL2.

wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  docker-desktop-data    Running         2

En caso de no ser WSL2 corre el comando para ponerla por defecto:

wsl --set-default-version

La mayoria de las veces el WSL por defecto es la version 2 por lo que es posible que el comando anterior no lo necesites.

Instalando Linux-distros con WSL

Por lo general WSL viene sin ninguna distro, por lo que la tendrás que instalar, puedes ver las distros y también que WSL estás usando en setting> resources>WSL integration y setting> resources>advanced respectivamente.

Hay algunas distros que puedes bajar y ejecutar directamente. Para poder ver estas distros he instalarla usa:

wsl --list --online
NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

Ahora tendríamos que instalar alguna de estas que nos interese:

wsl --install -d Ubuntu-20.04

si vamos a resources tendriamos que ver Ubuntu-20.04 el cual tendremos que activar, y darle a apply y restart.

También deberíamos poner la distro y versión por defecto, en este caso pondremos la distro Ubuntu-20-04.

wsl --set-version Ubuntu-20.04 2

La limitación de Windows 10 home

Lamentablemente amigos yo no pude seguir esta aventura de Docker en Windows, ya que WSL necesita Hyper-V el cual trate de activar corriendo la terminal power Shell corriendo este comando-

Power Shell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature : Feature name Microsoft-Hyper-V is unknown.
En línea: 1 Carácter: 1
+ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Enable-WindowsOptionalFeature], COMException
    + FullyQualifiedErrorId : Microsoft.Dism.Commands.EnableWindowsOptionalFeatureCommand

terminando en esta respuesta nuestra aventura. La razón de esto la encontré en un foro de Microsoft y es que aunque mi pc soporta Hyper-V tengo instalado Windows Home 10 en el que no podemos activar esta funcionalidad.

Aquí dejo la lista de los Windows que podrás usar Docker:

Puede ser habilitado en:

Windows 10 Enterprise
Windows 10 Professional
Windows 10 Education

Hyper-V no puede ser instalado o activado en:

Windows 10 Home
Windows 10 Mobile
Windows 10 Mobile Enterprise

En caso de que puedas instalar Hyper-V, hay una manera aún más fácil de correr un Ubuntu, recuerdas la lista de distros disponibles? Puedes realizar un docker run -i -t ubuntu /bin/bash y tambien deberia hacer la magia instalando la distro + creando el container.

Una vez tengas el container si lo pusiste como el por defecto podrás correrlo con el comando wsl dentro de la terminal del conteiner podras correr el clasico comando para instalar tu laravel

Corriendo el proyecto ejempl de laravel

Fuera del contenedor, en la power shell o cmd puedes correr esto, docker tiene que ser capaz de correr ya vimos anteriormente que en windows 10 home no correrá

curl -s https://laravel.build/example-app | bash

para instalar el proyecto de ejemplo y para correrlo:

cd example-app
 
./vendor/bin/sail up

Cuando corras sails creara el container

Linux y MAC

Para Linux y Mac la instalación no tiene gran complicación, al parecer, si corremos:

curl -s https://laravel.build/example-app | bash

en la terminal podrás crear el proyecto de ejemplo y

cd example-app
 
./vendor/bin/sail up

Este último comando creará el contenedor.

Recuerde que su Mac o Linux no tiene por qué venir con curl así que es probable que lo tenga que instalar

sudo apt-get update
sudo apt-get install curl

Al parecer usuarios de Linux han tenido algún problema con los permisos, no permitiendo correr docker,»Docker is not running» al correr curl -s https://laravel.build/example-app | bash y la solucion que encontraron es la siguiente:

sudo chmod 666 /var/run/docker.sock

Puedes ver más acerca de este problema en https://laracasts.com/discuss/channels/laravel/docker-is-not-running-when-installing-laravel-from-linux

Category: laravel
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category