Solución:
Los contenedores Docker están diseñados para tener un solo servicio ejecutándose dentro de ellos, no para ser un sistema virtual completo (como puede ver con la caja virtual y las máquinas virtuales).
Esto significa que, idealmente, desea un solo recipiente para cada:
- Nginx
- PHP
- Mariadb
Además, la imagen de la ventana acoplable de Centos está diseñada como una base para que otros hereden o realicen una tarea específica del sistema operativo (por ejemplo, llamadas cURL o un shell) que no es realmente lo que necesita.
Recomendaría para su caso, usar docker-compose, que le permitirá configurar fácilmente contenedores intermedios y administrarlos todos como un solo proyecto.
Recomendaría un docker-compose.yml
configuración de archivo como tal:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./src:/(nginx config root folder)
- ./config/site.conf:/etc/nginx/conf.d/site.conf
links:
- php
- mariadb
php:
image: php:7-fpm
mariadb:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
Entonces tendrías un /config/
carpeta en la carpeta de su proyecto, que necesitará una site.conf
archivo para la configuración de nginx.
También necesitará un /src/
carpeta en la carpeta de su proyecto, que contendría todo el código php / web para su proyecto.
El volumen aumenta en el docker-compose.yml
file los cargará en el contenedor por usted. Los montajes de volumen funcionan por mapeo host folder path
:container folder path
cuando algo cambia en uno, se actualiza en el otro, casi como si se estuviera copiando / pegando. Tenga en cuenta que es posible que deba actualizar los permisos de los archivos.
Para el Mariadb podrías agregar otro volume
para mapear los archivos de datos en el contenedor a su carpeta de host. Además, puede abrir el puerto mysql para poder interrogar la base de datos con una herramienta como mysql workbench agregando un ports
sección para puerto 3306
como se muestra en el web
sección. El valor de mysql_root_password
establecerá la contraseña del usuario root.
Puede iniciar esto con el comando docker-compose up
desde el directorio de su proyecto.
Cuando necesite reiniciar manualmente nginx (u otros servicios), debe detenerse e iniciar los contenedores. puedes hacer eso con los comandos:
-
docker-compose up
– Arranca contenedores -
docker-compose down
– Detiene contenedores
Si desea enviar el contenedor en ejecución a un segundo plano (para que no ocupe una ventana de terminal), debe usar: docker-compose up -d
Avíseme si tiene alguna pregunta o si algo no está claro, ¡me complacerá actualizar mi respuesta!
Puede usar mi archivo docker-compose (mariadb, php-fpm, nginx)
https://github.com/matchish/skeleton
Solo corre
docker-compose up -d
y verá “Hola mundo” en http: // localhost Puede editar las variables de entorno en el archivo .env
Además, recomiendo https://laradock.io/
Puede ejecutar terminal en cualquier servicio
docker-compose exec db bash
docker-compose exec php-fpm bash
docker-compose exec nginx bash
Además, puede agregar el archivo de inicio de la base de datos. Leer el manual en este archivo https://github.com/matchish/skeleton/blob/master/mariadb/docker-entrypoint-initdb.d/createdb.sql.example
Para reiniciar los servicios, detenga el contenedor y vuelva a iniciarlo.
docker-compose stop nginx
docker-compose up -d nginx
si necesita editar nginx conf, debe reconstruir la imagen
docker-compose build nginx
docker-compose up -d
Si necesita phpmyadmin, puede agregarlo al archivo de composición
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
PMA_PORT: 3306
ports:
- '8181:80'
Ahora puede acceder a él en http: // localhost: 8181
La forma más sencilla de utilizar componer en producción es simplemente copiar el directorio del proyecto a un servidor de producción y ejecutar docker-compose up -d
. Puedes excluir logs
directorio. Es una buena práctica tener varios archivos de redacción (https://docs.docker.com/compose/production/)
No olvide conservar los permisos de los archivos cuando se implementen en producción
Docker-compose está bien, pero no es el más fácil de usar. Realmente debería mirar en Lando, ya que hace que los entornos de desarrollo sean muy fáciles de configurar. Es básicamente una capa de usabilidad sobre Docker y seguro que es elegante.
Antes de continuar, debo mencionar que Lando no funciona realmente con Windows 10 Home porque la versión de Windows de Docker usa Hyper-V, que solo viene con Win10 Pro. Sin embargo, Mac y Linux funcionan bien.
Lando tiene “recetas” que son puntos de partida que reducen la cantidad de configuración que tiene que escribir. Si está desarrollando un sitio Drupal o WordPress, hay recetas para eso. O si está escribiendo algo desde cero, también hay recetas LAMP y LEMP.
Todo lo que tiene que hacer después de instalar Lando es crear un archivo de configuración para su aplicación y ejecutarlo. Hay un lando init
comando que genera una configuración haciéndole algunas preguntas, pero prefiero simplemente escribir el .lando.yml
config a mano, ya que no es difícil.
Entonces, si desea una configuración de LEMP, su configuración se vería así:
name: put-your-site-name-here
recipe: lemp
config:
php: '7.1' # optional; defaults to the latest version
webroot: web # optional; defaults to the same directory as this file
database: mariadb # technically optional but you did say you wanted this
xdebug: true # optional
conf: # optional; specify your own configs for nginx and/or php as follows
server: my-config-path/nginx.conf
php: my-config-path/php.ini
¡y eso es! Vierta eso en un .lando.yml
archivo, ejecutar lando start
y tendrás una aplicación en ejecución en poco tiempo.
Actualmente, la última versión beta es la versión más estable, pero no hay nada de qué preocuparse. Lo uso en el trabajo todos los días. Descárgalo desde GitHub.