Tabla de contenido
1.1 ¿Por qué utilizar la ventana acoplable?
1.5 Configurar el acelerador de imágenes Docker
2.1.Comandos relacionados con el servicio Docker
2.2.Comandos relacionados con la imagen de Docker
2.3.Comandos relacionados con el contenedor Docker
3. El volumen de datos del contenedor.
3.1 El concepto y función del volumen de datos.
3.2 Configurar el volumen de datos
4.Implementación de la aplicación Docker
4.1 Implementación de Docker MySQL
4.3.Tomcat de implementación de Docker
4.4.Implementación de Docker nginx
4.5.Docker implementa RabbitMQ
5.1 Principio de la imagen Docker
5.2 Creación de imágenes reflejadas
5.3 El concepto de dockerfile [pesado]
5.4 Palabras clave del archivo Docker
5.6 Cargue la imagen local en el almacén de imágenes remotas de Ali
6.1.Docker habilita el acceso remoto
6.2.Idea para instalar el complemento Docker
7. Orquestación del servicio Docker
7.2.Instalación y uso de Docker Compose
8. Necesita una interfaz gráfica
1. Conozca Docker primero
1.1 ¿Por qué utilizar la ventana acoplable?
Puedo empaquetar el proyecto y la configuración de la que depende el proyecto con el software --- [espejo] --- ejecutar el espejo directamente en el entorno de prueba. No hay necesidad de preocuparse por la imposibilidad de ejecutarlo debido a diferentes entornos.
1.2 Tecnología acoplable
Docker es un proyecto de código abierto en la nube basado en el lenguaje Go.
El objetivo principal de Docker es "compilar, enviar y ejecutar cualquier aplicación, en cualquier lugar", que es hacer que la aplicación del usuario (que puede ser una aplicación WEB o una aplicación de base de datos, etc.) y su entorno operativo puedan lograr "un espejo una vez, correr por todas partes".
La aparición de la tecnología de contenedores de Linux resuelve este problema y Docker se desarrolla sobre esta base. La aplicación se refleja y la imagen se convierte en una instancia que se ejecuta en el contenedor Docker, y el contenedor Docker es coherente en cualquier sistema operativo , lo que permite realizar múltiples plataformas y servidores. Solo necesita configurar el entorno una vez y puede implementarlo en otra máquina con un solo clic, lo que simplifica enormemente la operación.
aplicación acoplable
1.3 Instalar Docker
Docker puede ejecutarse en MAC, Windows, CentOS, UBUNTU y otros sistemas operativos.
Demostración: instale Docker en CentOS7
Título: Docker: desarrollo acelerado de aplicaciones en contenedores
Pasos a ejecutar en la máquina virtual:
# 1. Actualice el paquete yum a la última
actualización de yum
# 2. Instale el paquete de software requerido, yum-util proporciona la función yum-config-manager y los otros dos dependen del controlador de devicemapper
yum install -y yum-utils device- mapper-persistent -data lvm2
# 3. Establezca la fuente de yum: especifique el sitio web donde descarga el software de Docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce .repo
# 4. Instale Docker, presione y en la interfaz de entrada --- descargue e instale docker-ce [versión comunitaria] docker-ee [versión empresarial]
yum install -y docker-ce
# 5. Verifique la versión de Docker y verifique si la verificación es exitosa,
ventana acoplable - v
1.4.Arquitectura Docker
Una imagen de Docker (Imagen) es una plantilla de solo lectura. Las imágenes se pueden utilizar para crear contenedores Docker y una imagen puede crear muchos contenedores.
Contenedor (Contenedor): Docker utiliza un contenedor (Contenedor) para ejecutar una aplicación o un grupo de aplicaciones de forma independiente. Al igual que las clases y los objetos de instancia en Java, las imágenes son definiciones estáticas y los contenedores son entidades cuando se ejecutan imágenes . Los contenedores proporcionan un entorno operativo estándar y aislado para imágenes, que se pueden iniciar, iniciar, detener y eliminar. Cada contenedor es una plataforma aislada y segura
El almacén (Repositorio) es un lugar donde los archivos de imágenes se almacenan de forma centralizada.
Similar a
Almacén Maven, donde se almacenan varios paquetes de frascos;
almacén de github, donde se almacenan varios proyectos de git;
El registro oficial proporcionado por Docker se llama Docker Hub, donde se almacenan varias plantillas de imágenes.
Los almacenes se dividen en almacenes públicos (Públicos) y almacenes privados (Privados).
El repositorio público más grande es Docker Hub ( https://hub.docker.com/ ),
Se almacena una gran cantidad de imágenes para que los usuarios las descarguen. Los almacenes públicos nacionales incluyen Alibaba Cloud, NetEase Cloud, etc.
1.5 Configurar el acelerador de imágenes Docker
De forma predeterminada, la imagen de Docker se descargará desde Docker Hub ( https://hub.docker.com/ ) en el futuro, lo cual es demasiado lento. Generalmente, los aceleradores de espejo están configurados:
USTC: Acelerador de espejos de la Universidad de Ciencia y Tecnología de China ( https://docker.mirrors.ustc.edu.cn )
Alibaba Cloud-- NetEase Cloud--Tencent Cloud
Demostración: configuración de Mirror Accelerator en Alibaba Cloud
Ingrese al sitio web oficial de Alibaba Cloud
buscar
2.Comandos comunes de Docker
2.1.Comandos relacionados con el servicio Docker
- Detenga el servicio Docker: systemctl stop docker
- Inicie el servicio Docker: systemctl start docker
- Reinicie el servicio Docker: systemctl restart docker
- Inicie el servicio Docker: systemctl enable docker
2.2.Comandos relacionados con la imagen de Docker
1. Busque imágenes relevantes del almacén.
docker search 镜像名 例如: docker search mysql
2. Lleva la imagen al local.
docker pull 镜像名:版本号 ===如果没有跟版本号,那么它会拉取最新的latest
3. Verifique qué espejos están disponibles localmente
docker images
4. Eliminar la imagen especificada localmente.
docker rmi 镜像名:版本号 或镜像编号
5. Eliminar todos los espejos
docker rmi $(docker images -q) [慎用]
6. Comando de ayuda
docker --help [找到所有的docker命令] docker 命令 --help [命令的语法]
2.3.Comandos relacionados con el contenedor Docker
Ejecute el contenedor centos: e ingrese al contenedor
docker run -it --name=c1 centos:7 /bin/bash
- -i: ingresa al contenedor
- -t: plataforma interactiva === funciona casi con -i.
- --name: asigne un nombre al contenedor; si no usa --name, Docker asignará un nombre automáticamente.
- centos:7===nombre de la imagen: número de versión
- /bin/bash===proporciona una ventana de comando de shell
contenedor de salida
exit: ---会关闭容器 ctrl+q+p:--退出不会关闭容器
ver el contenedor actual
docker ps: 查看所有正在运行的容器 docker ps -a:查看所有的容器。 docker ps -aq: 查看所有容器的id
Crear un contenedor sin ingresar al contenedor
docker run -id --name=容器的名称 centos:7 /bin/bash
Ingrese el contenedor especificado: --- usar exit no cerrará el contenedor
docker exec 容器的id或者容器的名称 /bin/bash
apagar|iniciar|eliminar contenedor
docker stop 容器名|容器id docker start 容器名|容器id docker rm 容器名|容器id [只能删除停止的容器] docker rm -f 容器名|容器id [强制删除容器] docker rm -f $(docker ps -aq): 删除所有容器
Ver registros de contenedores
docker logs 容器id
3. El volumen de datos del contenedor.
3.1 El concepto y función del volumen de datos.
Pensamiento: después de eliminar el contenedor Dockers, ¿los datos generados en el contenedor siguen ahí?
Pensando: ¿Pueden los contenedores Docker y las máquinas externas intercambiar archivos directamente?
Pensamiento: los contenedores quieren interactuar con los datos
Para garantizar la confiabilidad de los datos del contenedor, es necesario montar un determinado directorio dentro del contenedor en un determinado directorio en el host.
Este directorio en el host es el volumen de datos.
concepto:
- Un volumen de datos es un directorio o archivo en el host.
- Cuando el directorio del contenedor y el directorio del volumen de datos están vinculados, la modificación de la otra parte se sincronizará inmediatamente
- Un volumen de datos se puede montar en varios contenedores al mismo tiempo.
- Un contenedor también se puede montar con múltiples volúmenes de datos.
efecto:
- Resuelva el problema de la persistencia de datos.
- Resolver el problema de la comunicación indirecta entre máquinas externas y contenedores.
- Resolver el intercambio de datos entre contenedores.
3.2 Configurar el volumen de datos
- Al crear un contenedor de inicio, use el parámetro -v para configurar el volumen de datos
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
Precauciones:
- El directorio debe ser una ruta absoluta.
- Si el directorio no existe, se creará automáticamente
- Se pueden montar múltiples volúmenes de datos.
ejemplo:
docker run -id --name=c2 -v /usr/app:/usr/ykq -v /usr/app2:/usr/ykq2 centos:7 /bin/bash
4.Implementación de la aplicación Docker
4.1 Implementación de Docker MySQL
Buscar espejo mysql
docker search mysql
Extraer imagen de MySQL
docker pull mysql:5.7
Crear un contenedor, establecer mapeo de puertos, mapeo de directorios
# 在/root目录下创建mysql目录用于存储mysql数据信息 mkdir ~/mysql cd ~/mysql
contenedor de versión completa de mysql
docker run -id \ -p 3307:3306 \ --name=c_mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
Descripción del parámetro :
- -p 3307:3306 : asigna el puerto 3306 del contenedor al puerto 3307 del host.
-v $PWD/conf:/etc/mysql/conf.d : monte conf/my.cnf en el directorio actual del host en /etc/mysql/my.cnf en el contenedor. directorio de configuración
-v $PWD/logs:/logs : monta el directorio de registros en el directorio actual del host en /logs del contenedor. directorio de registro
-v $PWD/data:/var/lib/mysql : monta el directorio de datos en el directorio actual del host en /var/lib/mysql del contenedor. directorio de datos
-e MYSQL_ROOT_PASSWORD=123456: inicializa la contraseña del usuario root.
4.2.Docker implementa Redis
(1) Extraiga la imagen de Redis
docker pull redis:6.0.20
(2) Ejecute la imagen de Redis
docker run -id --name=redis6 -p 6380:6379 redis:6.0.20 -p: 端口映射 容器内部的端口和宿主机之间的映射。
(3) Utilice una máquina externa para conectarse a redis
Si se elimina el contenedor de Redis --- ¿Hay algún dato en él? --- Si quiero modificar el contenido de configuración de Redis.
Persistencia
1. Especifique el archivo de configuración al iniciar el contenedor redis
- Cree un directorio /app/redis y coloque redis.conf en este directorio
- Cree un directorio /app/redis/data --- almacene datos persistentes de redis
mkdir -p /app/redis/data
- ejecutar contenedor redis
docker run -id --name=redis6 -v /app/redis/redis.conf:/usr/redis/redis.conf -v /app/redis/data:/usr/redis/data -p 6379:6379 redis:6.0.20 redis-server /usr/redis/redis.conf
Cada contenedor equivale a una máquina virtual
4.3.Tomcat de implementación de Docker
Buscar espejo de Tomcat
docker search tomcat
Extrae la imagen de Tomcat
docker pull tomcat
Crear un contenedor, establecer mapeo de puertos, mapeo de directorios
# 在/root目录下创建tomcat目录用于存储tomcat数据信息 mkdir ~/tomcat cd ~/tomcat
ejecutar contenedor Tomcat
docker run -id --name=tomcat -p 8080:8080 镜像名
Ingrese tomcat y modifique
puerto de acceso --éxito
4.4.Implementación de Docker nginx
Buscar espejo nginx
docker search nginx
Tira del espejo nginx
docker pull nginx
Crear un contenedor, establecer mapeo de puertos, mapeo de directorios
# 在/root目录下创建nginx目录用于存储nginx数据信息 mkdir ~/nginx cd ~/nginx mkdir conf cd conf # 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容 vim nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
docker run -id --name=c_nginx \ -p 80:80 \ -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \ -v $PWD/logs:/var/log/nginx \ -v $PWD/html:/usr/share/nginx/html \ nginx
Descripción de parámetros:
-p 80:80 : asigna el puerto 80 del contenedor al puerto 80 del host.
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf : monte /conf/nginx.conf en el directorio actual del host en: /etc/nginx/nginx.conf en el contenedor. directorio de configuración
-v $PWD/logs:/var/log/nginx : monte el directorio de registros en el directorio actual del host en /var/log/nginx del contenedor. directorio de registro
4.5.Docker implementa RabbitMQ
Buscar la imagen de Rabbitmq
docker search rabbitmq
Extrae la imagen de RabbitMQ
docker pull rabbitmq
Ejecute conejomq:
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5673:5672 rabbitmq
Al
docker ps -a
ver la identificación del contenedor mq implementado, ejecutardocker exec -it 容器id /bin/bash
dentro del contenedor ingresando
:rabbitmq-plugins enable rabbitmq_management
Ahora puede acceder a la interfaz web visitando http://linuxip:15672. El nombre de usuario y la contraseña aquí son invitados de forma predeterminada.
Ingrese el comando: salir para salir del directorio del contenedor.
5. Espejo personalizado
Las imágenes reflejadas necesarias para el contenido explicado anteriormente se extraen del almacén remoto. ¿También podemos convertir el proyecto que escribimos en una imagen reflejada? DE ACUERDO. Requiere un espejo personalizado
5.1 Principio de la imagen Docker
pensar:
¿Cuál es la esencia de una imagen Docker? --- Es un archivo Dockerfile [escriba uno por uno para obtener comandos]
¿Por qué una imagen de CentOS en Docker solo tiene 200MB, pero cuántos G tiene el archivo ISO de un sistema operativo CentOS?
¿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 10 MB?
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, bootfs es básicamente el mismo, pero rootfs es diferente, como ubuntu, centos, etc.
La imagen de Docker está superpuesta por un sistema de archivos especial.
La parte inferior son bootfs y usa los bootfs del host;
La segunda capa es el sistema de archivos raíz rootfs, llamado imagen base: imagen base
Luego puedes superponer otros archivos espejo encima
La tecnología Unified File System (Union File System) puede integrar diferentes capas en un sistema de archivos, proporcionando una perspectiva unificada para estas capas, ocultando así la existencia de múltiples capas. Desde el punto de vista del usuario, solo hay un sistema de archivos.
Se puede colocar un espejo encima de otro espejo. La imagen siguiente se denomina imagen principal y la imagen inferior se convierte en la imagen base.
Al iniciar un contenedor desde una imagen, Docker monta un sistema de archivos de lectura y escritura en la parte superior como contenedor.
Resumir:
5.2 Producción de imágenes especulares
Imagen personalizada: se proporcionan dos métodos:
- La primera: según el envase a realizar
- El segundo: atravesar el archivo dockerfile.
El primer tipo de contenedor se convierte en un espejo: solo se puede crear un nuevo espejo en un contenedor espejo existente ----- comprenda
Pasos: cree la imagen existente --- ejecútela como un contenedor --- modifique el contenido en el contenedor ---> conviértala en un espejo --- comprima el archivo de imagen ---> dáselo a otros --- convertirlo en una imagen local
Manifestación:
- Docker commit ID del contenedor nombre de la imagen: número de versión [convertir el contenedor especificado en una imagen]
- docker save -o nombre de archivo comprimido nombre de imagen: número de versión [comprimir la imagen especificada en un archivo comprimido]
- docker load -i nombre del archivo comprimido [convertir el archivo comprimido en una imagen local]
5.3 El concepto de dockerfile [pesado]
Dockerfile es un texto --- cualquier imagen se crea a través de dockerfile
El archivo contiene una línea de instrucciones.
Cada instrucción construye una capa, basada en la imagen base, y finalmente construye una nueva imagen.
Para desarrolladores: puede proporcionar un entorno de desarrollo completamente consistente para el equipo de desarrollo.
Para evaluadores: puede tomar directamente la imagen creada durante el desarrollo o crear una nueva imagen a través del archivo Dockerfile para comenzar a trabajar.
Para el personal de operación y mantenimiento: durante la implementación, se puede lograr una perfecta portabilidad multiplataforma de las aplicaciones.
5.4 Palabras clave del archivo Docker
5.5 Caso Dockerfile
Caso 1
Crear y editar el archivo Docker
duplicación de componentes
docker build -f centos_dockerfile -t aaa_centos:v1.0
- -f: indica el archivo dockerfile
- -t: número de versión del nombre de la imagen
- .: debe agregarse
crear contenedor
docker run -it --name=c1 aaa_centos:v1.0 /bin/bash
Caso 2
Prepare el paquete jar springboot y transfiéralo al directorio raíz del host
Cree el archivo springboot_dockerfile y edítelo
FROM openjdk:8 MAINTAINER wqg ADD springboot-docker01-0.0.1-SNAPSHOT.jar docker01.jar EXPOSE 8080 CMD java -jar docker01.jar
Haz un espejo según springboot_dockerfile
docker build -f ./springboot_dockerfile -t springboot:v1.0 .
Iniciar y hacer mapeo de puertos
docker run -id --name=s2 -p 8080:8080 springboot:v1.0
acceso exitoso
Imagen a archivo comprimido
docker save -o springboot.tar springboot:v1.0
Caso 3
Requisito: la imagen de Centos7 tiene vim+ifconfig+jdk8
jdk_centos
FROM centos:7 MAINTAINER wqg WORKDIR /usr/local #安装vim编辑器 RUN yum -y install vim #安装ifconfig命令查看网络IP RUN yum -y install net-tools #创建目录 RUN mkdir -p /usr/local/java #ADD 把宿主机中的压缩文件放入到/usr/local/java 并会自动解压 ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/ #配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_161 ENV PATH $JAVA_HOME/bin:$PATH CMD echo "success--------------ok" CMD /bin/bash
5.6 Cargue la imagen local en el almacén de imágenes remotas de Ali
Ali nube:
- Como desarrollo: necesitamos convertir nuestro proyecto en un espejo a través de dockerfile; subirlo al almacén remoto [hub.docker o almacén espejo de Alibaba Cloud].
- Como operación y mantenimiento: descargue la imagen del almacén remoto --- ejecute el contenedor a través de la imagen. Implementar el proyecto.
- Uso: Almacén espejo en la nube de Alibaba
Extraiga la imagen del Registro
correr tras tirar
docker run -id --name=ccc -p 8089:8080 [镜像版本id]
6.Idea asociada con Docker
6.1.Docker habilita el acceso remoto
#修改该Docker服务文件 vi /lib/systemd/system/docker.service #修改ExecStart这行 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
6.2.Idea para instalar el complemento Docker
7. Orquestación del servicio Docker
7.1 Descripción general
- Docker sugiere que solo ejecutemos un servicio en cada contenedor, porque el contenedor Docker en sí consume muy pocos recursos, por lo que es mejor separar cada servicio por separado, pero luego nos enfrentamos a otro problema.
- Si necesito implementar varios servicios al mismo tiempo, ¿tengo que escribir un Dockerfile para cada servicio por separado y luego crear un espejo y un contenedor? Esto es agotador, por lo que Docker nos proporciona oficialmente una herramienta para Docker-compose multi. -despliegue de servicios.
- Compose permite a los usuarios definir un conjunto de contenedores de aplicaciones asociados como un proyecto a través de un archivo de plantilla docker-compose.yml separado [usted escribe] (formato YAML).
- Es fácil definir una aplicación de contenedores múltiples con un archivo de configuración y luego usar un comando para instalar todas las dependencias de la aplicación para completar la compilación. Docker-Compose resuelve el problema de cómo gestionar la orquestación entre contenedores.
7.2.Instalación y uso de Docker Compose
1. Instale Docker Compose
# 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
2. Desinstale Docker Compose [elija según sea necesario]
# 二进制包方式安装的,删除二进制文件即可 rm /usr/local/bin/docker-compose
3. Utilice Docker Compose para organizar el proyecto Springboot+redis+mysql
pasos de composición de Docker
- Escriba Dockerfile para definir cada aplicación de microservicio y cree el archivo de imagen correspondiente
- Utilice docker-compose.yml para definir una unidad de negocio completa y organizar cada servicio de contenedor en la aplicación general.
- Finalmente, ejecute el comando docker-compose up para iniciar y ejecutar la aplicación completa para completar la implementación con un solo clic y conectarse.
1. Cree un directorio Docker-Compose (este artículo no se ha creado aquí y todavía se encuentra en el directorio /root/dockerfile)
mkdir ~/docker-compose cd ~/docker-compose
2. Proyecto Springboot del paquete
3. Escribe el archivo Docker
# 基础镜像使用java FROM openjdk:8 # 作者 MAINTAINER qy165 # 将jar包添加到容器中并更名为zzyy_docker.jar ADD springboot-redis-cache-0.0.1-SNAPSHOT.jar qy165.jar EXPOSE 8080 CMD java -jar qy165.jar
4. Crea una imagen reflejada
docker build -f Dockerfile -t qy165:v1.0
Orquestación de servicios:
Escribe el archivo docker-compose.yml
version: "3" services: microService: image: qy165:v1.0 #镜像名 container_name: qy165 #容器名 ports: #端口映射 - "8080:8080" volumes: #数据卷 - /app/microService:/data networks: #网络(network=aaa_net) - aaa_net depends_on: #依赖服务名 - redis - mysql redis: image: redis:6.0.20 ports: - "6379:6379" volumes: - /app/redis/redis.conf:/etc/redis/redis.conf - /app/redis/data:/data networks: - aaa_net command: redis-server /etc/redis/redis.conf mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 'root' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'qy165' ports: - "3306:3306" volumes: - /app/mysql/db:/var/lib/mysql - /app/mysql/conf/my.cnf:/etc/my.cnf - /app/mysql/init:/docker-entrypoint-initdb.d networks: - aaa_net command: --default-authentication-plugin=mysql_native_password #解决外部无法访问 networks: #等价于 docker network create aaa_net aaa_net:
docker rm -f $(docker ps -aq)
Utilice docker-compose para iniciar el contenedor en el directorio ~/docker-compose
docker-compose up
8. Necesita una interfaz gráfica
implementar
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
acceso
http://192.168.223.147:9000/