Plugins de Docker
https://docs.docker.com/engine/extend/legacy_plugins/
Los plugins se utilizan para extender las funcionalidades de Docker. Los plugins sirven para extender las limitaciones de recursos de Docker. Los plugins sirven para extender redes, volúmenes y autorización.
Pensemos por ejemplo en un sistema de archivos remoto para ser usado en volúmenes, como AWS S3, necesitamos extender la funcionalidad de Docker.
Los plugins se distribuyen como imágenes Docker. Por lo tanto, puedes encontrar plugins de Docker en el propio DockerHub.
Los plugins no son muy utilizados y tienden a ser descontinuados, por eso se considera legacy_plugins en la URL.
Para instalar un plugin el comando es docker plugin
Para este comando tenemos los siguientes subcomandos:
- create
- disable
- enable
- inspect
- install
- ls
- push
- rm
- set
- upgrade
Vamos a instalar un plugin famoso llamado sshfs que accede a un sistema de archivos de otra máquina a través de SSH. Observe que lo referenciamos como una imagen, por lo que incluso podríamos especificar la versión si queremos. Vale recordar que esto es solo para estudio y no debe usarse en producción, es solo para entender el uso de plugins.
vagrant@worker1:~$ docker plugin install vieux/sshfs
Plugin "vieux/sshfs" is requesting the following privileges:
- network: [host]
- mount: [/var/lib/docker/plugins/]
- mount: []
- device: [/dev/fuse]
- capabilities: [CAP_SYS_ADMIN]
Do you grant the above permissions? [y/N] y
latest: Pulling from vieux/sshfs
Digest: sha256:1d3c3e42c12138da5ef7873b97f7f32cf99fb6edde75fa4f0bcf9ed277855811
52d435ada6a4: Complete
Installed plugin vieux/sshfs
vagrant@worker1:~$
vagrant@worker1:~$ docker plugin ls
ID NAME DESCRIPTION ENABLED
6915ebc10c2d vieux/sshfs:latest sshFS plugin for Docker true
https://github.com/vieux/docker-volume-sshfs Para crear un volumen usando SSH con este driver en machine2, necesitaremos habilitar PasswordAuthentication en el archivo /etc/ssh/ssh_config en worker2.
Luego reiniciar el daemon del servicio con sudo systemctl restart sshd
# Descomentamos la línea para tener yes en PasswordAuthentication
[vagrant@worker2 ~]$ sudo vi /etc/ssh/ssh_config
[vagrant@worker2 ~]$ sudo systemctl restart sshd
[vagrant@worker2 ~]$ cat /etc/ssh/ssh_config
# $OpenBSD: ssh_config,v 1.34 2019/02/04 02:39:42 dtucker Exp $
#......
Host *
# ForwardAgent no
# ForwardX11 no
PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# ....
# /etc/ssh/ssh_config.d/ which will be automatically included below
Include /etc/ssh/ssh_config.d/*.conf
[vagrant@worker2 ~]$ ip -c -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 10.0.2.15/24 fe80::5054:ff:fe27:8b50/64
# Para obtener la IP de esta máquina
eth1 UP 192.168.56.120/24 fe80::a00:27ff:fe50:4d11/64
Ahora vamos a crear un volumen usando este driver, pero desde worker1. Como estamos dentro de vagrant tenemos un usuario vagrant en todas las máquinas y la contraseña también es vagrant. Vamos a utilizar este usuario.
# -d fue para elegir el driver
# -o es options
vagrant@worker1:~$ docker volume create -d vieux/sshfs --name remotevolume -o sshcmd=[email protected]:/vagrant -o password=vagrant
remotevolume
# Comprobando si el volumen está disponible
vagrant@worker1:~$ docker volume ls
DRIVER VOLUME NAME
vieux/sshfs:latest remotevolume
vagrant@worker1:~$ docker volume inspect remotevolume | jq
[
{
"CreatedAt": "0001-01-01T00:00:00Z",
"Driver": "vieux/sshfs:latest",
"Labels": {},
"Mountpoint": "/mnt/volumes/39cc9d0f99226f9dcafb42710622b6d6",
"Name": "remotevolume",
"Options": {
# Vea la inseguridad, muestra la contraseña
"password": "vagrant",
"sshcmd": "[email protected]:/vagrant"
},
"Scope": "local"
}
]
vagrant@worker1:~$
Comprobando lo que tenemos en la carpeta.
vagrant@worker1:~$ docker container run -it --rm -v remotevolume:/data alpine ls /data
Plugin NFS
https://registry.hub.docker.com/r/trajano/glusterfs-volume-plugin
Vamos a probar NFS ahora en la máquina master que servirá como servidor de archivos. En la máquina master es necesario instalar el paquete nfs-server y en el worker el nfs-common
master
vagrant@master:~$ sudo apt-get install nfs-server -y
vagrant@master:~$ mkdir -p /home/vagrant/storage
vagrant@master:~$ sudo echo "/home/vagrant/storage 192.168.56.0/24(rw)" > /etc/exports
vagrant@master:~$ cat /etc/exports
vagrant@master:~$ mkdir -p /home/vagrant/storage
vagrant@master:~$ sudo vi /etc/exports
vagrant@master:~$ cat /etc/exports
/home/vagrant/storage 192.168.56.0/24(rw)
# Creando un archivo y reiniciando el sistema y comprobando lo que está exportado
vagrant@master:~$ echo "solo probando" > /home/vagrant/storage/arquivo
vagrant@master:~$ sudo systemctl restart nfs-server.service
vagrant@master:~$ showmount -e
Export list for master.docker-dca.example:
/home/vagrant/storage 192.168.56.0/24
vagrant@master:~$
worker
sudo apt-get install nfs-common -y
docker plugin install trajano/glusterfs-volume-plugin
docker volume create -d trajano/glusterfs-volume-plugin --opt servers=192.168.56.100 volume_nfs
vagrant@worker1:~$ docker volume inspect volume_nfs | jq
[
{
"CreatedAt": "0001-01-01T00:00:00Z",
"Driver": "trajano/nfs-volume-plugin:latest",
"Labels": {},
"Mountpoint": "",
"Name": "volume_nfs",
"Options": {
"device": "192.168.56.100:/home/vagrant/storage",
"nfsopts": "hard,proto=tcp,nfsvers=3,intr,nolock"
},
# El alcance local es solo para esta máquina, pero con global cualquier máquina del clúster puede usarlo
"Scope": "global",
"Status": {
"args": [
"-t",
"nfs",
"-o",
"hard,proto=tcp,nfsvers=3,intr,nolock",
"192.168.56.100:/home/vagrant/storage"
],
"mounted": false
}
}
]
vagrant@worker1:~$
docker run --rm -v nfs_volume:/data alpine ls /data