Práctica: Samba con Docker Compose¶
Objetivos¶
Durante esta práctica aprenderás a desplegar un servidor Samba en contenedor usando Docker Compose. El objetivo es compartir carpetas entre sistemas heterogéneos (Linux y Windows) de forma sencilla y reproducible.
Al finalizar esta práctica serás capaz de:
- Utilizar Docker Compose para definir y ejecutar servicios multi-contenedor.
- Desplegar un contenedor Samba con configuración declarativa en YAML.
- Acceder a carpetas compartidas desde clientes Windows y Linux.
- Documentar el proceso de configuración.
Requisitos previos¶
- Docker instalado (Docker Engine o Docker Desktop).
- Docker Compose V2 disponible (incluido en Docker Desktop y en instalaciones recientes de Docker Engine).
- Cliente Windows o Linux para verificar el acceso.
Docker Compose V2
Desde 2020, Docker Compose V2 se ejecuta como plugin de Docker: docker compose (con espacio). El comando antiguo docker-compose (con guion) está en desuso. Verifica con docker compose version.
Tareas a realizar¶
- Crear la estructura de directorios del proyecto.
- Crear el archivo
compose.yaml(odocker-compose.yml) con el servicio Samba. - Levantar el contenedor con
docker compose up -d. - Acceder a la carpeta compartida desde un cliente Windows y/o Linux.
- Verificar permisos y funcionamiento.
- Documentar el proceso con capturas de pantalla.
Recursos
Docker Compose y Samba en el vídeo
La explicación de Docker Compose y Samba en el siguiente vídeo comienza a partir del minuto 8:05.
Paso 1: Preparar el entorno¶
Crea el directorio del proyecto y la carpeta que se compartirá:
mkdir -p $HOME/docker/samba/compartido
cd $HOME/docker/samba
Asigna permisos de escritura a la carpeta compartida:
chmod 777 -R $HOME/docker/samba/compartido
Producción
En un entorno de producción, usa permisos más restrictivos y usuarios/grupos específicos en lugar de chmod 777.
Paso 2: Crear el archivo compose.yaml¶
Crea el archivo de configuración. Puedes usar compose.yaml (recomendado) o docker-compose.yml:
services:
samba:
container_name: samba
image: dperson/samba:latest
environment:
TZ: 'Europe/Madrid'
ports:
- "137:137/udp"
- "138:138/udp"
- "139:139/tcp"
- "445:445/tcp"
read_only: true
tmpfs:
- /tmp
restart: unless-stopped
stdin_open: true
tty: true
volumes:
- $HOME/docker/samba/compartido:/sordata:z
command: '-s "Compartida;/sordata" -n'
Parámetros principales
| Parámetro | Función |
|---|---|
volumes |
Monta la carpeta local en /sordata dentro del contenedor. La opción :z permite |
| compartir con SELinux. | |
137-138 |
Puertos NetBIOS (UDP/TCP). |
139-445 |
Puertos SMB. |
restart: unless-stopped |
Reinicia el contenedor automáticamente salvo si se detuvo |
| manualmente. | |
command |
-s "NombreCompartido;ruta" define el recurso compartido. -n habilita NetBIOS. |
Contenido avanzado
Si quieres profundizar en cada parámetro del compose.yaml (volúmenes, puertos NetBIOS/SMB, SELinux, command, read_only, etc.) y en cómo configurar permisos de escritura al acceder desde el host o desde clientes Windows/Linux, consulta el documento: Samba con Docker Compose — Contenido avanzado.
Paso 3: Levantar el contenedor¶
Ejecuta Docker Compose (comando actual, con espacio):
docker compose up -d
Comando correcto
Usa docker compose (con espacio), no docker-compose (con guion). El comando con guion corresponde a la versión antigua.
Verifica que el contenedor está en ejecución:
docker compose ps
docker ps
Paso 4: Acceder desde el cliente¶
Desde Windows¶
- Abre el Explorador de archivos.
- En la barra de direcciones escribe:
\\IP_SERVIDOR\Compartida - Sustituye
IP_SERVIDORpor la IP del equipo donde corre Docker (ej:192.168.1.100). - Si se solicita, usa credenciales genéricas (la imagen
dperson/sambapermite acceso sin autenticación por defecto en modo simple).
Desde Linux¶
# Instalar cliente SMB si no está instalado
sudo apt install cifs-utils
# Montar la carpeta compartida
sudo mkdir -p /mnt/samba
sudo mount -t cifs //IP_SERVIDOR/Compartida /mnt/samba -o guest
O accede desde el gestor de archivos: Conectar al servidor → smb://IP_SERVIDOR/Compartida
Paso 5: Verificación¶
- Crea un archivo de texto de prueba en la carpeta compartida desde el servidor (en
$HOME/docker/samba/compartido). - Comprueba que el archivo es visible desde el cliente Windows o Linux.
- Crea un archivo desde el cliente y verifica que aparece en el servidor.
Paso 6: Gestión del contenedor¶
# Detener el contenedor
docker compose down
# Ver logs
docker compose logs -f samba
# Reiniciar
docker compose restart
Persistencia de datos
Los archivos en $HOME/docker/samba/compartido se conservan aunque se elimine el contenedor, ya que están en un volumen montado del host.
Entregables¶
- Documento Markdown con:
- Capturas del archivo
compose.yamly de la salida dedocker compose ps. - Capturas del acceso desde Windows y/o Linux.
- Explicación de los parámetros utilizados.
- Problemas encontrados y soluciones aplicadas.
- Archivo
compose.yamlodocker-compose.ymlutilizado.
Criterios de evaluación¶
- Creación correcta de la estructura de directorios.
- Archivo compose.yaml válido y funcional.
- Contenedor Samba en ejecución.
- Acceso correcto desde al menos un cliente (Windows o Linux).
- Documentación completa con evidencias.