En la raiz del proyecto:
$ docker build -t {image_name} .En cualquier directorio:
$ docker build -t {image_name} /path/proyecto$ docker images$ docker run -d -p 85:80 {image_name}$ docker ps$ docker exec -i -t {container_name} /bin/bash$ docker start {container_id}$ docker stop {container_id}$ docker image rm {image_id}$ docker rm {container_id}ó
$ docker container rm {container_id}$ docker exec {container_id} /usr/bin/mysqldump -u {user} --password={password} {database} > /path/backup.sqlEjemplo:
$ docker exec 57b3328e0fd3 /usr/bin/mysqldump -u root --password=sql kardex > /Users/andy/Desktop/dump.sql$ cat backup.sql | docker exec -i {container_id} /usr/bin/mysql -u {user} --password={password} {database}Para ejecutar los comandos que se mostraran acontinuación es posible que tenga que utilizar "".
docker version: El comando "docker --version" muestra la versión de Docker instalada.
$ docker --versiondocker info: El comando "docker info" muestra la información de todo el sistema docker.
$ docker infodocker run: El comando "docker run" nos sirve para crear contenedores y ejecutar comandos dentro de estos.
Ejemplo 1:
$ docker run hello-worldEjemplo 2:
Ejecutar el comando "ls -l" en un contenedor de la imagen alpine:
$ docker run alpine ls -l
total 52
drwxr-xr-x 2 root root 4096 Jul 5 14:47 bin
drwxr-xr-x 5 root root 340 Aug 12 03:38 dev
drwxr-xr-x 1 root root 4096 Aug 12 03:38 etc
drwxr-xr-x 2 root root 4096 Jul 5 14:47 home
drwxr-xr-x 5 root root 4096 Jul 5 14:47 lib
drwxr-xr-x 5 root root 4096 Jul 5 14:47 media
drwxr-xr-x 2 root root 4096 Jul 5 14:47 mnt
dr-xr-xr-x 168 root root 0 Aug 12 03:38 proc
drwx------ 2 root root 4096 Jul 5 14:47 root
drwxr-xr-x 2 root root 4096 Jul 5 14:47 run
drwxr-xr-x 2 root root 4096 Jul 5 14:47 sbin
drwxr-xr-x 2 root root 4096 Jul 5 14:47 srv
dr-xr-xr-x 13 root root 0 Aug 12 03:38 sys
drwxrwxrwt 2 root root 4096 Jul 5 14:47 tmp
drwxr-xr-x 7 root root 4096 Jul 5 14:47 usr
drwxr-xr-x 11 root root 4096 Jul 5 14:47 varEjemplo 3:
Ejecutar el comando "echo" en un contenedor de la imagen alpine:
$ docker run alpine echo "hello from alpine"
hello from alpineLos comandos anteriores se ejecutan en una instancia de computo.
Ejemplo 4:
Al ejecutar el siguiente comando, el proceso no se va a caer ya que no es un comando de computo volatil.
$ docker run -it alpine /bin/shdocker ps: El comando "docker ps" nos muestra los contenedores que se están ejecutando.
$ docker psdocker ps -a: El comando "docker ps -a" nos muestra todos los contenedores.
$ docker ps -adocker search: El comando docker search nos permite buscar una imagen en Docker Hub, Ejemplos de uso:
Buscar una imagen llamada ubuntu:
$ docker search ubuntuBuscar una imagen llamada ubuntu y tenga el tag 14.04:
$ docker search ubuntu:14.04docker pull: El comando docker pull nos permite descargar una imagen. Ejemplos de uso:
Sintaxis:
$ docker pull nombre_imagenEjemplo:
$ docker pull alpineDescargar imagen con la última versión de node (latest):
$ docker pull nodeDescargar imagen con la versión 8.11.3 de node:
$ docker pull node:8.11.3docker images: El comando docker images nos permite listar todas las imágenes descargadas.
$ docker imagesdocker start: El comando "docker start" permite ejecutar uno o más contenedores detenidos
Sintaxis:
$ docker start {container_id}Sintaxis opcional:
$ docker container start {container_id}Ejemplo:
$ docker start 1266062bbe0fdocker attach: El comando "docker attach" permite conectarse a un contenedor.
$ docker attach {container_id}$ docker attach 1266062bbe0fdocker stop: Este comando nos permite detener un contenedor.
Sintaxis:
$ docker stop {container_id}ó
$ docker container stop {container_id}Ejemplo:
$ docker stop ff33aacf71bddocker commit: Este comando nos permite crear una imagen a partir de un contenedor con cambios.
Sintaxis:
$ docker commit {container_id} {new_name_image}Ejemplo:
$ docker commit 03224b4dce3e ubuntuejemplodocker rm: Este comando nos permite eliminar uno o más contenedores.
$ docker rm {CONTAINER_ID}Creamos un nuevo container ejecutando la imagen ubuntu:
$ docker run -it ubuntu bashEl comando anterior ejecutará el container e iniciará sesión en el OS. A continuación saldremos del OS y ejecutaremos docker ps. Podremos ver que no aparece ningún contenedor en ejecución.
$ exit
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS Revisamos el container id:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d8c807960dc ubuntu "bash" About a minute ago Exited (0) 37 seconds agoEjecutamos el contenedor creado anteriormente:
$ docker start 6d8c807960dcEn otra terminal podemos ver que el contenedor se lista al ejecutar el comando docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d8c807960dc ubuntu "bash" About a minute ago Exited (0) 37 seconds agoFinalmente nos conectamos al contenedor utilizando el comando "docker attach":
$ docker attach 6d8c807960dcPara salir de un contenedor interactivo sin detenerlo sólo debemos presionar las teclas ctrl + p + q.
Vamos a crear un contenedor con la imagen de Ubuntu:
$ docker run -it ubuntu bash
root@291ab7b22160:/#Ahora vamos a presionar las teclas ctrl + p + q para salir del contenedor sin detenerlo.
A continuación vamos a listar los contenedores que se están ejecutando:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
291ab7b22160 ubuntu "bash" 24 seconds ago Up 23 seconds admiring_babbageVamos a detener el contenedor con el comando "docker stop":
$ docker stop 291Ahora nueevamente listaremos los contenedores que se están ejecutando:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESComo vemos ya esta detenido. Si ingresamos el comando "docker ps -a" veremos el siguiente status "Exited (0) About a minute ago"
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
291ab7b22160 ubuntu "bash" 4 minutes ago Exited (0) About a minute ago admiring_babbageAhora vamos a iniciar el contenedor utilizando el comando "docker start":
$ docker start 291Si ingresamos "docker ps" podemos ver que nuevamente tenemos nuestro contenedor ejecutandose:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
291ab7b22160 ubuntu "bash" 8 minutes ago Up 6 seconds admiring_babbageVamos a contectarnos al contenedor utilizando el comando "docker attach":
$ docker attach 291
root@291ab7b22160:/#$ docker run --name prueba -it ubuntuVamos a crear un contenedor con la imagen de Ubuntu:
$ docker run -it ubuntu bash
root@03224b4dce3e:/#Crearemos una carpeta llamada jgaitpro y dentro de esta un archivo llamado hola:
root@03224b4dce3e:/# mkdir jgaitpro
root@03224b4dce3e:/# ls
bin boot dev etc home jgaitpro lib lib64 media mkdir mnt opt proc root run sbin srv sys tmp usr var
root@03224b4dce3e:/# cd jgaitpro
root@03224b4dce3e:/# touch hola
root@03224b4dce3e:/jgaitpro# ls
holaAhora vamos a salir del contenedor para crear una imagen a partir de este contenedor. En este ejemplo saldremos del contenedor sin detenerlo (presionando las teclas ctrl + p + q) pero también se puede crear la imagen con el contenedor detenido.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03224b4dce3e ubuntu "bash" 7 minutes ago Up 7 minutes keen_brownAhora vamos a crear la imagen utilizando el comando "docker commit"
$ docker commit 03224b4dce3e ubuntujgaitpro
sha256:dcc56f2954c040656460984b5df50754cc18fcba795c78fcf40985bf66b6086bComo podemos ver al ejecutar el comando nos devuelve un sha256. A continuación vamos a listar las imágenes docker:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntujgaitpro latest dcc56f2954c0 24 seconds ago 83.5MBAhora aparece nuestra imagen creada.
Lo siguiente que haremos será ejecutar un nuevo contenedor utilizando nuestra imagen recién creada.
$ docker run -it ubuntujgaitpro
root@f8e0d8494697:/# ls
bin boot dev etc home jgaitpro lib lib64 media mkdir mnt opt proc root run sbin srv sys tmp usr var
root@f8e0d8494697:/# cd jgaitpro
root@f8e0d8494697:/jgaitpro# ls
hola
root@f8e0d8494697:/jgaitpro#Como se puede apreciar los cambios que realizamos en la imagen original se encuentran en nuestra nueva imagen.
Ahora vamos a instalar un servidor web Apache 2 y vamos a crear una imagen nueva a partir de ese contenedor.
root@f8e0d8494697:/jgaitpro# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
...
Fetched 25.8 MB in 11s (2455 kB/s)
Reading package lists... DoneIngresamos el comando para instalar apache2:
root@f8e0d8494697:/jgaitpro# apt-get install apache2Una vez finalizada la instalación verificamos si el servicio de apache está corriendo, en caso de no ser así iniciamos el servidor.
root@f8e0d8494697:/jgaitpro# service apache2 status
* apache2 is not running
root@f8e0d8494697:/jgaitpro# service apache2 start
* Starting Apache httpd web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
*
root@f8e0d8494697:/jgaitpro# service apache2 status
* apache2 is runningAhora vamos a salir del contendor y vamos a crear una nueva imagen a partir de este contenedor, pero ahora utilizaremos unos comandos adicionales:
$ docker commit --change='CMD ["apache2ctl", "-D FOREGROUND"]' -c "EXPOSE 85" f8e0d8494697 apache2
sha256:25960fe9ebc1d538cc0b4f692b3d68809a79f9e3b82ce8c47decd78d0b353720Con el comando anterior creamos nuestra nueva imagen llamada apache2. Si listamos las imágenes debería aparecer al principio:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache2 latest 25960fe9ebc1 23 seconds ago 221MB
ubuntujgaitpro latest dcc56f2954c0 24 minutes ago 83.5MBA continuación crearemos un nuevo contenedor utilizando la imagen apache2.
$ docker run -d -p 5000:80 apache2
4f80c2c0c498e0015728eaef7109cb6081ed9b07d32dcdb054b2c303d3371324Dockerfile es la forma fácil de crear imágenes personalizadas por medio de un archivo con todos los "ingredientes" que tendrá nuestra imagen
FROM: Definir una imagen base para crear nuestra nueva imagen con Dockerfile
Ejemplo: FROM ubuntu:16.04
MANTAINER: Hace referencia al creador de la receta
Ejemplo: MAINTAINER JGAITPro [email protected]
RUN: Nos permite ejecutar comandos en la imagen base antes de ser creada
Ejemplo: RUN apt-get update && apt-get install apache2
ADD/COPY: Nos permite agregar o copiar archivos desde el equipo local a la imagen
Ejemplo: ADD index.html /var/www/html
EXPOSE: Nos permite exponer por defecto un puerto para el contenedor
Ejemplo: EXPOSE 8080
CMD: Ejecutar acción por defecto al crear el contenedor, es la finalidad
Ejemplo: CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
Vamos a crear una carpeta llamada miweb y dentro de esta un archivo llamado Dockerfile con el siguiente contenido:
FROM ubuntu:16.04
MAINTAINER ADM
RUN apt-get update
RUN apt-get -y install apache2
EXPOSE 81
CMD /usr/sbin/apache2ctl -D FOREGROUNDUna vez hecho esto vamos a realizar el build:
$ docker build -t miweb /Users/andres/Proyectos/miweb/Al ejecutar el build, podemos los pasos definidos en el archivo Dockerfile se ejecutan en orden, línea por línea. Una vez finalizado si listamos las imágenes aparecerá una nueva imagen llamada "miweb":
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
miweb latest 765a0072c312 2 minutes ago 254MBA continuación vamos a ejecutar un contenedor en modo desatendido (detached mode) a partir de la imagen "miweb":
$ docker run -d -p 85:80 miweb
2d1cc136f8b92b9b98dc4a66929dc8a4d0039f86905137044e52fdee7a0a3519Podemos verificar con el comando "docker ps" si efectivamente se está ejecutando el contenedor:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d1cc136f8b9 miweb "/bin/sh -c '/usr/sb…" About a minute ago Up About a minute 81/tcp, 0.0.0.0:85->80/tcp infallible_spencePodemos ver que efectivamente se está ejecutando el contenedor y esta utilizando el puerto 85 de la máquina anfitrión. Si abrimos un navegador web e ingresamos http://localhost:85/ veremos la página local de apache 2 que nos indica que esta ok.
Otro ejemplo de Dockerfile:
FROM ubuntu:16.04
MAINTAINER foo [email protected]
RUN apt-get update
RUN apt-get -y install apache2
RUN apt-get -y install wget
RUN apt-get -y install unzip
RUN wget https://github.com/BlackrockDigital/startbootstrap-freelancer/archive/master.zip
RUN unzip master.zip
RUN cp -a /startbootstrap-freelancer-master/* /var/www/html
EXPOSE 82
CMD /usr/sbin/apache2ctl -D FOREGROUND$ docker run --name mysql_qa -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysqlPara conectarse desde un cliente utilizar como host localhost / puerto 3306
Links: