El primer error es pensar que una imagen/contenedor de Docker es similar a una máquina virtual. Hay parecidos pero no son lo mismo y, francamente, no es realmente similar.
Docker no es, en realidad, para ejecutar un sistema operativo. Es para ejecutar un solo proceso en un entorno contenido (aislado). El contenedor usa el mismo núcleo que el que está en el host.
Al crear una imagen de Docker con FROM ubuntu
está comenzando su imagen con algunas capas precreadas que incorporan algunas partes de un sistema de archivos y paquetes estándar que encontraría en un servidor Ubuntu.
Luego agrega sus propias capas adicionales, agregando binarios y archivos que son necesarios para ejecutar su programa / proceso.
La imagen tendría (normalmente, pero no es obligatoria) un CMD
comando o ENTRYPOINT
comando para ejecutar algo.
Cada línea en una Dockerfile
es un comando que indica a Docker cómo crear la imagen. Cada línea / comando da como resultado una capa más. Para instalar paquetes, probablemente desee hacer algo como esto:
FROM ubuntu:16.04RUN apt-get -qq update && \ apt-get -y install build-essential autoconf libtool && \ apt-get install -y python-setuptools python-dev python3-dev && \ apt-get install -y python-pip python3-pip && \ apt-get install -y python-virtualenv unixodbc-dev libffi-dev git && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*
Eso mantendrá su imagen más pequeña.
Entonces necesitarás ejecutar algo...
CMD python
Entonces puedes construir tu imagen:
docker build -t myimage .
Y úsalo...
docker run --rm -it myimage
ifconfig
no funciona porque el binario no está en la imagen. No es realmente necesario, ya que no administra la red desde el contenedor.
Así que parece que estás haciendo un contenedor para construir algún código. Querrá montar su directorio con el código dentro del contenedor cuando lo ejecute. No se que sistema operativo ejecuta en su estación de trabajo o servidor, así que me referiré a esta publicación para obtener más información: https://stackoverflow.com/questions/41485217/mount-current-directory-as-a-volume-in-docker-on-windows-10/41489151#41489151
Digamos que está construyendo con el comando make
, podrías hacer esto:
docker run --rm -it -v $(pwd):/usr/src/project myimage make
Esto requeriría una línea en su Dockerfile
para hacer el directorio de trabajo /usr/src/project
:
WORKDIR /usr/src/project
Qué pasará si corres el docker
la línea de comando anterior es que creará un contenedor a partir de la imagen llamada myimage
(comando build mostrado anteriormente), monte el directorio actual en el que se encuentra como /usr/src/project
dentro del nuevo contenedor. Ejecute el make
comando dentro del contenedor y luego salir. El --rm
el parámetro le dice a Docker que no mantenga el contenedor una vez que termine de ejecutarse. El -it
los parámetros significan interactive
y tty
.
Si solo quería tener acceso a algún shell para poder ejecutar manualmente make
u otros comandos de forma ad-hoc, también puede hacer esto:
docker run --rm -it -v $(pwd):/usr/src/project myimage /bin/bash
Esto crearía el contenedor a partir de la myimage
imagen, y correr bash
. Porque bash
no sale y tienes el -it
de lo contrario, estará en el indicador del contenedor donde puede hacer lo que quiera.
Solo recuerde que cualquier archivo que modifique desde el interior del contenedor no se conservará y la próxima vez que comience de nuevo al estado predeterminado. Por supuesto, cualquier archivo de la /usr/src/project
el directorio se modificará en su disco duro local a medida que se monte desde él.