Com crear i configurar automàticament imatges de Docker personalitzades amb Dockerfile - Part 3


Aquest tutorial es concentrarà en com crear una imatge Docker personalitzada basada en Ubuntu amb el servei Apache instal·lat. Tot el procés s'automatitzarà mitjançant un Dockerfile.

Les imatges de Docker es poden crear automàticament a partir de fitxers de text, anomenats Dockerfiles. Un fitxer Docker conté instruccions o ordres ordenades pas a pas que s'utilitzen per crear i configurar una imatge de Docker.

  • Instal·leu Docker i apreneu la manipulació de contenidors de Docker - Part 1
  • Implementar i executar aplicacions a Docker Containers - Part 2

Bàsicament, un fitxer Docker conté diverses instruccions per construir i configurar un contenidor específic segons els vostres requisits. Les instruccions més utilitzades són les següents, algunes d'elles obligatòries:

  1. FROM = Obligatori com a primera instrucció en un fitxer Docker. Indica a Docker que extreu la imatge base a partir de la qual esteu creant la nova imatge. Utilitzeu una etiqueta per especificar la imatge exacta a partir de la qual esteu creant:

Ex: FROM ubuntu:20.04

  1. MAINTAINER = Autor de la imatge de compilació
  2. RUN = Aquesta instrucció es pot utilitzar en diverses línies i executa qualsevol ordre després de crear una imatge de Docker.
  3. CMD = Executeu qualsevol ordre quan s'iniciï la imatge de Docker. Utilitzeu només una instrucció CMD en un Dockerfile.
  4. ENTRYPOINT = Igual que CMD però s'utilitza com a ordre principal per a la imatge.
  5. EXPOSE = Indica al contenidor que escolti als ports de xarxa quan s'executa. Els ports del contenidor no són accessibles des de l'amfitrió de manera predeterminada.
  6. ENV = Estableix les variables d'entorn del contenidor.
  7. AFEGIR = Copia recursos (fitxers, directoris o fitxers d'URL).

Pas 1: creació o escriptura del dipòsit Dockerfile

1. Primer, creem algun tipus de repositoris Dockerfile per tal de reutilitzar fitxers en el futur per crear altres imatges. Feu un directori buit en algun lloc de la partició /var on crearem el fitxer amb les instruccions que s'utilitzaran per construir la nova imatge de Docker.

# mkdir -p /var/docker/ubuntu/apache
# touch /var/docker/ubuntu/apache/Dockerfile

2. A continuació, comenceu a editar el fitxer amb les instruccions següents:

# vi /var/docker/ubuntu/apache/Dockerfile

Extracte de Dokerfile:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

Ara, anem a seguir les instruccions del fitxer:

La primera línia ens diu que estem construint a partir d'una imatge d'Ubuntu. Si no s'envia cap etiqueta, per exemple, 14:10, s'utilitza la darrera imatge de Docker Hub.

A la segona línia, hem afegit el nom i el correu electrònic del creador de la imatge. Les dues línies RUN següents s'executaran al contenidor en crear la imatge i instal·laran el dimoni Apache i faran ressò d'algun text a la pàgina web d'apache predeterminada.

La línia EXPOSE indicarà al contenidor Docker que escolti al port 80, però el port no estarà disponible per fora. L'última línia indica al contenidor que executi el servei Apache en primer pla després d'iniciar el contenidor.

3. L'últim que hem de fer és començar a crear la imatge emetent l'ordre següent, que crearà localment una nova imatge de Docker anomenada ubuntu-apache basada en el Dockerfile creat anteriorment, tal com es mostra a aquest exemple:

# docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Després que Docker hagi creat la imatge, podeu llistar totes les imatges disponibles i identificar la vostra imatge emetent l'ordre següent:

# docker images

Pas 2: executeu el contenidor i accediu a Apache des de la LAN

5. Per executar el contenidor de manera contínua (en segon pla) i accedir als serveis exposats al contenidor (ports) des de l'amfitrió o una altra màquina remota de la vostra LAN, executeu l'ordre següent a l'indicador del terminal amfitrió:

# docker run -d -p 81:80 ubuntu-apache

Aquí, l'opció -d executa el contenidor ubuntu-apache en segon pla (com a dimoni) i l'opció -p mapeja el port del contenidor 80 al vostre port localhost 81. L'accés fora de la LAN al servei Apache només es pot accedir a través del port 81.

L'ordre Netstat us donarà una idea sobre quins ports escolta l'amfitrió.

Després d'iniciar el contenidor, també podeu executar l'ordre docker ps per veure l'estat del contenidor en execució.

6. La pàgina web es pot mostrar al vostre amfitrió des de la línia d'ordres mitjançant la utilitat curl contra l'adreça IP de la vostra màquina, localhost o la interfície Docker Net al port 81. Utilitzeu la línia d'ordres IP per mostrar les adreces IP de la interfície de xarxa.

# ip addr               [List nework interfaces]
# curl ip-address:81    [System Docker IP Address]
# curl localhost:81     [Localhost]

7. Per visitar la pàgina web del contenidor des de la vostra xarxa, obriu un navegador en una ubicació remota i utilitzeu el protocol HTTP, l'adreça IP de la màquina on s'executa el contenidor, seguida del port 81, tal com es mostra a la imatge següent.

http://ip-address:81

8. Per conèixer quins processos s'estan executant dins del contenidor, emet l'ordre següent:

# docker ps
# docker top <name or ID of the container>

9. Per aturar el contenidor, emet l'ordre docker stop seguida de l'ID o el nom del contenidor.

# docker stop <name or ID of the container>
# docker ps

10. En cas que vulgueu assignar un nom descriptiu per al contenidor, utilitzeu l'opció --name com es mostra a l'exemple següent:

# docker run --name my-www -d -p 81:80 ubuntu-apache
# docker ps

Ara podeu fer referència al contenidor per a la manipulació (inici, aturada, part superior, estadístiques, etc.) només utilitzant el nom assignat.

# docker stats my-www

Pas 3: creeu un fitxer de configuració per a tot el sistema per al contenidor Docker

11. A CentOS/RHEL podeu crear un fitxer de configuració systemd i gestionar el contenidor com ho feu normalment per a qualsevol altre servei local.

Per exemple, creeu un fitxer systemd nou anomenat, per exemple, apache-docker.service mitjançant l'ordre següent:

# vi /etc/systemd/system/apache-docker.service

Extracte del fitxer apache-docker.service:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. Quan hàgiu acabat d'editar el fitxer, tanqueu-lo, torneu a carregar el dimoni systemd per reflectir els canvis i inicieu el contenidor emetent les ordres següents:

# systemctl daemon-reload
# systemctl start apache-docker.service
# systemctl status apache-docker.service

Aquest era només un exemple senzill del que podeu fer amb un Dockerfile senzill, però podeu crear prèviament algunes aplicacions força sofisticades que podeu activar en qüestió de segons amb un mínim de recursos i esforç.

Per llegir més: