Docker Linux · 10 min read · Feb 05, 2026
Gestionar contenedores de Linux con Docker en Ubuntu - Página 2
4.2 Construyendo imágenes con un Dockerfile
El Dockerfile utiliza un DSL básico con instrucciones para construir imágenes de Docker. Luego usamos el comando docker build para construir una nueva imagen a partir de las instrucciones en el Dockerfile. El equipo de Docker, Inc., también ha publicado un tutorial de Dockerfile para ayudarte a aprender cómo construir Dockerfiles aquí.
Ahora crearé un archivo docker simple que se puede mejorar según los requisitos del usuario. Primero, crea un directorio, supongamos dir=kishore:
mkdir kishore
cd kishoreAhora crea un Dockerfile como:
vi Dockerfile & ingresa el contenido como sigue:
| FROM ubuntu:12.04 MAINTAINER Srijan Kishore <[email protected]> RUN apt-get -qq update RUN apt-get -qqy install apache2 |
Ahora, para abrir el contenedor personalizado, usa:
sudo docker build -t="srijan/custom1" .Esto dará como resultado lo siguiente:
srijan@vboxtest:~/kishore$ sudo docker build -t="srijan/custom1" .
[sudo] password for srijan:
Sending build context to Docker daemon 2.56 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:12.04
Pulling repository ubuntu
ea7d6801c538: Download complete
511136ea3c5a: Download complete
65b7e9ccb809: Download complete
f8dd6bd14f58: Download complete
a343823119db: Download complete
---> ea7d6801c538
Step 1 : MAINTAINER Srijan Kishore <[email protected]>
---> Running in a6135f405eb4
---> be97c22efa82
Removing intermediate container a6135f405eb4
Step 2 : RUN apt-get -qq update
---> Running in b5681cd85ba8
---> cbc3a95de894
Removing intermediate container b5681cd85ba8
Step 3 : RUN apt-get -qqy install apache2
---> Running in 5765c09b530f
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libsqlite3-0.
(Reading database ... 7551 files and directories currently installed.)
Unpacking libsqlite3-0 (from .../libsqlite3-0_3.7.9-2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libroken18-heimdal.
Unpacking libroken18-heimdal (from .../libroken18-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libasn1-8-heimdal.
Unpacking libasn1-8-heimdal (from .../libasn1-8-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libgpg-error0.
Unpacking libgpg-error0 (from .../libgpg-error0_1.10-2ubuntu1_amd64.deb) ...
Selecting previously unselected package libgcrypt11.
Unpacking libgcrypt11 (from .../libgcrypt11_1.5.0-3ubuntu0.2_amd64.deb) ...
Selecting previously unselected package libgdbm3.
Unpacking libgdbm3 (from .../libgdbm3_1.8.3-10_amd64.deb) ...
Selecting previously unselected package libp11-kit0.
Unpacking libp11-kit0 (from .../libp11-kit0_0.12-2ubuntu1_amd64.deb) ...
Selecting previously unselected package libtasn1-3.
Unpacking libtasn1-3 (from .../libtasn1-3_2.10-1ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libgnutls26.
Unpacking libgnutls26 (from .../libgnutls26_2.12.14-5ubuntu3.8_amd64.deb) ...
Selecting previously unselected package libhcrypto4-heimdal.
Unpacking libhcrypto4-heimdal (from .../libhcrypto4-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libheimbase1-heimdal.
Unpacking libheimbase1-heimdal (from .../libheimbase1-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libwind0-heimdal.
Unpacking libwind0-heimdal (from .../libwind0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libhx509-5-heimdal.
Unpacking libhx509-5-heimdal (from .../libhx509-5-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libkrb5-26-heimdal.
Unpacking libkrb5-26-heimdal (from .../libkrb5-26-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libheimntlm0-heimdal.
Unpacking libheimntlm0-heimdal (from .../libheimntlm0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libgssapi3-heimdal.
Unpacking libgssapi3-heimdal (from .../libgssapi3-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libsasl2-2.
Unpacking libsasl2-2 (from .../libsasl2-2_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libldap-2.4-2.
Unpacking libldap-2.4-2 (from .../libldap-2.4-2_2.4.28-1.1ubuntu4.4_amd64.deb) ...
Selecting previously unselected package libcap2.
Unpacking libcap2 (from .../libcap2_1%3a2.22-1ubuntu3_amd64.deb) ...
Selecting previously unselected package libexpat1.
Unpacking libexpat1 (from .../libexpat1_2.0.1-7.2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libmagic1.
Unpacking libmagic1 (from .../libmagic1_5.09-2ubuntu0.3_amd64.deb) ...
Selecting previously unselected package file.
Unpacking file (from .../file_5.09-2ubuntu0.3_amd64.deb) ...
Selecting previously unselected package mime-support.
Unpacking mime-support (from .../mime-support_3.51-1ubuntu1_all.deb) ...
Selecting previously unselected package netbase.
Unpacking netbase (from .../netbase_4.47ubuntu1_all.deb) ...
Selecting previously unselected package libsasl2-modules.
Unpacking libsasl2-modules (from .../libsasl2-modules_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...
Selecting previously unselected package openssl.
Unpacking openssl (from .../openssl_1.0.1-4ubuntu5.16_amd64.deb) ...
Selecting previously unselected package libapr1.
Unpacking libapr1 (from .../libapr1_1.4.6-1_amd64.deb) ...
Selecting previously unselected package libaprutil1.
Unpacking libaprutil1 (from .../libaprutil1_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package libaprutil1-dbd-sqlite3.
Unpacking libaprutil1-dbd-sqlite3 (from .../libaprutil1-dbd-sqlite3_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package libaprutil1-ldap.
Unpacking libaprutil1-ldap (from .../libaprutil1-ldap_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package apache2.2-bin.
Unpacking apache2.2-bin (from .../apache2.2-bin_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2-utils.
Unpacking apache2-utils (from .../apache2-utils_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package libswitch-perl.
Unpacking libswitch-perl (from .../libswitch-perl_2.16-2_all.deb) ...
Selecting previously unselected package libclass-isa-perl.
Unpacking libclass-isa-perl (from .../libclass-isa-perl_0.36-3_all.deb) ...
Selecting previously unselected package perl-modules.
Unpacking perl-modules (from .../perl-modules_5.14.2-6ubuntu2.4_all.deb) ...
Selecting previously unselected package perl.
Unpacking perl (from .../perl_5.14.2-6ubuntu2.4_amd64.deb) ...
Selecting previously unselected package apache2.2-common.
Unpacking apache2.2-common (from .../apache2.2-common_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2-mpm-worker.
Unpacking apache2-mpm-worker (from .../apache2-mpm-worker_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2.
Unpacking apache2 (from .../apache2_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package ssl-cert.
Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...
Setting up libsqlite3-0 (3.7.9-2ubuntu1.1) ...
Setting up libroken18-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libasn1-8-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libgpg-error0 (1.10-2ubuntu1) ...
Setting up libgcrypt11 (1.5.0-3ubuntu0.2) ...
Setting up libgdbm3 (1.8.3-10) ...
Setting up libp11-kit0 (0.12-2ubuntu1) ...
Setting up libtasn1-3 (2.10-1ubuntu1.1) ...
Setting up libgnutls26 (2.12.14-5ubuntu3.8) ...
Setting up libhcrypto4-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libheimbase1-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libwind0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libhx509-5-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libkrb5-26-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libheimntlm0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libgssapi3-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libsasl2-2 (2.1.25.dfsg1-3ubuntu0.1) ...
Setting up libldap-2.4-2 (2.4.28-1.1ubuntu4.4) ...
Setting up libcap2 (1:2.22-1ubuntu3) ...
Setting up libexpat1 (2.0.1-7.2ubuntu1.1) ...
Setting up libmagic1 (5.09-2ubuntu0.3) ...
Setting up file (5.09-2ubuntu0.3) ...
Setting up mime-support (3.51-1ubuntu1) ...
update-alternatives: using /usr/bin/see to provide /usr/bin/view (view) in auto mode.
Setting up netbase (4.47ubuntu1) ...
Setting up libsasl2-modules (2.1.25.dfsg1-3ubuntu0.1) ...
Setting up openssl (1.0.1-4ubuntu5.16) ...
Setting up libapr1 (1.4.6-1) ...
Setting up libaprutil1 (1.3.12+dfsg-3) ...
Setting up libaprutil1-dbd-sqlite3 (1.3.12+dfsg-3) ...
Setting up libaprutil1-ldap (1.3.12+dfsg-3) ...
Setting up apache2.2-bin (2.2.22-1ubuntu1.6) ...
Setting up apache2-utils (2.2.22-1ubuntu1.6) ...
Setting up libclass-isa-perl (0.36-3) ...
Setting up ssl-cert (1.0.28ubuntu0.1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
Setting up libswitch-perl (2.16-2) ...
Setting up perl-modules (5.14.2-6ubuntu2.4) ...
Setting up perl (5.14.2-6ubuntu2.4) ...
update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode.
Setting up apache2.2-common (2.2.22-1ubuntu1.6) ...
Enabling site default.
Enabling module alias.
Enabling module autoindex.
Enabling module dir.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module status.
Enabling module auth_basic.
Enabling module deflate.
Enabling module authz_default.
Enabling module authz_user.
Enabling module authz_groupfile.
Enabling module authn_file.
Enabling module authz_host.
Enabling module reqtimeout.
Setting up apache2-mpm-worker (2.2.22-1ubuntu1.6) ...
invoke-rc.d: policy-rc.d denied execution of start.
Setting up apache2 (2.2.22-1ubuntu1.6) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
---> 634855a43331
Removing intermediate container 5765c09b530f
Successfully built 634855a43331
srijan@vboxtest:~/kishore$Ahora echemos un vistazo a nuestra nueva imagen. Podemos hacer esto usando el comando docker images.
docker images srijan/custom1srijan@vboxtest:~/kishore$ docker images srijan/custom1
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
srijan/custom1 latest 634855a43331 About a minute ago 277.4 MB
srijan@vboxtest:~/kishore$Aquí encontrarás que las imágenes tendrán por defecto apache2 instalado. Verifiquémoslo como:
docker run -t -i srijan/apache2:webserver /bin/bashAhora entrarás en el nuevo contenedor con el apache2 preinstalado con 12.04ubuntu.
5 Cambio de nombre de host
Supongamos que deseas cambiar el nombre de host o quieres un nombre de host personalizado, por ejemplo, en mi caso server1.example.com.
Usaré
docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bashEsto dará como resultado el contenedor de imagen como
srijan@vboxtest:~/kishore$ docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash
root@server1:/# hostname -f
server1.example.com
root@server1:/#6 Comandos útiles para docker
- pull (pull se usa para extraer una imagen o un repositorio del registro)
e.j.
docker run -i -t ubuntu /bin/bash- commit (commit se usa para guardar el contenedor)
e.j.
docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528- cp (Copiar archivos/carpetas del sistema de archivos de un contenedor a la ruta del host. Las rutas son relativas a la raíz del sistema de archivos.)
e.j.
docker cp CONTAINER:PATH HOSTPATHdonde CONTAINER es el contenedor y copiar archivos/carpetas desde el PATH a el HOSTPATH
- start y stop un contenedor:
docker start 4386fb97867ddocker stop 4386fb97867ddonde 4386fb97867d es tu número de contenedor
- export (Exportar el contenido de un sistema de archivos como un archivo tar a STDOUT)
docker export 4386fb97867d > latest.tar- import (Crear una imagen de sistema de archivos vacía e importar el contenido del tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) en ella, luego opcionalmente etiquetarla.)
docker import http://example.com/exampleimage.tgzImportar desde un archivo local:
Importar a docker a través de pipe y stdin.
cat exampleimage.tgz | sudo docker import - exampleimagelocal:newImportar desde un directorio local:
sudo tar -c . | sudo docker import - exampleimagedir
- history (Mostrar el historial de una imagen)
docker history [OPTIONS] IMAGEsudo docker history ea7d6801c538- images (Mostrará las imágenes)
docker images [OPTIONS] [NAME]Sigue algunas opciones como
-a, –all=false Mostrar todas las imágenes (por defecto filtrar las capas de imagen intermedias)
-f, –filter=[]: Proporcionar valores de filtro (es decir, ‘dangling=true’)
–no-trunc=false No truncar salida
-q, –quiet=false Solo mostrar IDs numéricos
- info (Mostrar información del sistema en general)
srijan@VE130214:~$ sudo docker infosrijan@vboxtest:~$ sudo docker info
Containers: 20
Images: 65
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 105
Execution Driver: native-0.2
Kernel Version: 3.13.0-30-generic
WARNING: No swap limit support- inspect (Devolver información de bajo nivel sobre un contenedor/imágen)
docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]- kill (Matar un contenedor en ejecución/enviar SIGKILL, o señal especificada)
docker kill [OPTIONS] CONTAINER [CONTAINER...]- login (Registrar o iniciar sesión en un servidor de registro de docker, si no se especifica ningún servidor “ https://index.docker.io/v1/ “ es el predeterminado.)
docker login localhost:8080 Iniciará sesión en un registro autoalojado.
- logs (Obtener los registros de un contenedor)
docker logs CONTAINER- ps (Listar contenedores)
docker ps [OPTIONS]Tiene opciones como:
-a, –all=false Mostrar todos los contenedores. Solo se muestran los contenedores en ejecución por defecto.
–before=”” Mostrar solo el contenedor creado antes de Id o Nombre, incluir los que no están en ejecución.
-l, –latest=false Mostrar solo el contenedor creado más recientemente, incluir los que no están en ejecución.
-n=-1 Mostrar n últimos contenedores creados, incluir los que no están en ejecución.
–no-trunc=false No truncar salida
-q, –quiet=false Solo mostrar IDs numéricos
-s, –size=false Mostrar tamaños
–since=”” Mostrar solo contenedores creados desde Id o Nombre, incluir los que no están en ejecución.
- push (Subir una imagen o un repositorio al registro)
docker push NAME[:TAG]- restart (Reiniciará un contenedor en ejecución)
docker restart [OPTIONS] CONTAINER [CONTAINER...]- rm (Eliminar uno o más contenedores)
docker rm [OPTIONS] CONTAINER [CONTAINER...]- rmi (Eliminar uno o más imágenes)
docker rmi IMAGE [IMAGE...]- run (Ejecutar un comando en un nuevo contenedor)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Tiene las siguientes opciones:
-a, –attach=[] Adjuntar a stdin, stdout o stderr.
-c, –cpu-shares=0 Participaciones de CPU (peso relativo)
–cidfile=”” Escribir el ID del contenedor en el archivo
-d, –detach=false Modo separado: Ejecutar contenedor en segundo plano, imprimir nuevo ID de contenedor
–dns=[] Establecer servidores dns personalizados
–dns-search=[] Establecer dominios de búsqueda dns personalizados
-e, –env=[] Establecer variables de entorno
–entrypoint=”” Sobrescribir el punto de entrada predeterminado de la imagen
–env-file=[] Leer un archivo delimitado por líneas de variables ENV
–expose=[] Exponer un puerto del contenedor sin publicarlo en tu host
-h, –hostname=”” Nombre de host del contenedor
-i, –interactive=false Mantener stdin abierto incluso si no está adjunto
–link=[] Agregar enlace a otro contenedor (nombre:alias)
–lxc-conf=[] (solo controlador lxc) Agregar opciones lxc personalizadas –lxc-conf=”lxc.cgroup.cpuset.cpus = 0,1”
-m, –memory=”” Límite de memoria (formato:
–name=”” Asignar un nombre al contenedor
–net=”bridge” Establecer el modo de red para el contenedor
‘bridge’: crea una nueva pila de red para el contenedor en el puente de docker
‘none’: sin red para este contenedor
‘container:
‘host’: usa la pila de red del host dentro del contenedor
-p, –publish=[] Publicar el puerto de un contenedor en el host
formato: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
(usa ‘docker port’ para ver el mapeo real)
-P, –publish-all=false Publicar todos los puertos expuestos en las interfaces del host
–privileged=false Dar privilegios extendidos a este contenedor
–rm=false Eliminar automáticamente el contenedor cuando sale (incompatible con -d)
–sig-proxy=true Proxificar todas las señales recibidas al proceso (incluso en modo no tty)
-t, –tty=false Asignar un pseudo-tty
-u, –user=”” Nombre de usuario o UID
-v, –volume=[] Montar un volumen (por ejemplo, desde el host: -v /host:/container, desde docker: -v /container)
–volumes-from=[] Montar volúmenes desde el/los contenedor(es) especificado(s)
-w, –workdir=”” Directorio de trabajo dentro del contenedor
- save (Guardar una imagen en un archivo tar (transmitido a stdout por defecto)
docker save IMAGE- search (Buscar en el índice de docker imágenes)
docker search TERM- tag (Etiquetar una imagen en un repositorio)
docker tag [OPTIONS] IMAGE [REGISTRYHOST/][USERNAME/]NAME[:TAG]- top (Buscar los procesos en ejecución de un contenedor)
docker top CONTAINER [ps OPTIONS]- version (Mostrar la información de la versión de docker.)
sudo docker versionsrijan@vboxtest:~$ sudo docker version
[sudo] password for srijan:
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a6 Resumen
He intentado familiarizarte más con docker, espero que esta guía te ayude a entender docker y utilizar docker en tus entornos de prueba/producción.
Para más información, consulta http://www.docker.com/
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.