Haga clic en la fuente azul de arriba y seleccione "Cuenta oficial de Star"
Artículos de alta calidad, entregados de inmediato
Siga la cuenta oficial detrás del escenario para responder al pago o al centro comercial para obtener información real del proyecto + video
Autor: jartto
Fuente: jartto.wang/2020/07/04/learn-docker/
En la Web
era rica , las aplicaciones se han vuelto más poderosas y al mismo tiempo cada vez más complejas. La implementación de clústeres, el entorno aislado, la liberación en escala de grises y la expansión dinámica son indispensables, y la contenedorización se ha convertido en un puente necesario en el medio.
En esta sección, exploraremos Docker
el mundo misterioso, dominaremos Docker
los principios básicos y las operaciones prácticas de cero a uno . Deje de proteger las tres cuartas partes de un acre en la parte delantera, es hora de expandir el territorio.
Nos centraremos en los siguientes puntos:
Contar una historia
Contenedor y máquina virtual
comprensión
Docker
Concepto clave
instalación
Docker
Inicio rápido
Operación de rutina
Mejores prácticas
1. Cuenta una historia
Para comprender mejor Docker
qué es, primero contamos una historia:
Necesito construir una casa, así que muevo piedras, corto leña, dibujo planos y construyo una casa. Después de una operación, finalmente se construyó la casa.
Como resultado, después de vivir un tiempo, quise mudarme a la playa por capricho. En este momento, según el método anterior, solo puedo ir a la playa, mover piedras, cortar leña, dibujar dibujos y volver a construir casas.
Cuando estaba preocupado, un mago vino a enseñarme una especie de magia. Este tipo de magia puede hacer una copia de la casa que construí, convertirla en un "espejo" y ponerla en mi mochila.
magia oscura
Cuando llego a la playa, uso este "espejo" para copiar una casa y mudarme con mis maletas.
¿No es asombroso? De acuerdo con nuestro proyecto, la casa es el proyecto en sí, el espejo es la copia del proyecto y la mochila es el almacén de espejos. Si desea ampliar la capacidad de forma dinámica, saque la imagen del proyecto del almacén y cópiela a su antojo. ¡Construye una vez, corre en cualquier lugar!
Ya no es necesario prestar atención a problemas como la versión, la compatibilidad, la implementación, etc., y resolver por completo la vergüenza de "fallar cuando está en línea, construcción sin fin".
Dos, máquinas virtuales y contenedores
Antes de comenzar, hagamos algunas reservas de conocimientos básicos:
1. Máquina virtual : hardware virtualizado
Una máquina virtual se Virtual Machine
refiere a un sistema informático completo con funciones completas del sistema de hardware que se simula mediante software y se ejecuta en un entorno completamente aislado . El trabajo que se puede realizar en la computadora física se puede realizar en la máquina virtual.
Al crear una máquina virtual en una computadora, parte del disco duro y la capacidad de memoria de la máquina física deben usarse como el disco duro y la capacidad de memoria de la máquina virtual. Cada máquina virtual tiene su propio CMOS
disco duro y sistema operativo, y puede operar en la máquina virtual como una máquina física . Antes de la tecnología de contenedores, los influencers de la industria eran máquinas virtuales.
En nombre de la tecnología de la máquina virtual, son VMWare
y OpenStack
.
2. Contenedor : virtualiza la capa del sistema operativo y es una unidad de software estándar.
Ejecutar en cualquier lugar: el contenedor puede empaquetar código con archivos de configuración y bibliotecas dependientes relacionadas para garantizar un funcionamiento coherente en cualquier entorno.
Alta utilización de recursos: el contenedor proporciona aislamiento a nivel de proceso, por lo que puede establecer con mayor precisión el
CPU
uso de la memoria y hacer un mejor uso de los recursos informáticos del servidor.Expansión rápida: cada contenedor se puede ejecutar como un proceso separado y puede compartir los recursos del sistema del sistema operativo subyacente, lo que puede acelerar la eficiencia de inicio y detención del contenedor.
3. Diferencias y conexiones
Aunque las máquinas virtuales pueden aislar muchos "equipos secundarios", ocupan más espacio y se inician más lentamente. El software de la máquina virtual también puede costar dinero, por ejemplo
VMWare
;La tecnología de contenedores no necesita virtualizar todo el sistema operativo, solo un entorno de pequeña escala, similar a una "caja de arena";
Espacio operativo, las máquinas virtuales generalmente requieren de unos pocos
GB
a decenasGB
de espacio, mientras que los contenedores solo necesitan estarMB
nivelados o inclusoKB
nivelados;
Echemos un vistazo a los datos comparativos:
En comparación con las máquinas virtuales, los contenedores son más ligeros y rápidos porque utilizan el Linux
sistema operativo subyacente para ejecutarse en un entorno aislado. La máquina virtual Hypervisor
crea un límite muy fuerte para evitar que la aplicación lo traspase, mientras que el límite del contenedor no es tan fuerte.
La implementación de la máquina física no puede hacer un uso completo de los recursos, lo que resulta en un desperdicio de recursos. Implementación de la máquina virtual, la máquina virtual en sí consumirá una gran cantidad de recursos, lo que resultará en un desperdicio de recursos, y el rendimiento de la máquina virtual también es muy deficiente. La implementación en contenedores es más flexible, liviana y tiene un mejor rendimiento.
Las máquinas virtuales son tecnologías de virtualización y las tecnologías de contenedor, como Docker, son una virtualización ligera.
Tres, conozca a Docker
Estibador
1. Concepto
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 Linux
máquina popular , que también se puede virtualizar. Los contenedores utilizan el mecanismo de la caja de arena por completo y no habrá interfaces entre ellos.
Docker
Los tres conceptos centrales de la tecnología son: espejo Image
, contenedor Container
y almacén Repository
.
2. ¿ Docker
La razón de ser liviano?
Creo que también tendrás esas dudas: ¿Por qué la Docker
puesta en marcha es rápida? ¿Cómo compartir el kernel con el host?
Cuando solicitamos Docker
ejecutar el contenedor, Docker
se configurará un entorno aislado de recursos en la computadora. Luego copie la aplicación empaquetada y los archivos asociados al Namespace
sistema de archivos interno.En este momento, la configuración del entorno está completa. Después de Docker
eso, se ejecutará el comando preespecificado para ejecutar la aplicación.
La imagen no contiene datos dinámicos y su contenido no se modificará una vez que se haya creado.
Cuarto, el concepto central
1. Build, Ship and Run
(Configuración, transporte, operación);
2. Build once, Run anywhere
(Construir una vez, ejecutar en todas partes);
3. Docker
No es un contenedor en sí mismo, es una herramienta para crear un contenedor y un motor de contenedor de aplicación;
4. Los Docker
tres conceptos centrales son: espejo Image
, contenedor Container
, almacén Repository
;
5. La Docker
tecnología usa el Linux
kernel y las funciones del kernel (como Cgroups
y namespaces
) para separar procesos de modo que cada proceso se ejecute de forma independiente entre sí.
6. Dado que las funciones Namespace
y Cgroups
solo están Linux
disponibles en Internet, el contenedor no se puede ejecutar en otros sistemas operativos. Entonces, ¿ Docker
cómo funciona macOS
o Windows
? Docker
De hecho, utilicé un truco Linux
para instalar una Linux
máquina virtual en un sistema no operativo y luego ejecutar el contenedor dentro de la máquina virtual.
7. La imagen es un paquete ejecutable que contiene el código, tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración necesarios para ejecutar la aplicación. El contenedor es la instancia de tiempo de ejecución de la imagen .
Cinco, instala Docker
1. Instalación de la línea de comandos
Homebrew
El Cask
ya compatible Docker for Mac
, para que pueda usarlo fácilmente Homebrew Cask
para instalar, ejecute el siguiente comando:
brew cask install docker
Para obtener más métodos de instalación, consulte el documento oficial:
https://www.docker.com/get-started
2. Ver versión
docker -v
3. Configurar la aceleración del espejo
Establezca la configuración de escritura de Docker Engine:
{
"registry-mirrors": [
"http://hub-mirror.c.163.com/",
"https://registry.docker-cn.com"
],
"insecure-registries":[],
"experimental": false,
"debug": true
}
4. Instale el escritorio
Escritorio de Docker
La operación de escritorio es muy simple, primero vaya al sitio web oficial para descargar. A través del Docker
terminal de escritorio, podemos operar cómodamente:
clonar: clonar un proyecto
build: imagen del paquete
ejecutar: ejecutar la instancia
compartir: compartir espejo
De acuerdo, los preparativos están listos, ¡ahora puedes mostrar tus habilidades!
Seis, empieza rápido
Después de la instalación Docker
, primero hacemos una imagen reflejada del proyecto real y la usamos mientras aprendemos.
1. Primero, necesitamos tener una comprensión general de los comandos que usaremos.11
2. Nuevo proyecto
Para ser rápidos, usamos Vue
andamios directamente para construir el proyecto:
vue create docker-demo
Intenta iniciarlo:
yarn serve
http://localhost:8080/
Dirección de acceso :. El proyecto está listo, luego empaquetamos el proyecto:
yarn build
En este momento, Dist
los recursos estáticos que queremos implementar están en el directorio del proyecto y continuamos con el siguiente paso.
Nota : Los proyectos de front-end generalmente se dividen en dos categorías, una se Nginx
implementa directamente de forma estática y la otra requiere Node
que se inicien los servicios . En esta sección solo consideramos el primero.
3. Nuevo Dockerfile
cd docker-demo && touch Dockerfile
El directorio del proyecto en este momento es el siguiente:
.
├── Dockerfile
├── README.md
├── babel.config.js
├── dist
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock
Puede ver que hemos docker-demo
creado correctamente un Dockerfile
archivo en el directorio .
4. Prepara el Nginx
espejo
Ejecute su Docker
escritorio, iniciará la instancia por defecto, sacamos la Nginx
imagen en la consola :
docker pull nginx
La siguiente información aparecerá en la consola:
Using default tag: latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete
8d69e59170f7: Pull complete
3f9f1ec1d262: Pull complete
d1f5ff4f210d: Pull complete
1e22bfa8652e: Pull complete
Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
Si tiene una excepción de este tipo, confirme Docker
si la instancia se está ejecutando normalmente.
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Para prepararnos para la duplicación OK
, creamos un Nginx
archivo de configuración en el directorio raíz :
touch default.conf
Escribir:
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
5. Configurar la duplicación
Abra Dockerfile
y escriba lo siguiente:
FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf
Expliquemos el código línea por línea:
FROM nginx
Especifique que la imagen senginx:latest
construye basándose en la imagen;COPY dist/ /usr/share/nginx/html/
El comando significadist
copiar todos los archivos en la carpeta bajo el directorio raíz del proyecto al directorio en el espejo/usr/share/nginx/html/
;COPY default.conf /etc/nginx/conf.d/default.conf
Sedefault.conf
copiará aetc/nginx/conf.d/default.conf
,default.conf
reemplaceNginx
la configuración predeterminada en el espejo con la configuración local .
6. Cree la imagen para crear la imagen Docker
mediante el build
comando:
docker build -t jartto-docker-demo .
Por convención, explicamos el código anterior:
-t
Nombre del parámetro para reflejarjartto-docker-demo
.
Se basa en el directorio actualDockerfile
para construir un espejo.
Después de una ejecución exitosa, dará como resultado:
Sending build context to Docker daemon 115.4MB
Step 1/3 : FROM nginx
---> 2622e6cca7eb
Step 2/3 : COPY dist/ /usr/share/nginx/html/
---> Using cache
---> 82b31f98dce6
Step 3/3 : COPY default.conf /etc/nginx/conf.d/default.conf
---> 7df6efaf9592
Successfully built 7df6efaf9592
Successfully tagged jartto-docker-demo:latest
¡El espejo está hecho con éxito! Echemos un vistazo al contenedor:
docker image ls | grep jartto-docker-demo
Como puede ver, hemos escrito un 133MB
espejo de proyecto:
jartto-docker-demo latest 7df6efaf9592 About a minute ago 133MB
La creación de reflejos también es buena o mala. Más adelante presentaremos cómo optimizarla, lo que se puede ignorar por ahora.
7. Ejecute el contenedor
docker run -d -p 3000:80 --name docker-vue jartto-docker-demo
Explique los parámetros aquí:
-d
Configurar el contenedor para que se ejecute en segundo plano-p
Representa la asignación de puertos, el3000
puerto al que se asignacontainer
el80
puerto de la máquina (de modo que se pueda acceder a la red externa a través del3000
puerto de la máquina--name
Establecer el nombre del contenedordocker-vue
jartto-docker-demo
Es el nombre de la imagen que construimos arriba
Agregue esto: en la consola, podemos docker ps
ver que acaba de ejecutar Container
un ID
:
docker ps -a
La consola generará:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab1375befb0b jartto-docker-demo "/docker-entrypoint.…" 8 minutes ago Up 7 minutes 0.0.0.0:3000->80/tcp docker-vue
Si usa el escritorio, Docker Dashboard
puede ver la lista de contenedores cuando lo abre , como se muestra en la siguiente figura:
8. Visite el proyecto
Debido a que mapeamos el 3000
puerto local , ejecute:
curl -v -i localhost:3000
O abra el navegador y visite:localhost:3000
9. Publica la imagen
Si desea contribuir a la comunidad, debe publicar la imagen para la conveniencia de otros desarrolladores.
Se requieren los siguientes pasos para publicar un espejo:
Inicie sesión
[dockerhub](https://hub.docker.com)
y registre una cuenta;Ejecute la línea de comando
docker login
y luego ingrese la contraseña de nuestra cuenta para iniciar sesión;Antes de presionar la imagen, debe escribir uno
Tag
y ejecutardocker tag <image> <username>/<repository>:<tag>
Una vez finalizado todo el proceso, lo usaremos en el futuro. Ya no necesitamos "mover rocas, cortar madera, dibujar dibujos y construir casas" y mudarnos con bolsas. Este es también el docker
encanto único.
Siete, operaciones convencionales
¡Enhorabuena por Docker
el proyecto introductorio que ha completado ! Si aún desea profundizar, también puede mirar hacia abajo.
1. Uso de parámetros
FROM:
#指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令
FROM <image> [AS <name>] 指定从一个镜像构建起一个新的镜像名字
FROM <image>[:<tag>] [AS <name>] 指定镜像的版本 Tag
示例:FROM mysql:5.0 AS database
MAINTAINER:
#镜像维护人的信息
MAINTAINER <name>
示例:MAINTAINER Jartto [email protected]
RUN:
#构建镜像时要执行的命令
RUN <command>
示例:RUN [executable, param1, param2]
ADD:
#将本地的文件添加复制到容器中去,压缩包会解压,可以访问网络上的文件,会自动下载
ADD <src> <dest>
示例:ADD *.js /app 添加 js 文件到容器中的 app 目录下
COPY:
#功能和 ADD 一样,只是复制,不会解压或者下载文件
CMD:
#启动容器后执行的命令,和 RUN 不一样,RUN 是在构建镜像是要运行的命令
当使用 docker run 运行容器的时候,这个可以在命令行被覆盖
示例:CMD [executable, param1, param2]
ENTRYPOINT:
#也是执行命令,和 CMD 一样,只是这个命令不会被命令行覆盖
ENTRYPOINT [executable, param1, param2]
示例:ENTRYPOINT [donnet, myapp.dll]
LABEL:
#为镜像添加元数据,key-value 形式
LABEL <key>=<value> <key>=<value> ...
示例:LABEL version=1.0 description=这是一个web应用
ENV:
#设置环境变量,有些容器运行时会需要某些环境变量
ENV <key> <value> 一次设置一个环境变量
ENV <key>=<value> <key>=<value> <key>=<value> 设置多个环境变量
示例:ENV JAVA_HOME /usr/java1.8/
EXPOSE:
#暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口)
EXPOSE <port>
示例:EXPOSE 80
容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口
VOLUME:
#指定数据持久化的目录,官方语言叫做挂载
VOLUME /var/log
#指定容器中需要被挂载的目录,会把这个目录映射到宿主机的一个随机目录上,实现数据的持久化和同步
VOLUME [/var/log,/var/test.....]
#指定容器中多个需要被挂载的目录,会把这些目录映射到宿主机的多个随机目录上,实现数据的持久化和同步
VOLUME /var/data var/log
#指定容器中的 var/log 目录挂载到宿主机上的 /var/data 目录,这种形式可以手动指定宿主机上的目录
WORKDIR:
#设置工作目录,设置之后 ,RUN、CMD、COPY、ADD 的工作目录都会同步变更
WORKDIR <path>
示例:WORKDIR /app/test
USER:
#指定运行命令时所使用的用户,为了安全和权限起见,根据要执行的命令选择不同用户
USER <user>:[<group>]
示例:USER test
ARG:
#设置构建镜像是要传递的参数
ARG <name>[=<value>]
ARG name=sss
Para más operaciones, vaya a la documentación oficial:
https://docs.docker.com/
8. Mejores prácticas
Después de dominar las Docker
operaciones normales, podemos crear fácilmente el espejo del proyecto que queramos. Sin embargo, las imágenes producidas por diferentes operaciones también son muy diferentes.
Lo que causa la diferencia en la imagen del espejo, también podemos continuar explorando.
Las siguientes son Docker
las mejores prácticas en el proceso de solicitud , siga las siguientes pautas tanto como sea posible:
Require
Sea claro: qué duplicación se necesitaPasos simplificados:
Step
prioridad con menos cambiosVersión clara: nomenclatura clara de la imagen
Documentación: Se pueden reproducir todos los pasos del empaquetado de imágenes
Nueve, resumen
La tecnología de contenedorización seguramente será una de las habilidades indispensables en la era de las nubes, pero Docker
solo una gota en el océano. A ello siguió una gestión de contenedores de clúster K8s
, Service Mesh
, Istio
y otras tecnologías. Abra Docker
la puerta, continúe despegando el capullo y profundice uno por uno , sentirá el encanto infinito de la contenerización.
¡Date prisa, abre el límite de habilidades y potencia tu tecnología de front-end!
有热门推荐????
再见,xShell,自己用Java撸一个Web版的,网友直呼:6662020 国内互联网公司的薪酬排名,加班时长排名 !IDEA这样 配置注释模板,让你高出一个逼格!!
Java后端线上问题排查常用命令收藏SpringBoot+Prometheus+Grafana实现应用监控和报警10个解放双手实用在线工具,有些代码真的不用手写!微信小程序练手实战:前端+后端(Java)
又一神操作,SpringBoot2.x 集成百度 uidgenerator搞定全局ID为什么要在2021年放弃Jenkins?我已经对他失去耐心了...
点击阅读原文,前往学习SpringCloud实战项目