Introducción al principio de DockerFile DockerCompose duplicación de Docker serie 5

DockerFile

Principio del espejo

Que es espejo

Mirror es un paquete de software ligero, ejecutable e independiente que se utiliza para empaquetar el entorno operativo del software y el software desarrollado en función del entorno operativo. Contiene todo el contenido necesario para ejecutar un determinado software, incluido el código, el tiempo de ejecución, la biblioteca y el entorno. Variables y Archivos de configuración

Pensamiento

¿Cuál es la esencia de la duplicación de Docker?

¿Por qué una imagen centos en Docker solo tiene 200 MB y un archivo iso del sistema operativo centos requiere varios G?

¿Por qué una imagen de Tomcat en Docker tiene 500 MB, mientras que un paquete de instalación de Tomcat solo tiene más de 70 MB?
**
**

Componentes del sistema operativo

Subsistema de programación de procesos Subsistema de
comunicación de procesos Subsistema de
gestión de memoria Subsistema de gestión de
equipos Subsistema de
gestión de archivos Subsistema de
comunicación de red Subsistema de
control de trabajos

Subsistema de gestión de archivos

El sistema de archivos de Linux consta de dos partes: bootfs y rootfs

bootfs: contiene el cargador de arranque (cargador de arranque) y el kernel (kernel)

rootfs: sistema de archivos raíz, que contiene directorios y archivos estándar como / dev, / proc, / bin, / etc en un sistema Linux típico

Diferentes distribuciones de Linux, los bootfs son básicamente iguales, pero los rootfs son diferentes, como ubuntu, centos, etc.

Inserte la descripción de la imagen aquí

1) UnionFS (sistema de archivos de unión)

**
UnionFS (Union File System): el sistema de archivos Union es un sistema de archivos jerárquico, liviano y de alto rendimiento. Admite la modificación del sistema de archivos como un envío para superponer capa por capa y, al mismo tiempo, diferentes directorios Montado en el mismo sistema de archivos virtual, el sistema de archivos Union es la base de la imagen de Dokcer. Los espejos se pueden heredar a través de capas. Basado en el espejo básico (sin espejo principal), se pueden hacer varios espejos específicos.
Características: Cargue varios sistemas de archivos al mismo tiempo, pero desde el exterior, solo se puede ver un sistema de archivos. La carga conjunta cargará cada capa de sistemas de archivos, de modo que el sistema de archivos final contendrá todos los archivos y directorios subyacentes
**
**

2) Principio de carga de imágenes de Docker

**

La imagen de la ventana acoplable en realidad está compuesta por un sistema de archivos en capas, este sistema de archivos en capas UnionFS.
Incluye principalmente el gestor de arranque y el kernel. El gestor de arranque es principalmente el kernel del gestor de arranque. Cuando se inicia Linux, carga el sistema de archivos bootfs. La capa inferior de la imagen de Docker es bootfs. Esta capa es la misma que la de nuestro sistema Linux / Unix típico y contiene el núcleo del cargador de arranque. Cuando se carga el arranque, todo el kernel está en la memoria. En este momento, bootfs le ha otorgado el derecho de usar la memoria al kernel, y el sistema también descargará bootfs

Por lo general, los CentOS que instalamos en la máquina virtual son varios G, por qué Docker solo 200M aquí
**
Inserte la descripción de la imagen aquí

Para un sistema operativo optimizado, rootfs puede ser muy pequeño y solo necesita incluir los comandos, herramientas y bibliotecas más básicos, porque la capa inferior usa directamente el host y el kernel, y solo necesita proporcionar rootfs. Se puede ver que para diferentes distribuciones de Linux, bootfs es básicamente el mismo y rootfs será diferente, por lo que diferentes distribuciones pueden compartir bootfs.
**

3) Espejo en capas

**
Tome pull como ejemplo. Durante el proceso de descarga, podemos ver que la imagen de la ventana acoplable parece descargarse capa por capa.

Inserte la descripción de la imagen aquí

**

4) ¿Por qué la imagen de Docker adopta esta estructura en capas?

** La
mayor ventaja son los recursos compartidos. Por
ejemplo: si se crean varias imágenes a partir de la misma imagen base, el host solo necesita guardar una imagen base en el disco y, al mismo tiempo, debe cargar una imagen base. imagen en la memoria., Puede servir a todos los servidores. Y cada capa del espejo se puede compartir.
**

2. Características

** Las
imágenes de Docker son de solo lectura.
Cuando se inicia el contenedor, se carga una nueva capa de escritura en la parte superior de la imagen.
Esta capa se suele llamar "capa contenedora" y la "capa contenedora" se denomina "capa espejo".

5) comprensión profunda

Todas las imágenes de Docker comienzan desde una capa de imagen básica. Al modificar o agregar contenido nuevo, se creará una nueva capa de imagen sobre la capa de imagen actual. Para dar un ejemplo simple, si crea una nueva imagen basada en Ubuntu Linux 16.04, esta es la primera capa de la nueva imagen; si agrega un paquete de Python a la imagen, se creará una segunda capa de imagen en la parte superior de la base. capa de imagen; si continúa agregando un parche de seguridad, se creará una tercera capa de espejo. El espejo contiene actualmente 3 capas de espejo, como se muestra en la figura siguiente (este es solo un ejemplo muy simple de demostración).

Inserte la descripción de la imagen aquí

Al agregar capas de espejo adicionales, el espejo siempre sigue siendo una combinación de todos los espejos actuales, por lo que es muy importante entender esto. La siguiente figura muestra un ejemplo simple, cada capa de espejo contiene 3 archivos y el espejo contiene 6 archivos de dos capas de espejo.

Inserte la descripción de la imagen aquí

La capa de espejo en la imagen de arriba es ligeramente diferente de la imagen anterior, el propósito principal es facilitar la visualización de archivos. La siguiente figura muestra una imagen de tres capas un poco más complicada. Desde el exterior, toda la imagen tiene solo 6 archivos. Esto se debe a que el archivo 7 en la capa superior es una versión actualizada del archivo 5.

Inserte la descripción de la imagen aquí

En este caso, los archivos de la capa de espejo superior sobrescriben los archivos de la capa de espejo inferior. Esto permite que la versión actualizada del archivo se agregue al espejo como una nueva capa de espejo.

Docker usa el motor de almacenamiento (la nueva versión adopta el mecanismo de instantánea) para implementar la pila de capas de espejo y asegura que las múltiples capas de espejo se muestren externamente como un sistema de archivos unificado.

Los motores de almacenamiento disponibles en Linux son AUFS, Overlay2, Device Mapper, Btrfs y ZFS. Como su nombre lo indica, cada motor de almacenamiento se basa en el sistema de archivos correspondiente o la tecnología de dispositivo de bloque en Linux, y cada motor de almacenamiento tiene sus propias características de rendimiento únicas.

Docker solo admite windowsfilter como motor de almacenamiento en Windows, que implementa capas y CoW [1] basado en el sistema de archivos NTFS.

La siguiente figura muestra la misma duplicación de tres capas que la pantalla del sistema. Todas las capas de espejos se apilan y combinan para proporcionar una vista unificada del exterior.

Inserte la descripción de la imagen aquí

resumen

1. La imagen de Docker está superpuesta por un sistema de archivos especial.
2. La parte inferior es bootfs, y se usa bootfs del host.

3. La segunda capa es el sistema de archivos raíz rootfs, llamado imagen base.

4. Luego sube y puedes superponer otros archivos espejo

5. La tecnología Union File System puede integrar diferentes capas en un sistema de archivos, proporcionando una perspectiva unificada para estas capas, de modo que se oculta la existencia de múltiples capas.Desde el punto de vista del usuario, solo existe un sistema de archivos.

6. Un espejo se puede colocar encima de otro espejo. El espejo inferior se llama espejo principal y el espejo inferior se convierte en el espejo base.

7. Al iniciar un contenedor desde una imagen, Docker cargará un sistema de archivos de lectura y escritura en el nivel superior como contenedor.

Resuelve el problema del problema del pensamiento.

1. ¿Cuál es la esencia de la duplicación de Docker?

Es un sistema de archivos jerárquico

2. ¿Por qué una imagen centos en Docker solo tiene 200 MB, pero un archivo iso del sistema operativo centos requiere varios G?

El archivo de imagen iso de Centos contiene bootfs y rootfs, mientras que la imagen centos de Docker reutiliza los bootfs del sistema operativo, solo rootfs y otras capas espejo

3. ¿Por qué una imagen de Tomcat en Docker tiene 500 MB, mientras que un paquete de instalación de Tomcat solo tiene más de 70 MB?

Dado que la imagen en la ventana acoplable es jerárquica, aunque Tomcat solo tiene más de 70 MB, debe depender de la imagen principal y la imagen base. El tamaño de todas las imágenes de Tomcat expuestas es de más de 500 MB.

Inserte la descripción de la imagen aquí

Producción de espejos

1. Convierte el contenedor en un espejo

Función: Por ejemplo, creamos una nueva aplicación en Tomcat, pero queremos enviar la aplicación a los probadores para que la prueben. En este momento, podemos poner la aplicación en el contenedor y convertirla en una imagen reflejada, y luego enviarla a el probador para la prueba

docker commit 容器id 镜像名称:版本号
#镜像是不可以直接传输的
#所以可以将其压缩为压缩文件进行传输
docker save -o 压缩文件名称 镜像名称:版本号

docker load -i 压缩文件名称

Inserte la descripción de la imagen aquí

2.DockerFile

¿Qué es DockerFile?

1.Dockerfile es un archivo de texto

2. Contiene una instrucción

3. Cada instrucción crea una capa, basada en la imagen básica, finalmente crea una nueva imagen

4. Para desarrolladores: puede proporcionar un entorno de desarrollo completamente coherente para el equipo de desarrollo.

5. Para probadores: puede tomar directamente la imagen creada durante el desarrollo o crear una nueva imagen a través del archivo Dockerfile y comenzar a trabajar.

6. Para el personal de operación y mantenimiento: durante la implementación, se puede lograr una migración perfecta de las aplicaciones.

Sitio web de Dochub: https://hub.docker.com

Inserte la descripción de la imagen aquí

3.Palabra clave de DockerFile

Palabra clave efecto Observaciones
DESDE Especificar el espejo principal Especifica que el dockerfile se construye en base a esa imagen
MANTENIMIENTO Información del autor Se usa para indicar quién escribió este dockerfile
ETIQUETA etiqueta La etiqueta utilizada para indicar que el archivo docker puede usar Etiqueta en lugar de Maintainer, que se puede ver en la información básica de la imagen de la ventana acoplable.
CORRER Ejecutando una orden El formato predeterminado para ejecutar un comando es / bin / sh: comando RUN o RUN ["comando", "param1", "param2"]
CMD Comando de inicio de contenedor Proporcione el comando predeterminado al iniciar el contenedor y utilícelo con ENTRYPOINT. Formatee el comando CMD param1 param2 o CMD ["comando", "param1", "param2"]
PUNTO DE ENTRADA Entrada Generalmente utilizado en la producción de algunos contenedores que se cierran después de la ejecución.
COPIAR Copiar archivos Copie archivos a la imagen al construir
AGREGAR agregar archivos Agregar archivos a la imagen durante la compilación no se limita al contexto de compilación actual y puede derivarse de servicios remotos
ENV Variable ambiental Especifique las variables de entorno en el momento de la compilación. Puede pasar -e para anular el formato ENV nombre = valor cuando inicie el contenedor.
ARG Construir parámetros El parámetro de compilación solo se usa durante la compilación. Si hay ENV, el valor del mismo nombre de ENV siempre anula el parámetro de arg
VOLUMEN Definir volúmenes de datos externos que se pueden montar. Especifique los directorios de imágenes de compilación que se montarán en el sistema de archivos cuando se puedan iniciar. Al iniciar el contenedor, utilice el formato de enlace -v VOLUME ["directorio"]
EXPONER Puerto expuesto Defina el puerto que se supervisará cuando el contenedor se esté ejecutando. Inicie el contenedor usando -p para vincular el formato de puerto expuesto: EXPOSE 8080 o EXPOSE 8080 / udp
WORKDIR Lista de trabajo Especifique el directorio de trabajo dentro del contenedor, si no se crea, se creará automáticamente. Si especifica / usa una dirección absoluta, si no comienza con /, entonces es una ruta relativa a la ruta del directorio de trabajo anterior.
USUARIO Especificar el usuario de ejecución Especifique el usuario cuando el usuario está ejecutando RUN CMD ENTRYPONT al construir o comenzar
CHEQUEO DE SALUD Examen de salud El comando para especificar la supervisión de la salud del contenedor actual es básicamente inútil porque muchas veces la propia aplicación tiene un mecanismo de supervisión de la salud.
EN CONSTRUCCIÓN desencadenar Cuando la imagen con la palabra clave ONBUILD se usa como imagen básica, el comando ONBUILD se ejecutará después de que se complete la ejecución de FROM, pero no afecta la imagen actual y no es muy útil.
SEÑAL DE PARADA Envía un semáforo al anfitrión La instrucción STOPSIGNAL establece la señal de llamada al sistema que se enviará al contenedor para salir.
CÁSCARA Especificar el shell para ejecutar el script. Especifique el shell utilizado cuando RUN CMD ENTRYPOINT ejecuta el comando

4 ... Haz un espejo basado en Centos7

demanda

Espejo centos7 personalizado.
Afirmar:

  1. La ruta de acceso predeterminada es / usr

  2. Puedes usar vim

Pasos de implementación

1. Defina la imagen principal: FROM centos: 7

2. Defina la información del autor: MAINTAINER itheima [email protected]

3. Ejecute el comando de instalación vim: EJECUTE yum install -y vim

4. Defina el directorio de trabajo predeterminado: WORKDIR / usr

5. Defina el comando que ejecutará el contenedor: CMD / bin / bash

6. Genere la imagen a través de dockerfile: docker bulid -f ruta del archivo dockerfile -t nombre de la imagen: versión.

Ejemplo

Tenga en cuenta que hay un punto al final; de lo contrario, se informará un error

docker bulid –f centos_dockerfile –t pjhcentos:1  .

Manifestación

Cree un directorio docker-files en el directorio raíz

Inserte la descripción de la imagen aquí

Crea un contenido de archivo llamado centos_dockerfile

Inserte la descripción de la imagen aquí

Ingrese el comando para crear un espejo

Inserte la descripción de la imagen aquí

Creado con éxito
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Implementar el proyecto SpringBoot en el contenedor

demanda

Definir el dockerfile y publicar el proyecto springboot

Pasos de implementación

1. Defina la imagen principal: FROM java: 8

2. Defina la información del autor: MAINTAINER itheima [email protected]

3. Agregue el paquete jar al contenedor: ADD springboot.jar app.jar

4. Defina el comando para iniciar la ejecución del contenedor: CMD java – jar app.jar

5. Cree la imagen a través de dockerfile: docker bulid -f ruta de archivo dockerfile -t nombre de la imagen: versión

Manifestación

Crea un proyecto springboot
Inserte la descripción de la imagen aquí

Empaquételo como un paquete de frasco
Inserte la descripción de la imagen aquí

Subir al servidor
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Transfiera al directorio dockerfile correspondiente
Inserte la descripción de la imagen aquí

Agregue el paquete jar correspondiente al espejo correspondiente y luego
escriba el archivo de configuración de DockerFile correspondiente
Inserte la descripción de la imagen aquí

Crear imagen
Inserte la descripción de la imagen aquí

Crea el contenedor correspondiente
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Visita de prueba
Inserte la descripción de la imagen aquí

Orquestación de servicios

El sistema de aplicación de la arquitectura de microservicio generalmente contiene varios microservicios, y cada microservicio generalmente implementa varias instancias. Si cada microservicio debe iniciarse y detenerse manualmente, la carga de trabajo de mantenimiento será muy grande.

1. Para crear una imagen desde Dockerfile o para extraer una imagen de dockerhub
2. Para crear varios contenedores
3. Para administrar estos contenedores (iniciar, detener, eliminar)

concepto:

Administre contenedores en lotes de acuerdo con ciertas reglas comerciales

DockerCompose

Introducción al concepto

Docker Compose es una herramienta para orquestar la implementación distribuida de múltiples contenedores. Proporciona un conjunto de comandos para administrar el ciclo completo de desarrollo de aplicaciones en contenedores, incluida la construcción, el inicio y la detención del servicio. Use pasos: Use Dockerfile para definir la imagen del entorno operativo Use docker-compose.yml para definir los servicios que componen la aplicación Ejecute docker-compose up para iniciar la aplicación

Inserte la descripción de la imagen aquí

Instalación y uso de DockerCompose

1. Método de instalación

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2. Método de desinstalación

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

3. Utilice docker compose para organizar el proyecto nginx + springboot

1. Cree un directorio docker-compose

mkdir ~/docker-compose
cd ~/docker-compose

Inserte la descripción de la imagen aquí

2. Escribe el archivo docker-compose.yml

Tenga en cuenta que el nombre debe ser

docker-compose.yml
#版本号
version: '3'
services:
  nginx:
  #对应的nginx镜像名称
   image: nginx
   #容器与虚拟机的端口映射
   ports:
    - 80:80
    #当前的项目可以访问到对应的app项目于下面定义的app相联系
   links:
    - app
    #挂载数据卷,前面为宿主机目录后面为容器的目录
   volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d
  app:
  #对应应用的镜像名称
    image: app
    expose:
      - "8080"

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

3. Cree el directorio ./nginx/conf.d

mkdir -p ./nginx/conf.d

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

4. Escriba el archivo itheima.conf en el directorio ./nginx/conf.d

server {
    listen 80;
    access_log off;
    location / {
        proxy_pass http://app:8080;
    }
   
}

Inserte la descripción de la imagen aquí

5. Use docker-compose para iniciar el contenedor en el directorio ~ / docker-compose

docker-compose up

Inserte la descripción de la imagen aquí

6. Visita de prueba

http://192.168.149.135/hello

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/pjh88/article/details/114732026
Recomendado
Clasificación