Utilice el comando de host de red de Docker
-
Crear un proyecto
Nginx
- Ejecute un contenedor en el controlador de red predeterminado
- Ejecutar un contenedor en la red host
- Conclusión
Los contenedores de Docker funcionan aprovechando los controladores de red creados durante la instalación de Docker. Los controladores predeterminados disponibles para nosotros incluyen las redes puente
y anfitrión
.
Cuando creamos contenedores sin especificar la red, se agregan a la red puente
, y si queremos agregar un comando network
a la red host
o una red personalizada, usamos el comando --network
.
En este tutorial, aprenderemos cómo agregar un contenedor a la red host
usando el comando --network
. También aprenderemos cómo se agregan contenedores a la red predeterminada si no especificamos una red usando este comando.
Crear un proyecto Nginx
Abra WebStorm IDEA
y seleccione Archivo
> Nuevo
> Proyecto
. En la ventana que se abre, seleccione Proyecto vacío
y cambie el nombre del proyecto de sin título
a docker-network-host
o use el nombre que prefiera.
Finalmente, presione el botón etiquetado como Crear
para generar el proyecto.
Cree un archivo llamado index.html
en la carpeta actual y copie y pegue el siguiente código en el archivo.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Welcome to docker networking !</h1>
</body>
</html>
En este archivo, hemos creado una página web simple que muestra un encabezado cuando accedemos a la aplicación que se ejecuta en nuestro contenedor. Esto ayudará a verificar que nuestro contenedor esté ejecutando la aplicación Nginx
.
Definir una imagen
Cree un archivo llamado Dockerfile
y copie y pegue las siguientes instrucciones en el archivo. Tenga en cuenta que generalmente usamos un archivo con este nombre para crear nuestra imagen personalizada a partir de imágenes existentes.
FROM nginx:alpine
ADD . /usr/share/nginx/html
FROM
- Establece la imagen base sobre la que crear nuestra imagen personalizada siguiendo las instrucciones posteriores.AÑADIR
: copia los archivos y carpetas de la carpeta actual en el destino del sistema de archivos de imágenes/usr/share/nginx/html
.
Construir una imagen
Para construir nuestra imagen personalizada usando el Dockerfile
definido anteriormente. Abra una nueva ventana de terminal usando el atajo de teclado ALT+F12, y use este comando para construir la imagen.
~/WebstormProjects/docker-network-host$ docker build --tag docker-network-host:latest .
Este comando ejecuta el Dockerfile
de forma secuencial para crear una imagen con la etiqueta, y podemos ver cada una de las instrucciones que se ejecutan en la ventana de la terminal, como se muestra a continuación.
=> [1/2] FROM docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d 0.1s
=> => resolve docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d 0.1s
=> CACHED [2/2] ADD . /usr/share/nginx/html
Ejecute un contenedor en el controlador de red predeterminado
Para ejecutar un contenedor de nuestra aplicación en la red predeterminada, ejecute el siguiente comando en la ventana del terminal. Tenga en cuenta que este contenedor se agregará a la red puente
.
~/WebstormProjects/docker-network-host$ docker run --name docker-network-bridge-test -d -p 8000:80 docker-network-host:latest
Este comando ejecuta un contenedor llamado docker-network-bridge-test
que escucha en el puerto 80
del contenedor y expone el puerto 8000
en el host. Para verificar que este contenedor se agregó a la red puente
, ejecute el siguiente comando para inspeccionar la red puente
.
~/WebstormProjects/docker-network-host$ docker network inspect bridge
Producción :
[
{
"Name": "bridge",
"Id": "45773c7633cf28baa742ceca9c054a8dd6b4ea609dd9944d7ae12bdb57e86bcd",
"Created": "2022-10-06T07:53:45.935633743Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"5e452da9b047ce94ff23b4841d1cb3358f34b037ef566c2f12a9eb57012a5f85": {
"Name": "docker-network-bridge-test",
"EndpointID": "d3491eb0c518d91be71b170e8ca0a077e07781bffbe20f3e1a1fd415eef9c288",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
En el JSON devuelto, la propiedad Containers
tiene un contenedor llamado docker-network-bridge-test
y se le asigna una MacAddress
y una IPv4Address
. Este es el mismo contenedor creado al comienzo de esta sección.
Para servir esta aplicación en el navegador, envíe una solicitud a localhost:8000
(http://localhost:8000/) y asegúrese de que devuelva un encabezado que contenga el texto ¡Bienvenido a la red docker!
.
Ejecutar un contenedor en la red host
El término red de host significa que el contenedor se ejecuta en la red de nuestra máquina host, ya que la red de host no puede contener la red de contenedores. Para ejecutar el contenedor en la red host, ejecute el siguiente comando en la ventana del terminal.
~/WebstormProjects/docker-network-host$ docker run --rm -d --network host --name docker-network-host-test docker-network-host:latest
Este comando usa el comando --network
con un valor de host
para ejecutar un contenedor llamado docker-network-host-test
en la red del host. Para verificar que este contenedor se agregó a la red del host, ejecute el siguiente comando en la ventana de la terminal.
~/WebstormProjects/docker-network-host$ docker network inspect host
Producción :
[
{
"Name": "host",
"Id": "4ce9d3806cd88f9d9ea446272f4338f7b1f5e7098d4d0bc2a11090c1759d1880",
"Created": "2022-09-19T07:51:50.247290701Z",
"Scope": "local",
"Driver": "host",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"22d15c7eee861ec7fdfd22936c30dfe1d17b2dde52ada93256f3e30943a3ed80": {
"Name": "docker-network-host-test",
"EndpointID": "7bd01907c8b86a881b86ae9e9c8ad8c1d3aa9f0583adebb7d41ae15bd565fabe",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
En el JSON devuelto, la propiedad Containers
tiene un contenedor llamado docker-network-host-test
y tenga en cuenta que, en este caso, al contenedor no se le ha asignado una MacAddress
o una IPv4Adress
porque se está ejecutando en la red anfitriona. Este es el mismo contenedor creado al comienzo de esta sección.
Para servir esta aplicación en el navegador, envíe una solicitud a localhost:80
(http://localhost:80/) y asegúrese de que devuelva un encabezado que contenga el texto ¡Bienvenido a la red docker!
. Sin embargo, asegúrese de que el puerto 80
en la red host esté abierto para aceptar solicitudes.
Conclusión
En este tutorial, hemos aprendido a ejecutar contenedores tanto en el controlador de red predeterminado puente
como en el controlador de red host
. Tenga en cuenta que usamos el comando --network
para agregar un contenedor en una red diferente a la red predeterminada.
Para asegurarse de que su aplicación funcione en la nueva red, asegúrese de que el puerto utilizado esté abierto para las conexiones y que otro proceso no esté utilizando el puerto.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub