¡Como tú que amas la programación!
Aprenda los cursos prácticos de SpringBoot https://edu.csdn.net/course/detail/31433
Aprenda los cursos de introducción a SpringCloud https://edu.csdn.net/course/detail/31451
Visión general
Este artículo presentará la instalación y el uso básico de Docker, y cómo implementar proyectos SpringBoot en Docker.
1. Por qué utilizar Docker
El desarrollador Xiao Ming vio el error enviado por la prueba y dijo: El programa funciona bien en mi máquina, ¿cómo es que no estás trabajando?
Cuando el rey de las pruebas vio el informe del problema enviado por Xiao Liu desde el departamento de operación y mantenimiento, dijo: El programa está bien probado aquí, ¿cómo puede no funcionar del lado del cliente?
Esta es en realidad la rutina diaria del desarrollo de software Uno de los problemas más problemáticos en el desarrollo de software es la configuración del entorno.
Un proyecto necesita el soporte de una gran cantidad de programas para ejecutarse, incluidos: jdk, tomcat, mysql, redis, nginx, etc. La configuración del entorno de cada programa puede ser diferente, lo que puede llevar fácilmente a: se puede ejecutar en su máquina, no puede funcionar en su máquina.
¿Cómo resolver este problema?
1.1 Containerización
La respuesta es: contenerización
La contenerización significa empaquetar el programa en un contenedor y luego copiar el contenedor cuando sea necesario, de modo que la configuración del entorno del programa en el contenedor pueda mantenerse consistente, lo que fundamentalmente resuelve el problema de la configuración del entorno inconsistente.
1.2 Máquinas virtuales y contenedores
Al pensar en la contenedorización, algunos estudiantes pueden pensar en la máquina virtual que usamos antes. Después de clonar la máquina virtual, la configuración del entorno de software en el interior también es la misma.
Arquitectura de contenedor y máquina virtual
Puede ver que la mayor diferencia entre una máquina virtual y un contenedor es:
Hay un sistema operativo adicional en la máquina virtual, y el contenedor y el host comparten el sistema operativo, que es más ligero.
Comparación de contenedores y máquinas virtuales
característica | envase | máquina virtual |
---|---|---|
Hora de inicio | Segundo nivel | Nivel de minutos |
Uso del disco duro | Generalmente MB | Generalmente GB |
actuación | Cerca de nativo | Más débil que el nativo |
Soporte del sistema | Una sola máquina admite miles de contenedores | Por lo general, docenas |
Los contenedores tienen ventajas sobre las máquinas virtuales en términos de ocupación de recursos y rendimiento, y las máquinas virtuales son más fuertes que los contenedores en términos de funciones del sistema y seguridad.
2. Introducción a Docker
2.1 ¿Qué es Docker?
Docker es un motor de contenedor de aplicaciones de código abierto que permite a los desarrolladores empaquetar sus aplicaciones y paquetes dependientes en un contenedor portátil y luego publicarlo en cualquier máquina Linux popular. También se puede virtualizar. El contenedor está completamente aislado. Mecanismo, habrá sin interfaces entre sí.
Docker es muy similar al sistema operativo de los contenedores. Los contenedores son contenedores. Dentro están los programas que necesitamos. Estos contenedores están aislados entre sí. Cuando se necesitan, se transportan desde cargueros, ensamblados por trabajadores portuarios en autos y trenes, y luego se envía a las ubicaciones de cada proyecto.
2.2 Arquitectura de Docker
Conceptos importantes:
- Host (servidor que ejecuta Docker)
- Daemon daemon (ejecuta operaciones de Docker en segundo plano)
- Registro de servicio de Registry Warehouse (servidor remoto, guardar una gran cantidad de almacenes)
- Repositorio (la ubicación donde se guarda el archivo de imagen)
- Imagen (Guardar proceso o archivo de software)
- Contenedor (proceso después de que se ejecuta la imagen)
Docker adopta el modo C / S (modo cliente / servidor), las operaciones principales son build (build), pull (pull), run (run), si los usuarios necesitan usar mysql, se conectarán al host a través del cliente, y el guardia en el host El proceso extraerá mysql del registro de servicio remoto, lo guardará en el archivo de imagen en el host y luego creará la imagen mysql. La imagen completa puede crear un contenedor mysql, y el contenedor mysql en ejecución puede proporcionar servicios a los usuarios.
3. Instale Docker
1. Elimina la versión anterior de Docker.
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2. Instalar paquetes dependientes
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3. Instalar Docker
yum install docker
4. Inicie la ventana acoplable
systemctl enable docker
systemctl start docker
5. Ver los resultados de la instalación
docker version
6. Configurar la duplicación
Acelere la descarga de la imagen, cree o modifique el archivo /etc/docker/daemon.json y modifíquelo al siguiente formulario
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
7. Reiniciar
systemctl restart docker
4. Uso básico de Docker
Comandos comunes de Docker
docker images 查看镜像
docker search 镜像名称 搜索镜像
docker ps 查看容器
docker stop 容器id 停止容器
docker rm 容器id 删除容器
docker rmi 镜像id 删除镜像
docker run 镜像id 运行镜像
docker pull 镜像名 拉取镜像
docker build 镜像名 . 创建镜像
1) Coge el almacén
docker pull library/hello-world
2) Mira el espejo
docker images
4) Ejecuta el espejo
docker run hello-world
5. Docker instala MySQL
1) Instalar MySQL
docker pull mysql:5.7
2) Ejecute el espejo MySQL
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql镜像ID
El puerto detrás de -p es el puerto local, que se asigna al puerto 3306 de MySQL en la ventana acoplable, y la contraseña de root se establece más tarde
-d se está ejecutando en segundo plano
3) Ver el ID del contenedor
docker ps
4) Cargue el script de la base de datos en Linux y luego copie el script en el directorio raíz de Docker
docker cp bookdb.sql 21db7dd6618e:\root
5) Ingrese al contenedor docker
docker exec -it 21db7dd6618e bash
6) Ingrese a MySQL
mysql -uroot -p123456
7) Establecer codificación, crear base de datos
set names utf8;
create database bookdb;
use bookdb;
8) Importar script sql
source /root/bookdb.sql;
9) Modifique los permisos de acceso remoto:
select host,user,plugin,authentication_string from mysql.user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
- Salir de mysql y docker
exit
6. Implementar el proyecto Springboot en Docker
1) Modificar el archivo pom
Primero agregue el nombre de la imagen de Docker en el archivo pom.xml del proyecto springboot:
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
Agregue el complemento de compilación de Docker en el complemento:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
2) Crea un Dockerfile
FROM java:8
VOLUME /tmp
COPY jar文件名 app.jar
RUN bash -c "touch /app.jar"
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "--server.port=8080", "> /log/app.log"]
Explicación del contenido:
FROM java:8是获取到远程仓库的jdk1.8镜像。
VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。
将项目的jar文件复制为app.jar添加到容器
RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。
EXPOSE 容器暴露端口
ENTRYPOINT 应用启动命令 参数设定
3) Cree una carpeta docker, mueva el paquete jar y Dockerfile a esta carpeta, ingrese la carpeta y ejecute el comando:
docker build -t 镜像名称 .
4) Mira el espejo
docker images
5) Ejecuta el espejo
docker run --rm -p 8080:8080 --link mysql容器ID:localhost docker镜像名称或ID
--Rm significa que el contenedor se eliminará automáticamente
-p significa mapeo de puertos, el lado izquierdo de los dos puntos es el número de puerto fuera del contenedor de la ventana acoplable y el lado derecho es el número de puerto dentro del contenedor
-d significa que se ejecuta en segundo plano
--Link significa conectarse al contenedor mysql (si el proyecto no requiere una base de datos, puede eliminarlo), el lado izquierdo de los dos puntos es la identificación del contenedor mysql seguido del alias del contenedor, de modo que el localhost configurado en jdbcUrl se convertirá al contenedor docker de mysql
6) Resuelva el problema de que Docker no se puede conectar a Internet
Si aparece el siguiente mensaje después de iniciar el proyecto, significa que hay un problema con la red de Docker
Solución
vi /etc/sysctl.conf
Agregar reenvío ipv4
net.ipv4.ip_forward=1
Reiniciar la red
service network restart
Prueba a través del navegador después de reiniciar la imagen de Docker
7) Guarde la imagen en el almacén remoto.
Inicie sesión en Docker Hub, ingrese su cuenta y contraseña
docker login
Empuje la imagen a la ventana acoplable
docker push 镜像名称
Fin
Este artículo lo lleva a través de la introducción de Docker y la implementación de un proyecto simple. Si lo encuentra útil, dé su aprobación.
Si necesita aprender otros conocimientos de Java, haga clic aquí Conocimiento ultra detallado de Java Resumen