Diferencia entre revisiones de «Usuario:ManuelRomero/docker»
De WikiEducator
(→Instrucciones) |
(→Crear un contenedor con volumenes a partir de una imagen) |
||
(22 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
+ | ===Acciones básicas=== | ||
+ | ;Arranca un terminal de contenedor nuevo para probar algo a partir de la imagen <nowiki>ubuntu:14.04</nowiki> | ||
+ | sudo docker run --name dwes_cordoba -ti ubuntu:14.04 | ||
+ | *Con esto ya tengo un contenedor creado, llamado dwes_cordoba para probar cosas | ||
+ | ;Una vez que cierre el contenedor lo puedo volver a abrir cuando quiera | ||
+ | <source lang=bash> | ||
+ | {22:56}~ ➭ sudo docker start dwes_cordoba | ||
+ | dwes_cordoba | ||
+ | {22:56}~ ➭ sudo docker exec -ti dwes_cordoba /bin/bash | ||
+ | root@496b9ba15066:/# | ||
+ | </source> | ||
+ | ;Modificando variables de entorno tipo PATH | ||
+ | acceder al fichero /etc/enviroment | ||
+ | |||
+ | |||
+ | ;Creando una imagen a partir de un fichero dockerfile ubicado en el directorio actual | ||
+ | sudo docker build -t iternova/web . | ||
+ | *Accion | ||
+ | Crea una imagen llamada iternova de tag web con el contenido del dockerfile que hay en el mismo directorio | ||
+ | *Restricciones | ||
+ | El nombre/tag no puede tener mayúsculas | ||
+ | ;Poniendo un volumen | ||
+ | El volumen se especifica para cada contenedor | ||
+ | sudo docker run --name iternova -v /var/www/iternova:/var/www -dti iternova/web | ||
+ | ;descripción | ||
+ | arranca un contenedor llamado '''''iternova''''' | ||
+ | creando un volumen '''''/var/www/iternova''''' en el contenedor con '''''/var/www''''' que está en el host | ||
+ | -dti (background terminal e interactivo) de una imagen llamada iternova | ||
+ | ;Arrancando acciones (servicios activos) en el contenedor | ||
+ | |||
===Qué es docker=== | ===Qué es docker=== | ||
<br/> | <br/> | ||
Línea 26: | Línea 56: | ||
==Crear un contenedor con volumenes a partir de una imagen== | ==Crear un contenedor con volumenes a partir de una imagen== | ||
sudo docker run -t -i --name iternova5 -v /home/manolo/iternova:/local iternova-nagios-centreon-git /bin/bash | sudo docker run -t -i --name iternova5 -v /home/manolo/iternova:/local iternova-nagios-centreon-git /bin/bash | ||
− | + | ===Ejecutar docker sin sudo=== | |
− | === | + | https://datafull.co/p/como-puedo-usar-docker-sin-sudo |
− | + | https://docs.docker.com/engine/security/security/ | |
− | + | ===DockerFile=== | |
− | + | {{DockerFile}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | {{ | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | }} | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
==Rehaciendo todo== | ==Rehaciendo todo== | ||
Línea 123: | Línea 86: | ||
*Ahora cargamos bash para interactuar con ese comando | *Ahora cargamos bash para interactuar con ese comando | ||
sudo docker exec -t -i nombreContenedor /bin/bash | sudo docker exec -t -i nombreContenedor /bin/bash | ||
+ | <source lang=bash>systemctl daemon-reload | ||
+ | </source> | ||
+ | |||
+ | ===Copiar ficheros a un contenedor=== | ||
+ | |||
+ | ===Tener un contenedor como servicio=== | ||
+ | *Supongo que tengo un contenedor llamado '''''laravel''''' (es un ejemplo) y quiero que se arranque como un servicio en ubuntu | ||
+ | *Ir al directorio donde se ubican los servicios | ||
+ | /etc/systemd/system/ | ||
+ | *En ese directorio creo un fichero llamado '''''laravel.service''''' | ||
+ | <source lang=bash> | ||
+ | [Unit] | ||
+ | Description=web Apache mysql and laravel container | ||
+ | After=docker.service | ||
+ | Wants=network-online.target docker.socket | ||
+ | Requires=docker.socket | ||
+ | |||
+ | [Service] | ||
+ | Restart=always | ||
+ | ExecStart=/usr/bin/docker start -a laravel | ||
+ | ExecStartPost=/usr/bin/docker exec laravel service mysql restart | ||
+ | ExecStartPost=/usr/bin/docker exec laravel service apache2 restart | ||
+ | ExecStop=/usr/bin/docker stop -t 10 web | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | |||
+ | </source> | ||
+ | *Si quiero que se arranque siempre cuando arranque el sistema | ||
+ | |||
+ | |||
+ | *Reiniciar systemctl | ||
+ | <source lang=bash> | ||
+ | |||
+ | systemctl daemon-reload | ||
+ | </source> | ||
===Referencias en la web=== | ===Referencias en la web=== | ||
− | https://docs.docker.com/userguide/ | + | *https://docs.docker.com/userguide/ |
+ | *https://www.youtube.com/playlist?list=PLfW3im2fiA7W9F4DbjmRDIZgAHsea20ON | ||
+ | *http://www.muylinux.com/2016/04/19/tutorial-docker | ||
+ | *https://github.com/brunocascio/docker-espanol (Muy bueno y práctico) |
Última revisión de 20:15 29 mar 2021
Acciones básicas
- Arranca un terminal de contenedor nuevo para probar algo a partir de la imagen ubuntu:14.04
sudo docker run --name dwes_cordoba -ti ubuntu:14.04
- Con esto ya tengo un contenedor creado, llamado dwes_cordoba para probar cosas
- Una vez que cierre el contenedor lo puedo volver a abrir cuando quiera
{22:56}~ ➭ sudo docker start dwes_cordoba dwes_cordoba {22:56}~ ➭ sudo docker exec -ti dwes_cordoba /bin/bash root@496b9ba15066:/#
- Modificando variables de entorno tipo PATH
acceder al fichero /etc/enviroment
- Creando una imagen a partir de un fichero dockerfile ubicado en el directorio actual
sudo docker build -t iternova/web .
- Accion
Crea una imagen llamada iternova de tag web con el contenido del dockerfile que hay en el mismo directorio
- Restricciones
El nombre/tag no puede tener mayúsculas
- Poniendo un volumen
El volumen se especifica para cada contenedor sudo docker run --name iternova -v /var/www/iternova:/var/www -dti iternova/web
- descripción
arranca un contenedor llamado iternova creando un volumen /var/www/iternova en el contenedor con /var/www que está en el host
-dti (background terminal e interactivo) de una imagen llamada iternova
- Arrancando acciones (servicios activos) en el contenedor
Qué es docker
Docker es un proyecto Open-Source que automtiza el despliegue de aplicaciones dentro de un container de software |
- No es una máquina virtual.
- Con docker se generan “containers” independientes para ejecutarse en una simple instancia de Linux, por lo que para tener diferentes configuraciones de entornos de desarrollo, no necestiamos tener diferentes máquinas virtuales. Un solo sistema operativo para n entornos o configuraciones diferentes de entornos de desarrollo basados en containers.
Ojo, qué no es docker
Qué si que hace docker
Instalando docker
- Instalando la última version de docker (acutalmente 1.9 (Versión estable)
wget -qO- https://get.docker.com/ | sh
- Visualizando la versión
root@ubuntu1404:~# docker -v Docker version 1.9.1, build a34a1d5
- Instalando versión más reciente (experimental)
- Añadiendo la clave pública/privada de docker
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
- Añadimos el repositorio de docker en nuestro source.list
root@ubuntu1404:~# sh -c "echo deb https://get.docker.com/ubuntu docker main >> /etc/apt/sources.list.d/docker.list"
Crear un contenedor con volumenes a partir de una imagen
sudo docker run -t -i --name iternova5 -v /home/manolo/iternova:/local iternova-nagios-centreon-git /bin/bash
Ejecutar docker sin sudo
https://datafull.co/p/como-puedo-usar-docker-sin-sudo https://docs.docker.com/engine/security/security/
DockerFile
Creando los contenedores
- Para crear un contenedor personalizado, debemos de partir de una imagen y agregarle las utilidades (servicios, programas, ...) que necesitemos
- Tenemos miles de imágenes ya creadas, seguramente con nuestras necesidades, es cuestión de buscarlas en docker io, vamos a comentar algunas:
- Ubuntu base
- Podemos usar ubuntu:latest, ubuntu:20.04 o una versión muy ligera de ubuntu llamada alpine https://hub.docker.com/_/alpine
Tip: Una imagen comprimida de Alpine está en torno a los 2 MB, mientras que una imagen comprimida de Ubuntu está entre 40 y 80 MB
- Servidor web
- Podemos usar httpd https://hub.docker.com/_/httpd
- Servidor de php
Dockerfile
- https://docs.docker.com/engine/reference/builder/
- Sacado de esta página
- Es un fichero de texto, que me permite crear una imagen a partir de otra, y añadir una serie de comandos para instalar a esa imagen, aplicaciones, servicios, librerías diversas con el objetivo de construirme una imagen para lanzar un contenedor personalizado a mis necesidades.
- Una vez creado el fichero, lo ejecutaremos y crearemos la imagen con el comando buld
- Si el fichero está en el directorio actual, lo ejecutaremos con el comando punto
- Para ejecutar la máquina ejecutamos
docker build .
- Estructura del fichero
# comentarios
INSTRUCCIONES argumentos
En un fichero dockerfile tendremos dos tipos de líneas
- comentarios (líneas que empiezan por #)
- Sentencias líneas que tiene una instrucción con una serie de argumentos para ejecutarlas
- Por se recomienda poner las instrucciones en mayúsculas
Instrucciones
- FROM
FROM <imagen> FROM <imagen>:<tag> FROM <imagen>@<digest>
- Es la primera instrucción
- Especifica la imagen base de la que parte la instalación que queremos hacer
- En esta página puedes encontrar imágenes base de las cuales partir (hay miles)
- En el FROM se puede especificar de forma opción el tag o digest (sirve para especificar la imagen, como por ejemplo la versión).
- Lo primero que tenemos que especificar es la imagen de la que partimos instruccion FROM
Ejemplo | |
;imagen en base a ubuntu 14.04 FROM ubuntu:14.04 ;imagen en base a debian FROM debian:stable
|
- MAINTAINER
MAINTAINER <name>
- Especifica el autor de la imagen y su correo
MAINTAINER Manuel Romero <ManuelRomeroMiguel@gmail.com>
- RUN
RUN <command> RUN ["ejecutable", "parametro1", "parametro2"]
- Ejecuta cualquier comando en la imagen que estamos usando. El resultado de la ejecución se puede tomar para el siguiente paso en el dockfile, por ejemplo si ejecuto la instalación de apache, en el siguiente comando puedo contar que apache ya está instalado
- Es un comando muy utilizado.
- Si usamos apt-get install especificaremos el flag -y para que no haga falta que sea interactivo y tome la decisión por defecto
- Añadimos a nuestro fichero las siguientes librerías
#Ahora empezamos a instalar todos los paquetes necesarios
Rehaciendo todo
- Creo un contenedor de debian
sudo docker run -i -t debian:jessie /bin/bash
- Instalo apache
apt-get update apt-get install apache2
- Información de docker
sudo docker info
- Hacer un commit, para fijar una imagen
sudo docker container_id nombre_imagen_creado
- Arrancar un contenedor a partir de un commit
Comandos para recordar
Ver los contenedores arrancadso
docker ps
Ver todos los contenedores del sistema
docker ps -a
Arrancar un contenedor parado
- Primero localizar su nombre o su id (docker ps -a)
sudo docker start nombreContenedor
- Ahora cargamos bash para interactuar con ese comando
sudo docker exec -t -i nombreContenedor /bin/bash
systemctl daemon-reload
Copiar ficheros a un contenedor
Tener un contenedor como servicio
- Supongo que tengo un contenedor llamado laravel (es un ejemplo) y quiero que se arranque como un servicio en ubuntu
- Ir al directorio donde se ubican los servicios
/etc/systemd/system/
- En ese directorio creo un fichero llamado laravel.service
[Unit] Description=web Apache mysql and laravel container After=docker.service Wants=network-online.target docker.socket Requires=docker.socket [Service] Restart=always ExecStart=/usr/bin/docker start -a laravel ExecStartPost=/usr/bin/docker exec laravel service mysql restart ExecStartPost=/usr/bin/docker exec laravel service apache2 restart ExecStop=/usr/bin/docker stop -t 10 web [Install] WantedBy=multi-user.target
- Si quiero que se arranque siempre cuando arranque el sistema
- Reiniciar systemctl
systemctl daemon-reload