Introducción a Docker: uso básico

Introducción a Docker: uso básico


.Docker Introducción

1.1 El primer libro de Docker

Seguí encontrando a Docker en el trabajo y hoy finalmente comencé a aprender. Me he encontrado con muchos problemas al seleccionar libros en el sistema para aprender Docker y la tecnología de virtualización, principalmente porque no hay libros particularmente clásicos. Docker's "First Edition Docker Book" y "Docker Technology Introduction and Practical Combat" generalmente no están altamente evaluados, mientras que "Docker Development Practice" y "Dockeru Source Code Analysis" se publicaron recientemente en 2015, y no hay muchas evaluaciones. Después de una revisión exhaustiva, finalmente elegí "Docker Development Practice". Los siguientes se utilizan principalmente como materiales de aprendizaje para este libro.

1.2 ¿Qué es Docker?

Hay una historia en "Docker Development Practice": en el envío antes de la década de 1960, todos los productos se colocaban juntos y se aplastaban y dañaban fácilmente. Al mismo tiempo, el transbordo entre diferentes modos de transporte también es muy problemático, como cuando se descargan mercancías de muelles y vagones de tren. La combinación de diferentes bienes y diferentes vehículos es una enorme matriz bidimensional. La industria naviera finalmente llegó a un acuerdo y formuló un contenedor estándar internacional para resolver este espinoso problema. Todas las mercancías se empaquetan en contenedores y se aíslan entre sí, y todos los vehículos se transportan a través de contenedores, lo que mejora enormemente la seguridad y la eficiencia del transporte.

A menudo nos encontramos con el mismo problema en el desarrollo de software. Aplicaciones que utilizan una variedad de marcos técnicos, desde sitios web estáticos de front-end hasta bases de datos de back-end , desde PHP a Java , y una variedad de entornos de implementación, desde servidores de prueba. A entornos en línea, desde máquinas virtuales hasta nubes públicas, etc. Docker es este contenedor y el logotipo de Docker es de hecho un contenedor.

1.3 Docker y contenedores y máquinas virtuales

Naturalmente nos preguntaremos, ¿cuál es la diferencia entre Docker y máquina virtual? Esta pregunta se puede dividir en dos partes. Debido a que Docker no es una tecnología completamente original, sino una tecnología de contenedores que existe desde hace mucho tiempo, entonces la primera pregunta es ¿la diferencia entre un contenedor y una máquina virtual? También pertenecientes a la tecnología de contenedores, los hermanos y hermanas de Docker también incluyen Solaris Zones, BSD jails, LXC, etc. Pero Docker está tan de moda ahora que, naturalmente, tiene su propia singularidad, por lo que la segunda pregunta es la diferencia entre Docker y otros contenedores.

La primera pregunta es relativamente simple: los contenedores son una tecnología de virtualización ligera. No tiene un conjunto completo de CPU, memoria y disco como una máquina virtual, y tiene autoridad absoluta sobre el sistema operativo . El contenedor y el host comparten el kernel, y todos los contenedores comparten el sistema operativo.Cientos de contenedores se pueden ejecutar en una sola máquina física. El segundo problema es un poco más problemático: en comparación con LXC, Docker abstrae la configuración para que el entorno de ejecución de la aplicación sea coherente en cualquier plataforma. Al mismo tiempo, proporciona instalaciones modernas y ecosistemas similares a Git , como control de versiones y alojamiento espejo .

En general, los escenarios de aplicación de Docker son:

  • Acelere el desarrollo local: cree rápidamente un entorno de desarrollo y un entorno operativo.
  • Empaquete e implemente aplicaciones automáticamente.
  • Cree un entorno Paas privado ligero.
  • Pruebas automatizadas e integración continua.
  • Crea una caja de arena de seguridad.

2. Instalación de Docker y problemas de 32 bits

2.1 Instalar Docker

Docker tiene dos requisitos para el entorno Linux , uno es un sistema de 64 bits y el otro es un kernel superior a 3.8. Y estoy usando la versión de 32 bits de Linux Mint 17, así que descargué el paquete de código fuente para compilar e instalar. Cuando Zheng Chou no pudo encontrar la información de compilación e instalación, fue genial descubrir que la biblioteca de software de Ubuntu proporciona una versión compilada de Docker de 32 bits. Mire mi kernel versión 3.13, que también cumple con los requisitos, así que lo instalé directamente con apt.

cdai@dell ~ $ uname -a
Linux dell 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i686 GNU/Linux

cdai@dell ~ $ apt-cache search docker
docker.io - Linux container runtime
kdocker - lets you dock any application into the system tray
vim-syntax-docker - Docker container engine - Vim highlighting syntax files

cdai@dell ~ $ sudo apt-get install docker.io
cdai@dell ~ $ docker -v
Docker version 1.0.1, build 990021a
 
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.2 Imagen de la versión de 32 bits

Aunque se puede usar Docker, las imágenes en el Docker Hub oficial están todas preparadas para sistemas de 64 bits. Después de descargar estas imágenes, al crear e iniciar el contenedor, se informará un error "no se permite la operación de finalización de las capacidades de eliminación de espacio de nombres". Entonces, podemos usar el Dockerfile oficial para crear una versión de 32 bits de la imagen antes de que pueda usarse en un sistema de 32 bits. (Consulte la sección 3.4 para obtener una explicación específica de la construcción de la imagen)

Tome la construcción de una versión de Ubuntu de 32 bits como ejemplo, simplemente ejecute el script de Shell provisto en el GitHub oficial . Después de una larga espera, podemos ver que la imagen de Ubuntu de 32 bits se ha instalado con éxito localmente y que el script oficial es bastante confiable.

cdai ~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
32bit/ubuntu        14.04               c062cc00654e        About a minute ago   295.3 MB
 
  
  
  • 1

Nota: Hice una solución aquí para aprender e investigar Docker en mi libro anterior. Por supuesto, debe usar Docker en una máquina de 64 bits en aplicaciones reales.


3. Empezando

3.1 Conceptos básicos

Antes de comenzar a usar Docker, primero debe comprender los conceptos de Docker y la relación entre ellos; de lo contrario, puede confundirse al comenzar. Los tres conceptos más importantes de Docker son: imagen, contenedor y biblioteca.

  • Imagen: es un archivo de solo lectura que contiene la aplicación y su entorno dependiente del tiempo de ejecución.
  • Contenedor: Es una plantilla para la construcción de contenedores, a través de una imagen espejo podemos construir muchos contenedores independientes con el mismo entorno operativo.
  • Repositorio: Docker proporciona Hub para almacenar imágenes públicas o privadas y también permite que terceros compilen.


El siguiente es un flujo de trabajo típico de Docker. A partir de esta imagen, se puede comprender claramente la relación entre estos tres conceptos importantes. A continuación, en esta sección, presentaremos operaciones comunes una por una de acuerdo con este flujo de trabajo.




3.2 Espejo de búsqueda y descarga

Primero use el docker search [keyword]comando para verificar qué imágenes están disponibles para descargar en Docker Hub. Después de buscar, puede usar comodines para representar palabras clave:

cdai ~ $ docker search ubuntu
NOMBRE DESCRIPCIÓN ESTRELLAS OFICIAL AUTOMATIZADO
ubuntu Ubuntu es un sistema operativo Linux basado en Debian ...   2179       [OK]      
ubuntu-upstart Upstart es un reemplazo basado en eventos para ...   31         [OK]      
torusware / speedus- ubuntu Docker oficial Ubuntu siempre actualizado imag ...   25                    [OK]
tleyden5iwx / ubuntu-cuda Ubuntu 14.04 con controladores CUDA preinstalados    17                    [OK]
ubuntu-debootstrap debootstrap --variant = minbase --components ...   12         [OK]      
neurodebian NeuroDebian proporciona investigación en neurociencia ...   11         [OK]      
    ...


Luego use el docker pull [repository/url:tag]comando para descargar el espejo. Debido a que la descarga desde el Docker Hub oficial es muy lenta, aquí hay una descarga muy rápida desde el sitio espejo doméstico http://dockerpool.com/ . (Nota: hablaré sobre el uso del comando docker run para crear un contenedor más adelante. De hecho, si la imagen no existe, Docker la descargará automáticamente. Para aprender el comando pull, descargo la imagen manualmente)


    	1.cdai ~ $ docker pull dl.dockerpool.com:5000/ubuntu:14.04
	2.cdai ~ $ docker pull dl.dockerpool.com:5000/centos:latest


Una vez completada la descarga, puede utilizarla para docker imagescomprobar qué espejos están disponibles localmente. La columna REPOSITORIO aquí puede tener tres tipos:


  • [espacio de nombres / ubuntu]: cuando registra una cuenta en Docker Hub, el nombre de la cuenta se convierte automáticamente en su espacio de nombres, que se utiliza para distinguir las imágenes de diferentes usuarios.
  • [ubuntu]: este tipo de nombre de almacén se puede considerar como un espacio de nombres de nivel superior, este tipo de almacén solo se utiliza para la duplicación oficial.
  • [dl.dockerpool.com:5000/ubuntu]: la ruta URL indica que la imagen se coloca en un Hub creado por un tercero.

cdai ~ $ docker images
REPOSITORY                      TAG             IMAGE ID         CREATED          VIRTUAL SIZE
dl.dockerpool.com:5000/ubuntu   14.04           5506de2b643b     10 months ago      199.3 MB
dl.dockerpool.com:5000/centos   latest          87e5b6b3ccc1     11 months ago      224 MB


Si desea ver la información detallada del espejo, puede usar el docker inspect [image-id]comando para verlo. (Nota: como verá en la sección del contenedor a continuación, este comando también se puede utilizar para ver información detallada sobre el contenedor)


1. cdai ~ $ docker inspeccionar 5506de2b643b
2. [{ 3. "Arquitectura": "amd64", 4. "Autor": "", 5. "Comentario": "", 6. "Configuración": { 7. "AttachStderr": falso, 8. "AttachStdin": falso, 9. "AttachStdout": falso, 10. "Cmd": [ 11. "/ bin / bash" 12.], 13. ... 14.}, 15. "Contenedor": "201ae89099c20e577dd9c60cb9199c2dac0688d49efa676bf3eeb859666294bd", 16. "ContainerConfig": { 17. "AttachStderr": falso,


















21.},
22. "Creado": "2014-10-23T23: 53: 59.03271073Z",
23. "DockerVersion": "1.3.0",
24. "Id": "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
25 : "linux",
26. "Principal": "22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723",
27. "Tamaño": 0
28.}]


3.3 Crear un contenedor de inicio

Después de comprender el funcionamiento básico de la duplicación, podemos crear un contenedor. Primero use para docker createcrear el contenedor o use para docker run [repository:tag]crear y ejecutar el contenedor. Los contenedores se pueden dividir en dos tipos:

  • Contenedor interactivo : se ejecuta en primer plano y puede interactuar con el contenedor a través de la consola. Si la terminal que creó el contenedor está cerrada, el contenedor se detiene. Además, el contenedor también puede terminarse entrando en la salida o pasando docker stopo en la consola del contenedor docker kill.
  • Contenedor de tipo de fondo : se ejecuta en segundo plano y no tiene nada que ver con el terminal después de que se crea e inicia, y debe terminarse con docker stopo docker kill.

Nota: Debido a que mi antiguo portátil es de 32 bits, incluso si la imagen se instala desde un concentrador de terceros, todavía es inutilizable de 64 bits, por lo que los ejemplos aquí usan la imagen de Ubuntu de 32 bits construida manualmente en la primera sección.


Primero, intentemos crear y ejecutar un contenedor interactivo. Simplemente genere "Hola, Docker" en la consola del contenedor. que tal eso? Los contenedores Docker son muy livianos, ¡así que comience muy rápido! docker psPuede usar para ver el contenedor en ejecución y usar para docker ps -aver todos los contenedores, incluidos los que no están iniciados. (-L y -n = x pueden enumerar el último contenedor creado o x)


cdai ~ $ docker run -i -t 32 bit / ubuntu: 14.04 / bin / bash
root @ 328 aa6305d82: / # echo "¡Hola, Docker!"
¡Hola, Docker!
root @ 328 aa6305d82: / # exit
exit

cdai ~ $ docker ps -a
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO PUERTOS NOMBRES
328 aa6305d82


3.4 Hacer espejo de carga


Hay dos formas de crear un espejo local: usando el comando de confirmación y escribiendo un Dockerfile. Primero, introduzcamos estos dos métodos de producción por separado y luego aprendamos a cargar nuestras propias imágenes locales en Docker Hub.

3.4.1 Hacer un espejo con compromiso

Primero inicie el contenedor interactivo stupefied_curie que creamos anteriormente. Después de un inicio exitoso, encontraremos que no hemos ingresado a la consola del contenedor. En este momento, necesitamos usar un comando usado en un contenedor que no se ha introducido antes, el comando adjuntar, para ayudarnos a volver a ingresar a la consola de un contenedor iniciado. (Nota: después de que se ejecute el adjunto, la interfaz de la consola del contenedor aparecerá después de presionar Enter una vez. Y el contenedor de fondo no se puede adjuntar)

Luego de adjuntar, podemos operar en el contenedor, aquí instalamos una base de datos Sqlite y guardamos un archivo de texto, listo para hacer un contenedor espejo local. Pensé que todo iría bien, pero encontré el problema de no poder acceder a Internet en el contenedor, porque la relación predeterminada entre el contenedor y el host host está puenteada y es necesario configurar algunos DNS y otras configuraciones. La forma más fácil de verificarlo en línea es cambiar el modo de red para que el contenedor use la misma pila de red que el host. Aquí se recrea un contenedor interactivo y el modo de red usa el modo de host.



¡Ahora puede usar docker commit [container-id]comandos para convertir el contenedor preparado previamente en una imagen reflejada! (¿Por qué algunos comandos usan ID y otros usan nombre?) Después de la ejecución, podemos verificar que nuestro espejo se haya instalado en la biblioteca local. También se encontró un problema aquí, es decir, el contenedor creado en base a la imagen de 32 bits, y luego la imagen parece ser de 64 bits nuevamente, y el error "finalizar la operación de las capacidades de eliminación de espacio de nombres no permitida" se informará al inicio: (



3.4.2 Hacer un espejo con Dockerfile

Arriba, realizamos manualmente algunas operaciones en la consola del contenedor, y Dockerfile es un método de producción más transparente y repetible , porque no realizamos operaciones manualmente, sino que escribimos todas las operaciones en el Dockerfile usando los comandos y la sintaxis proporcionada por Docker. . Los nombres de los comandos están todos en mayúsculas. Los comandos de Dockerfile más utilizados son:

  • DE : especifique desde qué espejo principal se extenderá.
  • EJECUTAR : Ejecuta comandos para modificar la imagen. Por ejemplo, EJECUTE apt-get update y EJECUTE ["apt-get", "update"]. El primero ejecuta comandos en / bin / sh, y el segundo se ejecuta directamente usando la llamada al sistema exec.
  • EXPONER : Especifique el puerto abierto al exterior por el proceso en el contenedor. También puede usar el parámetro -p para abrir algunos puertos que no están listados en el Dockerfile cuando se inicia el contenedor.
  • AGREGAR : agregue el archivo de host, la carpeta o el recurso URL especificado al espejo.
  • ENV : establece la variable de entorno para la operación del contenedor.
  • USUARIO : especifique el usuario para ejecutar el contenedor y los comandos que siguen al Dockerfile.

Otros comandos incluyen: MAINTAINER declara la información del autor, WORKDIR especifica el directorio de trabajo (el último será el directorio de trabajo después de que se inicie el contenedor), los archivos de montaje VOLUME, CMD y ENTRYPOINT especifican los comandos que se ejecutarán después de que se inicie el contenedor, ONBUILD especifica algunos comandos en el espejo actual No se ejecutará durante la compilación, pero se activará cuando se cree la subduplicación.

Conociendo estos comandos de uso común, puede comenzar a escribir Dockerfile a continuación. Nota: El nombre del archivo Dockerfile se llama "Dockerfile" de forma predeterminada; de lo contrario, Docker no lo encontrará cuando se ejecute el comando de compilación. Después de escribir, la ejecución docker build .puede comenzar a compilarse, cada comando de Dockerfile es equivalente a construir una imagen temporal, el paso final generará la imagen de destino final.



3.4.3 Subir imagen al Hub

Primero docker loginingrese nuestra información de inicio de sesión en Docker Hub con el comando, y Docker la guardará en ~ / .dockercfg.



4. Adjunto: tecnología relacionada con Docker

  • Aislamiento de contenedores : use libcontainer en lugar de LXC como contenedor predeterminado. El aislamiento de procesos, redes, mensajes, sistemas de archivos y nombres de host se logra a través de los espacios de nombres pid, net, ipc, mnt y uts del kernel.
  • Asignación de recursos : controle la medición y asignación de recursos a través de cgroups.
  • Portabilidad : utilice AUFS para lograr actualizaciones rápidas de los contenedores. AUFS tiene el concepto de capas.Cada modificación es una modificación incremental en la capa de solo escritura existente, y el contenido modificado forma una nueva capa de archivo sin afectar la capa original.
  • Seguridad : la seguridad se garantiza mediante el aislamiento del espacio de nombres y la auditoría de cgroups, y una serie de herramientas como SELinux.



 
 


Supongo que te gusta

Origin blog.csdn.net/superiorpengFight/article/details/55253100
Recomendado
Clasificación