Introducción al concepto de Docker

Tabla de contenido

  1. ¿Qué es Docker?

  2. ¿Cuáles son los escenarios de aplicación de Docker?

  3. ¿Cuáles son las ventajas de Docker?

  4. ¿Cuál es la diferencia entre Docker y una máquina virtual?

  5. ¿Cuáles son los tres núcleos de Docker?

  6. ¿Cómo instalar Docker rápidamente?

  7. ¿Cómo modificar la ubicación de almacenamiento de Docker?

  8. ¿Cuáles son los métodos de gestión comunes para las imágenes de Docker?

  9. ¿Cómo crear un contenedor Docker?

  10. ¿Cuál es el proceso de ejecución estándar de Docker en segundo plano?

  11. ¿Cuáles son los modos de red Docker?

  12. ¿Qué son los volúmenes de datos de Docker?

  13. Cómo construir un almacén privado Docker

  14. ¿Cómo migra Docker las copias de seguridad?

  15. ¿Cómo implementar MySQL con Docker?

Prefacio

Este artículo resume los problemas y trampas comunes de Docker y los comparte con todos en forma de preguntas y respuestas.

1. ¿Qué es Docker?

  • Docker es un motor contenedor de aplicaciones de código abierto, desarrollado en base al lenguaje Go y siguió el protocolo Apache2.0 y es de código abierto.

  • Docker es una herramienta de código abierto para ejecutar aplicaciones en contenedores de Linux. Es una "máquina virtual" liviana

  • La tecnología de contenedores de Docker facilita la creación de un contenedor liviano, portátil y autosuficiente para cualquier aplicación en un solo host.

También puedes utilizar esta vívida metáfora:

El logotipo de Docker está diseñado como una ballena azul que arrastra muchos contenedores. La ballena puede verse como una máquina anfitriona y los contenedores pueden entenderse como contenedores mutuamente aislados. Cada contenedor contiene su propia aplicación.

2. ¿Cuáles son los escenarios de aplicación de Docker?

  • Empaquetado y publicación automatizados de aplicaciones web.

  • Pruebas automatizadas e integración y lanzamiento continuos.

  • Implemente y ajuste bases de datos u otras aplicaciones de back-end en entornos basados ​​en servicios.

  • Cree su propio entorno PaaS compilando desde cero o ampliando una plataforma OpenShift o Cloud Foundry existente.

Aquí me centraré en el escenario de Docker como entorno de desarrollo interno.

Antes de la aparición de la tecnología de contenedores, las empresas solían proporcionar a cada desarrollador una o más máquinas virtuales para que sirvieran como entornos de desarrollo y prueba. El entorno de desarrollo y prueba generalmente tiene poca carga y una gran cantidad de recursos del sistema se desperdician en el proceso de la propia máquina virtual.

Los contenedores Docker no tienen ninguna sobrecarga adicional de CPU y memoria, y son muy adecuados para proporcionar el entorno de pruebas y desarrollo interno de una empresa. Y como las imágenes de Docker se pueden compartir fácilmente dentro de la empresa, esto también es de gran ayuda para la estandarización del entorno de desarrollo.

Si desea utilizar el contenedor como máquina de desarrollo, debe resolver los problemas del inicio de sesión remoto en el contenedor y la gestión de procesos dentro del contenedor. Aunque Docker se diseñó originalmente para una arquitectura de "microservicio", según nuestra experiencia real, es factible ejecutar múltiples programas dentro de Docker, incluso sshd o upstart.

3. ¿Cuáles son las ventajas de Docker?

La contenedorización se está volviendo cada vez más popular y los contenedores de Docker se resumen a continuación:

  • Flexible: incluso las aplicaciones más complejas se pueden contener.

  • Ligero: los contenedores utilizan y comparten el kernel del host.

  • Intercambiable: las actualizaciones y mejoras se pueden implementar al instante.

  • Portátil: puede construirse localmente, implementarse en la nube y ejecutarse en cualquier lugar.

  • Escalable: las copias de contenedores se pueden agregar y distribuir automáticamente.

  • Apilable: los servicios se pueden apilar verticalmente y al instante.

imagen

Docker es una plataforma abierta para desarrollar, entregar y ejecutar aplicaciones. Docker le permite separar las aplicaciones de la infraestructura para que pueda entregar software rápidamente. Con Docker, puede administrar su infraestructura de la misma manera que administra sus aplicaciones. Al aprovechar el enfoque de Docker para entregar, probar e implementar código rápidamente, puede reducir significativamente el retraso entre la escritura del código y su ejecución en producción.

4. ¿Cuál es la diferencia entre Docker y una máquina virtual?

Al agregar una capa de hipervisor (capa intermedia de virtualización) a la máquina virtual, se virtualiza el hardware virtual, como tarjetas de red, memoria y CPU, y luego se construyen máquinas virtuales sobre ellas. Cada máquina virtual tiene su propio núcleo del sistema. El contenedor Docker utiliza aislamiento (namesapce) para aislar sistemas de archivos, procesos, dispositivos, redes y otros recursos, y luego controla permisos, recursos de CPU, etc. (cgroup), para que los contenedores no se afecten entre sí y no puedan afectar al host. máquina.

En comparación con las máquinas virtuales, los contenedores consumen menos recursos. Bajo el mismo host, la cantidad de contenedores que se pueden crear es mayor que la de máquinas virtuales.

Sin embargo, la seguridad de las máquinas virtuales es ligeramente mejor que la de los contenedores, y los contenedores acoplables comparten recursos como el kernel y el sistema de archivos con el host, y es más probable que tengan un impacto en otros contenedores y hosts.

imagen

5. ¿Cuáles son los tres núcleos de Docker?

espejo

La imagen de Docker es la base para la creación de contenedores, es similar a una instantánea de una máquina virtual y puede entenderse como una plantilla de solo lectura para el motor de contenedor Docker.

Inicie un contenedor a través de una imagen. Una imagen es un paquete ejecutable que incluye todo lo necesario para ejecutar una aplicación, incluido código, tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración.

La imagen de Docker también es un paquete comprimido, pero este paquete comprimido no es solo un archivo ejecutable y un script de implementación del entorno, sino que también contiene un sistema operativo completo. Debido a que la mayoría de las imágenes se crean en función de un determinado sistema operativo, es fácil crear los mismos entornos locales y remotos, lo que también es la esencia de las imágenes Docker.

envase

Los contenedores Docker son instancias en ejecución creadas a partir de imágenes que se pueden iniciar, detener y eliminar. Cada contenedor creado está aislado entre sí y es invisible entre sí para garantizar la seguridad de la plataforma. Se puede considerar un contenedor como una versión simplificada del entorno Linux (incluidos los permisos de usuario raíz, el espacio espejo, el espacio de usuario, el espacio de red, etc.) y las aplicaciones que se ejecutan en él.

almacén

A menudo hay varios almacenes almacenados en el servidor de registro del almacén. Cada almacén contiene varias imágenes y cada imagen tiene una etiqueta diferente.

Los almacenes se dividen en dos modalidades: almacén público (Público) y almacén privado (Privado).

El repositorio público más grande es Docker Hub: https://hub.docker.com, que almacena una gran cantidad de imágenes para que los usuarios las descarguen.

Los almacenes públicos nacionales incluyen Alibaba Cloud, NetEase Cloud, etc.

6. ¿Cómo instalar Docker rápidamente?

Ejecute el siguiente comando de instalación para instalar paquetes dependientes

yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager–add-repohttps://download.docker.com/linux/centos/docker-ce.repo[root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io[root@centos7 ~]# docker ps --查看docker

imagen

​​​​​​​
[root@centos7 ~]# systemctl enable docker[root@centos7 ~]# systemctl start docker[root@centos7 ~]# systemctl status docker[root@centos7 ~]# docker ps --查看容器[root@centos7 ~]# docker version --查看版本[root@centos7 ~]# docker info --查看版本

7. ¿Cómo modificar la ubicación de almacenamiento de Docker?

De forma predeterminada, la ubicación de almacenamiento de Docker es: /var/lib/docker

Puede ver la ubicación específica mediante el comando: docker info | grep "Docker Root Dir"

Modificar a otros directorios

Primero detenga el servicio Docker:

systemctl stop docker

Luego mueva todo el directorio /var/lib/docker a la ruta de destino.

mkdir -p /root/data/dockermv /var/lib/docker /root/data/dockerln -s /root/data/docker /var/lib/docker --快捷方式

8. ¿Cuáles son los métodos de gestión habituales para las imágenes de Docker?

Recuperar imágenes rápidamente

Formato: palabra clave de búsqueda de Docker

Obtener la imagen

Formato: nombre del almacén de Docker Pull [: etiqueta] Si no especifica una etiqueta al descargar la imagen, la última versión de la imagen en el almacén se descargará de forma predeterminada, es decir, la etiqueta se selecciona como la última etiqueta.

Ver información de la imagen

Una vez descargada la imagen, se almacena en /var/lib/docker de forma predeterminada.

  • REPOSITORIO: El repositorio al que pertenece la imagen.

  • TAG: Información de etiqueta de imagen, marcando diferentes imágenes en el mismo almacén

  • ID DE IMAGEN: El número de identificación único de la imagen, identifica de forma única una imagen.

  • CREADO: hora de creación de la imagen

  • TAMAÑO: Tamaño de la imagen

imagen

Obtener detalles de la imagen

Formato: Docker inspecciona el número de identificación de la imagen

No es necesario ingresar el número de identificación de la imagen completo.

imagen

Agregar una nueva etiqueta a la imagen local

Formato: etiqueta acoplable Nombre: [etiqueta]

Eliminar Imagen

Formato 1: nombre del almacén de Docker rmi: etiqueta

Cuando una imagen tiene varias etiquetas, solo se elimina la etiqueta especificada.

Formato 2: ID de imagen de Docker rmi [-f]

Si un contenedor ya utiliza la imagen, el enfoque correcto es eliminar primero todos los contenedores que dependen de la imagen y luego eliminar la imagen.

Guarde la imagen como un archivo local

Formato: docker save -o almacenamiento nombre del archivo imagen almacenada

[root@localhost ~]# docker save -o /opt/nginx.tar nginx:latest#将本地镜像传给另一台主机[root@localhost ~]# scp /opt/nginx.tar 192.168.1.54:/opt

9. ¿Cómo crear un contenedor Docker? ​​​​​​​

#docker images   --镜像docker run -d --name centos7.8 -h centos7.8 \-p 220:22 -p 3387:3389 \--privileged=true \centos:7.8.2003 /usr/sbin/init
#我想拥有一个 linux 8.2 的环境docker run -d --name centos8.2 -h centos8.2 \-p 230:22 -p 3386:3389 \--privileged=true \daocloud.io/library/centos:8.2.2004 init
# 进入容器docker exec -it centos7.8bashdocker exec -it centos8.2 bashcat /etc/redhat-release    --查看系统版本

10. ¿Cuál es el proceso de ejecución estándar de Docker en segundo plano?

Cuando se utiliza Docker Run para crear un contenedor, el proceso de ejecución estándar de Docker en segundo plano es:

  • Compruebe si la imagen especificada existe localmente. Cuando la imagen no exista, se descargará del repositorio público;

  • Cree e inicie un contenedor usando la imagen;

  • Asigne un sistema de archivos al contenedor y monte una capa de lectura y escritura fuera de la capa de imagen de solo lectura;

  • Puentear una interfaz de máquina virtual al contenedor desde la interfaz puente configurada en el host;

  • Asigne una dirección IP en un grupo de direcciones al contenedor;

  • Ejecute la aplicación especificada por el usuario. Una vez completada la ejecución, el contenedor finaliza.

11. ¿Cuáles son los modos de red Docker?

modo anfitrión

modo de host: especificado usando --net=host

Equivalente al modo puente en VMware, está en la misma red que el host, pero no tiene una dirección IP independiente

Docker utiliza la tecnología de espacio de nombres de Linux para el aislamiento de recursos, como el proceso de aislamiento del espacio de nombres PID, el sistema de archivos de aislamiento Mount Namespace, la red de aislamiento del espacio de nombres de red, etc.

Un Network Namespace proporciona un entorno de red independiente, que incluye tarjetas de red, enrutamiento, reglas de iptable, etc., que están aislados de otros Network Namespaces.

A un contenedor Docker generalmente se le asigna un espacio de nombres de red independiente

Pero si utiliza el modo de host al iniciar el contenedor, el contenedor no obtendrá un espacio de nombres de red independiente, sino que compartirá un espacio de nombres de red con el host. El contenedor no virtualizará su propia tarjeta de red, no configurará su propia IP, etc., sino que utilizará la IP y el puerto del host. En este momento, el contenedor ya no tiene una pila de red aislada e independiente. No poseer todos los recursos portuarios

imagen

modo contenedor

Modo contenedor: use –net=contatiner:NAME_or_ID para especificar

Este modo especifica que el contenedor recién creado comparte un espacio de nombres de red con un contenedor existente, en lugar de compartirlo con el host. El contenedor recién creado no creará su propia tarjeta de red ni configurará su propia IP, sino que compartirá la IP, el rango de puertos, etc. con un contenedor específico.  Los recursos de red se pueden ahorrar hasta cierto punto y el contenedor aún no tiene todos los puertos en su interior.

De manera similar, además de la red, los dos contenedores también están aislados en otros aspectos como sistemas de archivos, listas de procesos, etc.

Los procesos de los dos contenedores pueden comunicarse a través del dispositivo de tarjeta de red lo.

imagen

ninguno modo

modo ninguno: utilice --net=none para especificar

Al utilizar el modo Ninguno, el contenedor Docker tiene su propio espacio de nombres de red, pero no se realiza ninguna configuración de red para el contenedor Docker. En otras palabras, este contenedor Docker no tiene tarjeta de red, IP, enrutamiento y otra información.

En este modo de red, el contenedor solo tiene la red de bucle invertido y ninguna otra tarjeta de red.

Este tipo no se puede conectar a Internet, pero una red cerrada puede garantizar la seguridad del contenedor.

El contenedor será completamente independiente de la red y los usuarios podrán agregar tarjetas de red al contenedor según sea necesario. Este modo posee todos los puertos. (El modo Ninguno de red configura la red) Esto solo se usa en circunstancias especiales y generalmente no se usa.

Modo Puente

Equivalente al modo nat en VMware, el contenedor utiliza un espacio de nombres de red independiente y está conectado a la tarjeta de red virtual docker0. Comuníquese con el host a través del puente docker0 y la configuración de la tabla nat iptables. Este modo asigna espacio de nombres de red, establece IP, etc. a cada contenedor y conecta un contenedor Docker en el host a un puente virtual.

Cuando se inicia el proceso Docker, se creará un puente virtual llamado docker0 en el host y el contenedor Docker iniciado en este host se conectará a este puente virtual. Un puente virtual funciona de manera similar a un conmutador físico, de modo que todos los contenedores del host están conectados a una red de Capa 2 a través del conmutador.

Asigne una IP de la subred docker0 al contenedor y configure la dirección IP de docker0 como la puerta de enlace predeterminada del contenedor. Cree un par de tarjetas de red virtuales y dispositivos emparejados en el host. Los dispositivos Veth siempre aparecen en pares. Forman un canal de datos. Los datos que ingresan desde un dispositivo saldrán del otro. Por lo tanto, los cinco dispositivos se utilizan a menudo para conectar dos dispositivos de red.

Docker coloca un extremo del dispositivo del par veth en el contenedor recién creado y lo nombra eth0 (la tarjeta de red del contenedor), y el otro extremo en el host, lo nombra con un nombre similar como veth* y agrega este dispositivo de red al red docker0 En el puente. Puede verlo a través del comando brctl show.

Se accede a los contenedores a través de cinco pares.

Cuando se usa docker run -p, Docker en realidad crea reglas DNAT en iptables para implementar la función de reenvío de puertos.

Puede usar iptables -t nat -vnL para verlo.

imagen

12.¿Qué es un volumen de datos de Docker?

Un volumen de datos es un directorio especial utilizado por los contenedores y se encuentra dentro del contenedor. El directorio del host se puede montar en el volumen de datos. Las modificaciones en el volumen de datos son visibles inmediatamente y los datos actualizados no afectarán al espejo, lo que permite la migración de datos entre el host y el contenedor. El uso de volúmenes de datos es similar a la operación de montaje de directorios en Linux.

Si necesita compartir algunos datos entre contenedores, la forma más sencilla es utilizar un contenedor de volumen de datos. El contenedor de volúmenes de datos es un contenedor normal que proporciona específicamente volúmenes de datos para que otros contenedores los monten y utilicen.

La interconexión de contenedores consiste en establecer un túnel de comunicación de red dedicado entre contenedores a través del nombre del contenedor. En pocas palabras, se establecerá un túnel entre el contenedor de origen y el contenedor de recepción, y el contenedor de recepción podrá ver la información especificada por el contenedor de origen.

13. Cómo construir un almacén privado Docker

1. Extraiga la imagen del almacén privado.

[root@jeames ~]# docker pull registryUsing default tag: latest

2. Inicie el contenedor del almacén privado

docker run -di --name registry -p 5000:5000 registrydocker update --restart=always registry   --开机自启动docker ps -a  --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"

Visite la URL: http://192.168.1.54:5000/v2/_catalog

3. Establecer confianza

[root@jeames ~]# vi /etc/docker/daemon.json{
   
   "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],"insecure-registries":["192.168.1.54:5000"]}
[root@jeames ~]# systemctl restart docker   --重启docker

4. Sube una imagen local

[root@jeames ~]# docker images[root@jeames ~]# docker tag postgres:11 192.168.1.54:5000/postgres
[root@jeames ~]# docker push 192.168.1.54:5000/postgres

5. Vuelve a tirar de la imagen.

[root@jeames ~]# docker rmi 192.168.1.54:5000/postgres[root@jeames ~]# docker images[root@jeames ~]# docker pull 192.168.1.54:5000/postgres

14.¿Cómo migra Docker las copias de seguridad?

1. Guarde el contenedor como imagen.

[root@jeames ~]# docker images[root@jeames ~]# docker ps -adocker ps -a --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"[root@jeames ~]# docker commit redis myredis##使用新的镜像创建容器docker run -di --name myredis myredis

2. Copia de seguridad espejo

[root@jeames ~]# docker save -o myredis.tar myredis

De forma predeterminada, se coloca en el directorio actual.

[root@jeames ~]# ll[root@jeames ~]# pwd

3. Proceso de recuperación

##删除容器docker ps --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"docker stop myredisdocker rm myredis##删除镜像docker imagesdocker rmi myredis[root@jeames ~]# docker load -i myredis.tar

15. ¿Cómo implementa Docker MySQL?

1. Descarga la imagen
https://hub.docker.com/ 中搜索mysql[root@jeames ~]# docker pull mysql:5.7.30[root@jeames ~]# docker pull mysql:8.0.20
2. Instalación e implementación

2.1 Crear contenedor

mkdir -p /usr/local/mysql5730/mkdir -p /usr/local/mysql8020/
docker run -d --name mysql5730 -h mysql5730 \-p 3309:3306 \-v /usr/local/mysql5730/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:5.7.30
docker run -d --name mysql8020 -h mysql8020 \-p 3310:3306 \-v /usr/local/mysql8020/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:8.0.20

2.2 Acceder a MySQL

##登陆容器docker exec -it mysql5730 bashmysql -uroot -prootmysql> select user,host from mysql.user
##远程访问mysql -uroot -proot -h192.168.59.220 -P3309

Supongo que te gusta

Origin blog.csdn.net/lanwilliam/article/details/132880764
Recomendado
Clasificación