Docker de entrada a foso (1)

Introducción a Docker

Una simple introducción a Docker puede entenderse como un contenedor para la ejecución de aplicaciones. Sin embargo, la propia ventana acoplable y la máquina virtual todavía tienen diferencias obvias. Lo he resumido a grandes rasgos, que se puede resumir de la siguiente manera:

Docker en sí también tiene muchas ventajas, acerca de sus ventajas, que se pueden resumir en las siguientes:

Instalar Docker

A partir de marzo de 2017, Docker se dividió en dos versiones de rama sobre la base original: Docker CE y Docker EE.

Docker CE es la versión gratuita de la comunidad y Docker EE es la versión empresarial, que enfatiza la seguridad, pero requiere una tarifa.

Primero necesitamos eliminar la versión anterior de la ventana acoplable:

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

Entonces necesitamos instalar algunas herramientas del sistema necesarias:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

A continuación, debemos agregar la información de la fuente del software:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Actualizar caché de yum:

sudo yum makecache fast

Verificar el contenedor

Las operaciones anteriores son algunas operaciones de preparación. Si no hay ninguna anomalía durante los pasos, puede instalar Docker más tarde.

sudo yum -y install docker-ce

Una vez completada la instalación, inicie los pasos del servicio en segundo plano de la ventana acoplable:

sudo systemctl start docker

Cuando se descargue nuestra imagen de la ventana acoplable, habrá una imagen de helloworld para probar de forma predeterminada:

Prueba de funcionamiento hello-world

[root@runoob ~]# docker run hello-world

Dado que no hay una imagen de hello-world localmente, se descargará una imagen de hello-world y se ejecutará en el contenedor.

Acerca de la imagen de Docker y la introducción de contenedores

La esencia de un contenedor es un proceso: diferentes contenedores tienen su propio sistema de archivos raíz independiente, configuración de red y un espacio aislado. Una vez que el contenedor desaparece, los datos contenidos en él también se perderán. Toda la información de almacenamiento en el contenedor debe utilizar volúmenes de datos u otras formas. El ciclo de vida del volumen de datos es independiente del contenedor: el contenedor muere y el volumen de datos no morirá. Por lo tanto, después de que se usa el volumen de datos, los datos no se perderán después de que el contenedor se elimine o se vuelva a ejecutar.

La imagen de Docker es un sistema de archivos especial. Además de proporcionar los programas, bibliotecas, recursos, configuración y otros archivos requeridos por el tiempo de ejecución del contenedor, también contiene algunos parámetros de configuración preparados para el tiempo de ejecución (como volúmenes anónimos, variables de entorno, usuarios, etc.) ). La imagen no contiene datos dinámicos y su contenido no se modificará una vez que se haya creado.

docker instalar nginx

Después de la instalación inicial de Docker, comenzaremos a ingresar algunos enlaces de combate reales.

Primero, necesitamos extraer la imagen nginx relacionada en la ventana acoplable:

Al principio, el host no inició el contenedor de la ventana acoplable y es necesario iniciar el servicio de la ventana acoplable.

service docker start

Luego baja el espejo y empieza

docker run -d -p 80:80 --restart=always nginx:latest

Explicación del parámetro: -d inicio en segundo plano -p puerto 80 del host se asigna al puerto 80 del contenedor. Pruebe la página correspondiente, si tiene éxito, la siguiente figura:

 

A continuación, podemos mirar la etiqueta del espejo.

 

docker images

Este comando consulta solo el id de la imagen, pero no podemos ingresar al contenedor basado en el id de la imagen. Para ingresar al contenedor, se requiere el id del contenedor:

Entonces puede ver la identificación del contenedor con este comando:

docker ps

Luego ingrese al contenedor para modificar la información
. Existen muchos comandos para ingresar al contenedor, y se recomienda utilizar este tipo:

docker exec -it 999318c7d567 /bin/bash

Ingrese al contenedor seleccionando la etiqueta-id correspondiente. Después de ingresar al contenedor, encontrará que parece ser un nuevo sistema operativo Linux:

¿Cómo cerrar el contenedor Docker?

Es relativamente simple. No diré mucho aquí, lo puede entender por sí mismo.

docker kill 4591552a4185

Copia de archivo

Después de comprender el funcionamiento básico del contenedor de la ventana acoplable, probemos cómo cargar archivos en el contenedor de la ventana acoplable. Esto requiere el intercambio de archivos con el host.

Primero necesitamos obtener el nombre completo de la identificación del contenedor:

[root@localhost html]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
0d4173ecf31f        nginx:latest        "nginx -g 'daemon of…"   9 minutes ago       Up 9 minutes        0.0.0.0:80->80/tcp   sleepy_gould

[root@localhost html]# docker inspect -f '{
   
   {.Id}}' 0d4173ecf31f
0d4173ecf31f894e234ae9eb3d9eddd1b9d10b7af5c46608679fe11918af9644

Luego copie el archivo en el contenedor de la ventana acoplable:

[root@localhost html]# docker cp /opt/html/user_login.html 0d4173ecf31f894e234ae9eb3d9eddd1b9d10b7af5c46608679fe11918af9644:/root/user_login.html
[root@localhost html]#

La siguiente operación es relativamente simple, solo revise la página móvil:

root@0d4173ecf31f:/usr/share/nginx/html# ls
50x.html  index.html  user_login.html
root@0d4173ecf31f:/usr/share/nginx/html#

Los siguientes pasos son básicamente operaciones normales, ingrese nuestra configuración nginx:

root@0d4173ecf31f:/etc/nginx# vi nginx.conf 
bash: vi: command not found
root@0d4173ecf31f:/etc/nginx#

Descubrí que no hay un comando vi, es necesario descargarlo e instalarlo

Cuando se usa un contenedor de ventana acoplable, a veces vi no está instalado en el interior, y el indicador dice: vi: comando no encontrado cuando escribe el comando vi, necesita instalar vi en este momento, pero cuando escribe el comando apt-get install vi, le indica:

Reading package lists... Done  
Building dependency tree         
Reading state information... Done  
E: Unable to locate package vi

En este momento, debe escribir: apt-get update. La función de este comando es sincronizar los índices de las fuentes enumeradas en /etc/apt/sources.list y /etc/apt/sources.list.d, para que pueda obtener la última Paquete de software. Una vez completada la actualización, escriba el comando: apt-get install vi command.

Ahora que la ventana acoplable lo ha hecho y la duplicación de nginx está activada, puede modificar la configuración de nginx.

Instalar redis en la ventana acoplable

En primer lugar, las viejas reglas, tirar del espejo

[root@izwz9ic9ggky8kub9x1ptuz docker]# docker pull redis:4.0

Después de tirar del espejo, el contenido es el siguiente:

[root@izwz9ic9ggky8kub9x1ptuz docker]# docker pull redis:4.0
4.0: Pulling from library/redis
b8f262c62ec6: Pull complete 
93789b5343a5: Pull complete 
49cdbb315637: Pull complete 
e244975d5eb1: Pull complete 
25dca704d939: Pull complete 
db11ecc9cf34: Pull complete 
Digest: sha256:615b872e3af387206b62ffe66c1052f1653ed31b3afcfaa292a9244c92f2007a
Status: Downloaded newer image for redis:4.0
docker.io/library/redis:4.0

ok, la imagen básica está disponible, luego abra el contenedor directamente

Aquí hemos modificado el número de puerto de la máquina host a 8879, que es 6379 en el contenedor de mapeo.

[root@izwz9ic9ggky8kub9x1ptuz /]# 
docker run -p 8879:6379 
 -v $PWD/data:/data  
 -v $PWD/conf/redis.conf:/etc/redis/redis.conf  
 --privileged=true
 --name myredis 
 -d redis:4.0 redis-server /etc/redis/redis.conf

Explicación de parámetros

  • -p 8879: 8879: asigna el  puerto 8879 del contenedor al puerto 6379 del host

  • -v $ PWD / data: / data:  monta los datos en el directorio actual en el host al contenedor / data

  • redis-server —appendonly yes:  ejecute el comando de inicio de redis-server en el contenedor y abra la configuración de persistencia de redis

Después del inicio, todo comenzó a funcionar normalmente.

Ingrese al contenedor y comience a verificar si redis es normal:

Se recomienda crear un archivo de configuración de redis en el host al iniciar redis y asignarlo al contenedor; de lo contrario, el archivo de configuración de redis correspondiente no se puede encontrar en el contenedor, lo cual es muy doloroso.

Instalar MySQL en Docker

El contenido de esta parte es relativamente simple, simplemente baje la imagen reflejada:

docker run --name 【容器名】 -e MYSQL_ROOT_PASSWORD=【mysql密码】 -d -i -p 3309:3306 mysql:5.7.24

Luego espera un rato, finalmente nuestro contenedor MySQL está instalado:


El consumo de recursos de memoria del contenedor.Desde
que compré un servidor pequeño, la configuración relacionada es la siguiente, por lo que al asignar recursos a cada contenedor en ejecución, debemos considerar el recurso ocupado por cada contenedor docker.

En la actualidad, se han creado un contenedor mysql, un contenedor redis y un contenedor nginx. Si agrega una aplicación java, necesita al menos 500 m de memoria para admitir visualmente el contenedor java.

Al usar el comando docker stats para ver la memoria del servidor actual, debido a que la cantidad de visitas los días de semana no es alta, puede asignar recursos de memoria más pequeños al mysql y redis actuales:

En este momento, puede usar el comando de actualización de la ventana acoplable para administrar la asignación de tamaño de memoria:

docker update -m 350m  --memory-swap -1  mysqlserver

--memory-swap -1 El parámetro se refiere a no permitir que el contenedor intercambie memoria con el host. Si es necesario, se requieren ajustes adicionales. Después de
establecer el límite de memoria, el resultado es el siguiente:

Análisis de fallos de inicio del contenedor Docker combate real

Al configurar un nuevo contenedor acoplable, por ejemplo, para configurar ciertos atributos del archivo my.cnf para mysql, debe reiniciar el contenedor para que surta efecto. Pero a veces, debido a errores manuales, la configuración puede ser anormal y el reinicio del contenedor falla. ¿Qué debo hacer en este momento?

La forma más sencilla y grosera en este momento es armar primero el contenedor y luego reinstalarlo, pero esta operación es demasiado violenta, en caso de que haya otros datos importantes en el contenedor, no es aconsejable la operación directa.

De hecho, la ventana acoplable se instala esencialmente en la máquina host, por lo que los archivos de configuración correspondientes también pueden encontrar rastros en la máquina host. Aquí hay algunos remedios para mi error:

docker inspect [容器名称]

A través de este comando, puede ver la información de propiedad de configuración interna del contenedor:

En este momento, podemos ver una carpeta de directorio llamada MergedDir, ingresar al nivel superior de la carpeta,

 

 cd /var/lib/docker/overlay2/f4ab9eff7a18f20f977595af38f5eb273127e0de8845a42fe71fa9b8850a988b

Luego revisamos la estructura del directorio, encontraremos una carpeta llamada diff

Con curiosidad, paso a paso en la carpeta, encontrará el archivo mysql que se configuró previamente en el contenedor docker, volverá a modificar manualmente la configuración original y el contenedor se reiniciará con éxito.

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/bj_chengrong/article/details/103233652
Recomendado
Clasificación