Docker
Contingut
Objectius
- Instal·lar l'entorn Docker (seguir indicacions als docs de Docker).
- Comprovar que funciona (docker run...).
- Crear un compte al DockerHub i iniciar sessió en entorn de comandes.
- Busqueu al DockerHub quines imatges oficials de Debian hi ha disponibles.
- Crear el primer contenidor Docker amb Ubuntu (a partir de la imatge oficial), en mode interactiu.
- Desconectar-se del contenidor i tornar-s'hi a connectar.
- Crear un Dockerfile mínim per a generar un contenidor partint d'una imatge Debian Wheezy.
Procediment
Instal·lació de l'entorn
Tenint en compte que estic sobre Fedora 29, instal·larem l'entorn de Docker de la següent manera (com a root):
dnf install docker-ce
Després d'instal·lar, engegarem i habilitarem el servei de Docker perquè s'engegui automàticament on boot
systemctl start docker systemctl enable docker
Pot ser interessant executar comandes de Docker sense necessitat de permisos de superusuari root; pel que podem afegir el nostre usuari al grup docker del Linux. Assumint que la instal·lació ha creat un nou grup d'Unix amb el nom docker, afegiré el meu usuari en aquest grup.
usermod -aG docker guillem
- Nota: per tal de gaudir dels privilegis d'aquest nou grup, l'usuari haurà de tancar sessió i tornar a autenticar-se al sistema per tal que es reavaluïn els seus grups. Fins llavors no serà possible arrencar contenidors, per exemple, sense fer login amb root. Així doncs, podem tancar sessió al sistema i tornar a entrar abans de seguir amb els següents passos si volem fer-ho amb el nostre usuari no-privilegiat.
Prova inicial
Per a comprovar el funcionament correcte podem engegar un contenidor simple que ens mostrarà un "Hello World" per pantalla
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
En tots els casos, si no tenim localment la còpia de la imatge del contenidor que volem descarregar, Docker la cercarà als repositoris públics (Docker Hub) i la copiarà al sistema per si es necessita més endavant. Després d'executar la comanda veiem que, segons sembla, tot és correcte i ja tenim a punt l'entorn per a virtualitzar contenidors.
Docker Hub
Des de https://hub.docker.com/ ens podem registrar i tenir el nostre repositori públic/privat d'imatges de Docker que podem accedir des de qualsevol lloc (sempre i quan tinguem accés a Internet). Jo mateix m'hi he registrat i he creat un repo públic per als exercicis que fem a ASIX:
Després de registrar-nos podem iniciar sessió des del mateix terminal de Fedora per a poder pujar les nostres imatges de contenidors al repositori.
$ docker login -u lordwektabyte Password: WARNING! Your password will be stored unencrypted in /home/guillem/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
Imatges Debian
Podem buscar-ho amb el navegador web o bé per terminal amb l'ordre search
i paràmetres per tal de filtrar les imatges oficials.
$ docker search debian --filter is-official=true NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 9333 [OK] debian Debian is a Linux distribution that's compos… 3022 [OK]
Veiem que com a "Debian" hi ha imatges del propi Debian i també d'Ubuntu; com a derivat d'aquest.
Contenidor Ubuntu
Per a executar el primer contenidor Ubuntu en mode interactiu ho farem així
$ docker run -it ubuntu root@3760d3de5750:/#
- Nota: hem de diferenciar que en mode Interactiu amb Terminal se'ns obre el terminal propi del contenidor amb l'usuari root. No estem ja dins de Fedora sinó dins del contenidor.
A partir d'aquí, per a fer la prova, podríem instal·lar un programa de servei com ara Apache per poder comprovar el funcionament i la comunicació amb el contenidor. Des del terminal de Docker que se'ns ha obert abans, farem una instal·lació normal com si es tractés d'un Ubuntu pròpiament.
root@3760d3de5750:/# apt update Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] ( . . . ) 5 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@3760d3de5750:/# apt install apache2 Reading package lists... Done ( . . . ) Processing triggers for libc-bin (2.27-3ubuntu1) ...
root@3760d3de5750:/# mv /var/www/html/index.html /var/www/html/index.html.old root@3760d3de5750:/# echo "Apache en Ubuntu dins de Docker de'n Guillem" > /var/www/html/index.html
Ara accedirem a l'adreça del contenidor que s'està executant mitjançant el navegador web del nostre sistema "amfitrió"; però necessitem saber quina adreça IP té assignada aquest contenidor. Per a saber-ho, treurem informació dels contenidors que estan en marxa amb la comanda docker ps
.
- Nota: aquesta comanda l'haurem d'executar des de l'amfitrió, per tant, ens deslligarem del terminal del contenidor (sense aturar-lo) amb
Ctrl+Q
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3760d3de5750 ubuntu "/bin/bash" 13 minutes ago Up 13 minutes wonderful_cartwright