GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo crear y configurar automáticamente imágenes Docker personalizadas con Dockerfile - Parte 3

Este tutorial se concentrará en cómo crear una imagen de Docker personalizada basada en Ubuntu con Apache servicio instalado. Todo el proceso se automatizará utilizando un Dockerfile .

Las imágenes de Docker se pueden crear automáticamente a partir de archivos de texto, denominados Dockerfiles. . Un archivo de Docker contiene instrucciones o comandos ordenados paso a paso que se utilizan para crear y configurar una imagen de Docker.

Requisitos

  • Instalar Docker y aprender a manipular contenedores de Docker:parte 1
  • Implementar y ejecutar aplicaciones en contenedores Docker:parte 2

Básicamente, un archivo Docker contiene varias instrucciones para crear y configurar un contenedor específico según sus requisitos. Las siguientes instrucciones son las más utilizadas, siendo algunas de ellas obligatorias:

  1. FROM =Obligatorio como primera instrucción en un archivo Docker. Indica a Docker que extraiga la imagen base a partir de la cual está creando la nueva imagen. Use una etiqueta para especificar la imagen exacta a partir de la cual está construyendo:
Ex: FROM ubuntu:20.04
  1. MAINTAINER =Autor de la imagen de compilación
  2. RUN =Esta instrucción se puede usar en varias líneas y ejecuta cualquier comando después de que se haya creado una imagen de Docker.
  3. CMD =Ejecute cualquier comando cuando se inicie la imagen de Docker. Use solo una instrucción CMD en un Dockerfile.
  4. ENTRYPOINT =Igual que CMD pero se usa como comando principal para la imagen.
  5. EXPOSE =Indica al contenedor que escuche en los puertos de red cuando se ejecuta. Los puertos del contenedor no son accesibles desde el host de forma predeterminada.
  6. ENV =Establecer variables de entorno del contenedor.
  7. ADD =Copiar recursos (archivos, directorios o archivos de URL).

Paso 1:crear o escribir un repositorio de Dockerfile

1. Primero, creemos algún tipo de Dockerfile repositorios con el fin de reutilizar archivos en el futuro para crear otras imágenes. Cree un directorio vacío en algún lugar de /var partición donde crearemos el archivo con las instrucciones que se usarán para construir la nueva imagen de Docker.

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

2. A continuación, comience a editar el archivo con las siguientes instrucciones:

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

Extracto del archivo Doker:

FROM ubuntu
MAINTAINER  your_name  <[email protected]>
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

Ahora, repasemos las instrucciones del archivo:

La primera línea nos dice que estamos construyendo desde un Ubuntu imagen. Si no se envía ninguna etiqueta, diga 14:10 por ejemplo, la última imagen de Docker Hub se utiliza.

En la segunda línea, hemos agregado el nombre y correo electrónico del creador de la imagen. Siguientes dos CORRE Las líneas se ejecutarán en el contenedor al construir la imagen y se instalará Apache demonio y eco algo de texto en la página web predeterminada de Apache.

La EXPOSICIÓN la línea instruirá a el Docker contenedor para escuchar en el puerto 80 , pero el puerto no estará disponible para el exterior. La última línea indica al contenedor que ejecute el servicio Apache en primer plano después de iniciar el contenedor.

3. Lo último que debemos hacer es comenzar a crear la imagen emitiendo el siguiente comando, que creará localmente una nueva imagen de Docker llamada ubuntu-apache basado en el Dockerfile creado anteriormente, como se muestra en este ejemplo:

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

4. Después de que la imagen haya sido creada por Docker , puede enumerar todas las imágenes disponibles e identificar su imagen emitiendo el siguiente comando:

# docker images

Paso 2:Ejecute el contenedor y acceda a Apache desde LAN

5. Para ejecutar el contenedor continuamente (en segundo plano) y acceder a los servicios expuestos del contenedor (puertos) desde el host u otra máquina remota en su LAN, ejecute el siguiente comando en el indicador de su terminal host:

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

Aquí, el -d La opción ejecuta ubuntu-apache contenedor en segundo plano (como un demonio) y el -p opción asigna el puerto del contenedor 80 a su puerto localhost 81 . El acceso LAN externo al servicio Apache se puede alcanzar a través del puerto 81 solo.

El comando Netstat le dará una idea de qué puertos está escuchando el host.

Una vez iniciado el contenedor, también puede ejecutar docker ps comando para ver el estado del contenedor en ejecución.

6. La página web se puede mostrar en su host desde la línea de comando usando curl utilidad contra la dirección IP de su máquina, host local o interfaz de red docker en el puerto 81. Use la línea de comando IP para mostrar las direcciones IP de la interfaz de red.

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

7. Para visitar la página web del contenedor desde su red, abra un navegador en una ubicación remota y use el protocolo HTTP, la dirección IP de la máquina donde se ejecuta el contenedor, seguido del puerto 81 como se ilustra en la imagen a continuación.

http://ip-address:81

8. Para conocer qué procesos se están ejecutando dentro del contenedor, emita el siguiente comando:

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

9. Para detener el problema del contenedor docker stop comando seguido del ID o nombre del contenedor.

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

10. En caso de que desee asignar un nombre descriptivo para el contenedor, use el --name opción como se muestra en el siguiente ejemplo:

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

Ahora puede hacer referencia al contenedor para su manipulación (inicio, detención, superior, estadísticas, etc.) solo con el nombre asignado.

# docker stats my-www

Paso 3:Cree un archivo de configuración para todo el sistema para Docker Container

11. En CentOS/RHEL puedes crear un systemd archivo de configuración y administre el contenedor como lo hace normalmente para cualquier otro servicio local.

Por ejemplo, cree un nuevo archivo systemd llamado, digamos, apache-docker.service usando el siguiente comando:

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

apache-docker.servicio extracto del archivo:

[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. Después de terminar de editar el archivo, ciérrelo, vuelva a cargar el demonio systemd para reflejar los cambios e inicie el contenedor emitiendo los siguientes comandos:

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

Este fue solo un ejemplo simple de lo que puede hacer con un Dockerfile simple pero puede crear previamente algunas aplicaciones bastante sofisticadas que puede iniciar en cuestión de segundos con recursos y esfuerzo mínimos.

Lecturas adicionales:

Parte 4 :Cómo monitorear contenedores Docker en Linux
Docker
  1. Cómo usar imágenes, contenedores y archivos Docker en profundidad

  2. Cómo usar un Dockerfile para crear una imagen de Docker

  3. Cómo empaquetar y transferir imágenes de Docker de un servidor a otro

  4. Cómo compartir imágenes de Docker con otros

  5. Cómo crear una imagen de Docker a partir de un contenedor y un archivo Docker

Cómo limpiar y eliminar imágenes de Docker

Cómo insertar y extraer imágenes de Docker con el registro de contenedores de DigitalOcean

Cómo crear imágenes de Docker en una canalización de GitLab CI

Cómo crear una imagen de ventana de Docker con la etiqueta de compilación de Docker

Cómo crear una imagen Docker personalizada con Dockerfile

Cómo compilar y enviar una imagen de Docker al repositorio de Docker Hub