docker run -i -t –name apache_web ubuntu /bin/bash Esto crea un nuevo contenedor con una ID única y el nombre apache_web. También le proporciona un shell raíz porque especificó /bin/bash como el comando a ejecutar. Ahora, instale el servidor web Apache usando apt-get: apt-get install apache2 Tenga en cuenta que no necesita usar sudo, porque está ejecutando como root dentro del contenedor. Tenga en cuenta que necesita ejecutar apt-get update porque, nuevamente, la lista de paquetes dentro del contenedor no es la misma que la que está fuera de él. (Las otras instrucciones dentro del contenedor no requieren sudo a menos que se indique explícitamente). Aparece la salida normal de apt-get y el paquete Apache2 se instala en su nuevo contenedor. Una vez que se haya completado la instalación, inicie Apache, instale curl y pruebe la instalación, todo desde su contenedor: service apache2 start apt-get install curl curl http://localhost Si estuviera haciendo esto en un entorno de producción, A continuación, configure Apache según sus requisitos e instale una aplicación para que funcione. Docker permite que los directorios fuera de un contenedor se asignen a rutas dentro de él, por lo que un enfoque es almacenar su aplicación web en un directorio en el host y hacerla visible para el contenedor a través de una asignación. Cree un script de inicio para un contenedor Docker. Recuerde que un contenedor Docker se ejecuta solo mientras su proceso o procesos estén activos. Entonces, si el proceso que inicia cuando ejecuta un contenedor por primera vez pasa a un segundo plano, como un demonio del sistema, Docker detendrá el contenedor. Por lo tanto, debe ejecutar Apache en primer plano cuando se inicia el contenedor, para que el contenedor no salga tan pronto como se inicie. Cree un script, startapache.sh, en /usr/local/sbin: apt-get install nano nano /usr/local/sbin/startapache.sh (No es necesario usar el editor nano para hacer esto, pero es conveniente .) El contenido de startapache.sh: #!/bin/bash . /etc/apache2/envvars /usr/sbin/apache2 -D FOREGROUND Guarde el archivo y hágalo ejecutable: chmod +x /usr/local/sbin/startapache.sh Todo lo que hace este pequeño script es incorporar las variables de entorno apropiadas para Apache e iniciar el proceso de Apache en primer plano. Ya terminó de modificar el contenido del contenedor, por lo que puede salir del contenedor escribiendo exit. Cuando salgas del contenedor, se detendrá. Confirme el contenedor para crear una nueva imagen de Docker. Ahora necesita confirmar el contenedor para guardar los cambios que ha realizado: docker commit apache_web local:apache_web La confirmación guardará su contenedor como una nueva imagen y devolverá una ID única. El argumento local:apache_web hará que la confirmación se coloque en un repositorio local llamado local con una etiqueta apache_web. Puede ver esto ejecutando el comando Docker Images: ETIQUETA DEL REPOSITORIO ID DE IMAGEN TAMAÑO CREADO local apache_web 540faa63535d Hace 24 segundos 233 MB ubuntu último b1e9cef3f297 Hace 4 semanas 78,1 MB Tenga en cuenta que los detalles exactos de su imagen: el ID de la imagen y el tamaño del contenedor —Será diferente de mi ejemplo. Conceptos básicos de las redes Docker Ahora que tiene su imagen, puede iniciar su contenedor y comenzar a servir páginas. Antes de hacer eso, analicemos cómo Docker maneja las redes. Docker puede crear varias redes virtuales utilizadas por los contenedores Docker para comunicarse entre sí y con el mundo exterior: Puente: esta es la red a la que se conectan los contenedores de forma predeterminada. La red puente permite que los contenedores se comuniquen entre sí directamente, pero no con el sistema host. host: esta red permite que el host vea los contenedores directamente, como si alguna aplicación dentro de ellos se estuviera ejecutando como servicios de red local. none: Esta es esencialmente una red nula o de bucle invertido. Un contenedor conectado a nadie no puede ver nada más que a sí mismo. También existen otros controladores de red, pero estos tres son los más cruciales para comenzar. Cuando desee lanzar un contenedor y comunicarlo con otros contenedores y con el mundo exterior, deberá asignar manualmente los puertos de ese contenedor al host. Por el bien de mi ejemplo, puede hacer esto en la línea de comando cuando inicie su contenedor recién creado: docker run -d -p 8080:80 –name apache local:apache_web /usr/local/sbin/startapache.sh El modificador -p se utiliza para la asignación de puertos. Aquí, asigna el puerto 8080 en el host al puerto 80 dentro del contenedor. Una vez que ejecute este comando, debería poder apuntar un navegador web a la dirección IP del host y ver la página predeterminada del servidor web Apache. Puede ver el estado del contenedor y las asignaciones de puertos TCP utilizando el comando docker ps: ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS 81d8985d0197 local:apache_web «/usr/local/sbin/sta…» Hace 13 minutos Subir 12 minutos 0.0 .0.0:8080->80/tcp apache También puede buscar las asignaciones de red usando el comando docker port, en este caso docker port apache 80/tcp -> 0.0.0.0:8080 Tenga en cuenta que puede usar la opción -P en el comando docker run para publicar todos los puertos abiertos en el contenedor en el host y asignar un puerto alto aleatorio, como 49153, al puerto 80 en el contenedor. Esto se puede utilizar en secuencias de comandos según sea necesario, pero generalmente es una mala idea hacerlo en producción. En este punto, tiene un contenedor Docker completamente funcional ejecutando su proceso Apache. Cuando detenga el contenedor, permanecerá en el sistema y podrá reiniciarse en cualquier momento mediante el comando de reinicio de Docker. Utilice Dockerfiles para automatizar la creación de imágenes de Docker. Por muy educativo que sea crear contenedores Docker manualmente, es puro tedioso hacerlo repetidamente. Para que el proceso de compilación sea fácil, consistente y repetible, Docker proporciona una forma de automatización para crear imágenes de Docker llamada Dockerfiles. Los Dockerfiles son archivos de texto que se almacenan en un repositorio junto con las imágenes de Docker. Describen cómo se construye un contenedor específico, lo que permite que Docker realice el proceso de compilación automáticamente. Aquí hay un Dockerfile de ejemplo para un contenedor mínimo, muy parecido al que construí en las primeras etapas de esta demostración: DESDE ubuntu:latest EJECUTAR apt-get update EJECUTAR apt-get install -y curl ENTRYPOINT [«/bin/bash»]

Si guarda este archivo como dftest en su directorio local, puede crear una imagen llamada ubuntu:testing a partir de dftest con el siguiente comando: docker build -t ubuntu:testing – < dftest En PowerShell, usaría este comando: cat . \dftest | docker build -t ubuntu:testing: Docker creará una nueva imagen basada en ubuntu:latest imagen. Luego, dentro del contenedor, realizará una actualización de apt-get y usará apt-get para instalar curl. Finalmente, configurará el comando predeterminado para que se ejecute al iniciar el contenedor como /bin/bash. Luego podrías ejecutar: docker run -i -t ubuntu:testing ¡Y listo! Tiene un shell raíz en un nuevo contenedor creado según esas especificaciones. Tenga en cuenta que también puede iniciar el contenedor con este comando: docker run -i -t dftest Hay numerosos operadores disponibles para usarse en un Dockerfile, como asignar directorios de host a contenedores, configurar variables de entorno e incluso configurar activadores para usar en construcciones futuras. Consulte la página de referencia de Dockerfile para obtener una lista completa de los operadores de Dockerfile. Próximos pasos con Docker Hay mucho más en Docker de lo que hemos cubierto en esta guía, pero debe tener una comprensión básica de cómo opera Docker, una comprensión de los conceptos clave de Docker y suficiente familiaridad para construir contenedores funcionales. Puede encontrar más información en el sitio web de Docker, incluido un tutorial en línea que detalla más detalles sobre las funciones de Docker.