La guía definitiva para comenzar con Docker, ¡este es el mejor tutorial que he visto en mi vida!

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:

  1. Contar una historia

  2. Contenedor y máquina virtual

  3. comprensión Docker

  4. Concepto clave

  5. instalación Docker

  6. Inicio rápido

  7. Operación de rutina

  8. 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.

img

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  CMOSdisco 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 decenas  GB de espacio, mientras que los contenedores solo necesitan estar  MB nivelados o incluso  KB 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

img

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  Containery 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  Cgroupssolo 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

img

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:

  1. clonar: clonar un proyecto

  2. build: imagen del paquete

  3. ejecutar: ejecutar la instancia

  4. 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 se nginx:latest construye basándose en la  imagen;

  • COPY dist/ /usr/share/nginx/html/ El comando significa dist 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 Se  default.conf copiará a  etc/nginx/conf.d/default.conf, default.conf reemplace  Nginx la configuración predeterminada en el espejo con la configuración local  .

6. Cree la imagen  para crear la imagen Docker mediante el  buildcomando:

docker build -t jartto-docker-demo .  

Por convención, explicamos el código anterior:

  • -t Nombre del parámetro para reflejar jartto-docker-demo

  • . Se basa en el directorio actual  Dockerfile 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, el 3000 puerto al que se asigna  container el  80 puerto de la máquina  (de modo que se pueda acceder a la red externa a través del 3000 puerto de la máquina 

  • --name Establecer el nombre del contenedor docker-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 loginy luego ingrese la contraseña de nuestra cuenta para iniciar sesión;

  • Antes de presionar la imagen, debe escribir uno  Tagy ejecutar docker 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:

  1. Require Sea claro: qué duplicación se necesita

  2. Pasos simplificados: Step prioridad con menos cambios 

  3. Versión clara: nomenclatura clara de la imagen

  4. 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实战项目

Supongo que te gusta

Origin blog.csdn.net/qq_17231297/article/details/115019223
Recomendado
Clasificación