Tabla de contenido
2. La diferencia entre Docker y máquina virtual
1.1 seis aislamientos de espacio de nombres
2. El concepto central de Docker
3.1 Ver información de la versión de Docker
4. Operación de imagen de Docker
4.3 Descarga acelerada por espejo
4.4 Ver información de la imagen
4.6 Agregar una nueva etiqueta a la imagen local
4.8 Guardar la imagen ====: guardar la imagen como un archivo local
4.9 Cargar imagen ====: Importar el archivo de imagen a la biblioteca de imágenes
5. Operación del contenedor Docker
5.1 Ver el estado de ejecución del contenedor
5.3 Crear e iniciar el contenedor
5.4 Terminar la operación del contenedor
5.7 Copiar archivos del contenedor al host
5.8 Exportación e importación de contenedores
1. Introducción a Docker
Docker es un motor contenedor de aplicaciones de código abierto, desarrollado en base al lenguaje go y siguiendo el protocolo apache2.0 de código abierto. Docker es una herramienta de código abierto para ejecutar aplicaciones en contenedores de Linux, una "máquina virtual" liviana. La tecnología de contenedores de Docker facilita la creación de un contenedor liviano, portátil y autosuficiente para cualquier aplicación en un solo host.
El logotipo de Docker está diseñado como una ballena azul que arrastra muchos contenedores. La ballena puede considerarse como una máquina anfitriona y el contenedor puede entenderse como un contenedor aislado entre sí, y cada contenedor contiene su propia aplicación.
El principio de diseño de Docker: crear, enviar y ejecutar cualquier aplicación, en cualquier lugar, es decir, a través de la gestión del ciclo de vida de los componentes de la aplicación, como la encapsulación, el lanzamiento, la implementación y la operación, el propósito de "encapsular una vez y ejecutar en todas partes". a nivel de componente de aplicación. Un componente aquí puede ser una aplicación, un conjunto de servicios o incluso un sistema operativo completo.
La contenerización está ganando popularidad porque los contenedores son:
● Flexible: Incluso las aplicaciones más complejas se pueden contener.
● Ligero: el contenedor utiliza y comparte el kernel del host.
● Intercambiable: las actualizaciones y mejoras se pueden implementar al instante.
● Portátil: puede construirse localmente, implementarse en la nube y ejecutarse en cualquier lugar.
●Extensible: las réplicas de contenedores se pueden aumentar y distribuir automáticamente.
●Apilable: Los servicios se pueden apilar verticalmente y al instante.
El contenedor se ejecuta de forma nativa en Linux y comparte el kernel del host con otros contenedores. Ejecuta un proceso independiente y no ocupa la memoria de ningún otro archivo ejecutable. Es muy liviano. Una máquina virtual ejecuta un sistema operativo completo y el acceso virtual a los recursos del host se realiza a través de un hipervisor, lo que requiere más recursos en comparación.
2. La diferencia entre Docker y máquina virtual
característica | contenedor acoplable | máquina virtual |
velocidad de inicio | segundo nivel | nivel de minutos |
Pérdida de potencia informática | casi ninguno | Pérdida 50% |
actuación | cerca de nativo | más débil que |
Soporte del sistema | Miles | Decenas de |
aislamiento | Aislamiento/limitación de recursos | completamente aislado |
Los contenedores admiten 2 tecnologías importantes en el kernel:
La esencia de Docker es un proceso de la máquina host. Docker implementa el aislamiento de recursos a través del espacio de nombres, la limitación de recursos a través de cgroup y la operación eficiente de archivos a través de la tecnología de copia en escritura (similar a los discos de la máquina virtual, como la asignación de 500 g. En realidad, no ocupa 500 g del disco físico).
1.1 seis aislamientos de espacio de nombres
espacio de nombres | Parámetros de puesta en servicio del sistema | contenido de cuarentena |
UTS | CLONE_NEWUTS | Nombre de host y nombre de dominio |
PIC | CLONE_NEWWIPC | Semáforos, colas de mensajes y memoria compartida |
PID | CLONE_NEWPID | número de proceso |
RED | CLONE_NEWNET | Dispositivos de red, pilas de red, puertos, etc. |
MONTAR | CLONE_NEWNS | punto de montaje (sistema de archivos) |
USUARIO | CLONE_NEWUSER | Usuarios y grupos de usuarios (solo admitidos por kernels posteriores a 3.8) |
2. El concepto central de Docker
2.1 Duplicación
Las imágenes de Docker son la base para la creación de contenedores, similares a las instantáneas de máquinas virtuales, y pueden entenderse como una plantilla de solo lectura para el motor de contenedores de Docker. Inicie un contenedor con una imagen, un paquete ejecutable que incluye todo lo necesario para ejecutar una aplicación, incluido código, tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración. La imagen de Docker también es un paquete comprimido, pero este paquete comprimido no es solo un archivo ejecutable y un script de implementación del entorno, sino que también contiene un sistema operativo completo. Debido a que la mayoría de las imágenes se crean en función de un determinado sistema operativo, es fácil crear el mismo entorno local y remoto, que es la esencia de las imágenes de Docker.
2.2 Contenedor
Un contenedor Docker es una instancia en ejecución creada a partir de una imagen, que se puede iniciar, detener y eliminar. Cada contenedor creado está aislado e invisible entre sí para garantizar la seguridad de la plataforma. El contenedor puede considerarse como una versión simple del entorno Linux (que incluye autoridad de usuario raíz, espacio espejo, espacio de usuario y espacio de red, etc.) y las aplicaciones que se ejecutan en él.
2.3 Almacén
El almacén Docker se utiliza para almacenar imágenes de forma centralizada. Después de crear su propia imagen, puede usar el comando push para cargarla en un almacén público (Público) o en un almacén privado (Privado). La próxima vez que desee utilizar esta imagen en otra máquina, consígala del repositorio.
Las imágenes, contenedores, registros, etc. de Docker se almacenan en /var/lib/docker de forma predeterminada.
3. Instale Docker
Actualmente, Docker solo admite sistemas de 64 bits.
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils: proporciona la herramienta yum-config-manager. mapeador de dispositivos: es un mecanismo de mapeo de dispositivos de propósito general que admite la administración de volúmenes lógicos en el kernel de Linux y proporciona una arquitectura de kernel altamente modular para implementar controladores de dispositivos de bloque para la administración de recursos de almacenamiento.
El controlador de almacenamiento del mapeador de dispositivos requiere datos persistentes del mapeador de dispositivos y lvm2
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
docker-ce-20.10.18
systemctl start docker.service
systemctl enable docker.service
El sistema Docker instalado tiene dos programas, el servidor Docker y el cliente Docker. El servidor Docker es un proceso de servicio responsable de gestionar todos los contenedores. El cliente Docker actúa como un controlador remoto del servidor Docker, que se puede utilizar para controlar el proceso del servidor Docker. En la mayoría de los casos, el servidor y el cliente Docker se ejecutan en la misma máquina.
3.1 Ver información de la versión de Docker
docker version
4. Operación de imagen de Docker
4.1 Espejo de búsqueda
Formato: palabra clave de búsqueda de Docker
búsqueda acoplable nginx
4.2 Obtener la imagen
Formato: nombre del repositorio de extracción de Docker [: etiqueta]
#Si no especifica una etiqueta al descargar la imagen, la última versión de la imagen en el almacén se descargará de forma predeterminada, es decir, la etiqueta seleccionada es la última etiqueta.
ventana acoplable extraer nginx
4.3 Descarga acelerada por espejo
Acceso al navegador Inicio de sesión en Alibaba Cloud: bienvenido a Alibaba Cloud, una plataforma de servicios de computación en la nube segura y estable
Obtener la configuración del acelerador espejo
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["//hqqza5e6.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
4.4 Ver información de la imagen
Una vez descargada la imagen, se almacena en /var/lib/docker. Los recursos locales relacionados con Docker se almacenan en el directorio /var/lib/docker/, donde el directorio de contenedores almacena información del contenedor, el directorio de imágenes almacena información de la imagen y el directorio overlay2 almacena archivos subyacentes de imágenes específicas.
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下载到本地的所有镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 2 weeks ago 187MB
centos 7 eeb6ee3f44bd 23 months ago 204MB
nginx 1.14 295c7be07902 4 years ago 109MB
REPOSITORIO: el repositorio al que pertenece la imagen;
TAG: La información de la etiqueta de la imagen, que marca diferentes imágenes en el mismo almacén;
ID DE IMAGEN: el número de identificación único de la imagen, que identifica de forma única una imagen;
CREADO: hora de creación del espejo;
TAMAÑO VIRTUAL: tamaño de imagen;
4.5 Según el número de identificación único de la imagen, obtenga la información detallada de la imagen
Formato: Docker inspecciona el número de identificación de la imagen
docker inspect 89da1fb6dcb9
4.6 Agregar una nueva etiqueta a la imagen local
Formato: nombre de la etiqueta acoplable: [etiqueta] nuevo nombre: [nueva etiqueta]
docker tag nginx:latest nginx:web
docker images | grep nginx
4.7 Eliminar imagen
Formato:
nombre del almacén de docker rmi: etiqueta # Cuando un espejo tiene varias etiquetas, simplemente elimine la etiqueta especificada
o
El número de ID de imagen de Docker RMI eliminará completamente la imagen.
Nota: Si el contenedor ha utilizado la imagen, la forma correcta es eliminar todos los contenedores que dependen de la imagen antes de eliminar la imagen.
4.8 Guardar la imagen ====: guardar la imagen como un archivo local
Formato: docker save -o almacena la imagen almacenada en el nombre del archivo
docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
ls -lh
4.9 Cargar imagen ====: Importar el archivo de imagen a la biblioteca de imágenes
Formato:
carga de la ventana acoplable <archivo depositado
o
El archivo depositado por docker load -i
docker load < nginx
4.10 Subir imagen
De forma predeterminada, se carga en el almacén público oficial de Docker Hub y se debe registrar una cuenta para utilizar el almacén público. https://hub.docker.com puede usar el comando de inicio de sesión de Docker para ingresar el nombre de usuario, la contraseña y el correo electrónico para completar el registro e iniciar sesión. Antes de cargar la imagen, debe agregar una nueva etiqueta a la imagen local y luego usar el comando docker push para cargar.
docker tag nginx:latest soscscs/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上传镜像
5. Operación del contenedor Docker
Creación de contenedor: Es el proceso de cargar la imagen en el contenedor.
El contenedor recién creado está en estado detenido de forma predeterminada y no ejecuta ningún programa. Es necesario iniciar un proceso en él para iniciar el contenedor.
Formato: ventana acoplable crear [opciones] imagen
Opciones comunes:
-i: le dice al contenedor que abra la entrada estándar
-t: permite que Docker asigne un tty pseudo-terminal
-it: Combinado para realizar la interacción con el contenedor, ejecutar un shell de sesión interactivo
docker create -it nginx:latest /bin/bash
5.1 Ver el estado de ejecución del contenedor
docker ps -a #-a 选项可以显示所有的容器
ID DEL CONTENEDOR IMAGEN COMANDO ESTADO CREADO NOMBRES DE PUERTOS
Número de identificación del contenedor Imagen cargada Programa en ejecución Hora de creación Estado actual Nombre de asignación de puerto
5.2 Iniciar el contenedor
Formato: ID/nombre del contenedor de inicio de Docker
docker start 8b0a7be0ff58
docker ps -a
5.3 Crear e iniciar el contenedor
Puede ejecutar directamente el comando docker run, que equivale a ejecutar primero el comando docker create y luego el comando docker start. Nota: El contenedor es un terminal que coexiste con el comando de shell que se ejecuta en él. El comando ejecuta el contenedor para ejecutarlo y el comando finaliza el contenedor para salir.
De forma predeterminada, el contenedor acoplable utilizará el primer proceso dentro del contenedor, es decir, el programa con pid = 1, como base para saber si el contenedor acoplable se está ejecutando. Si el proceso con pid = 1 en el contenedor acoplable cuelga, el contenedor Docker saldrá directamente, es decir, debe haber un proceso en primer plano en el contenedor Docker; de lo contrario, se considera que el contenedor está colgado.
Cuando se utiliza Docker Run para crear un contenedor, el proceso de ejecución estándar de Docker en segundo plano es:
(1) Compruebe si la imagen especificada existe localmente. Cuando el mirror no exista, se descargará del repositorio público;
(2) Cree e inicie un contenedor usando la imagen;
(3) Asigne un sistema de archivos al contenedor y monte una capa de lectura y escritura fuera de la capa de imagen de solo lectura;
(4) Conectar una interfaz de máquina virtual desde la interfaz de puente configurada en el host al contenedor;
(5) Asigne una dirección IP en el grupo de direcciones al contenedor;
(6) Ejecute el programa de aplicación especificado por el usuario y el contenedor finalizará una vez completada la ejecución.
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a #会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
#在后台持续运行 docker run 创建的容器
Debe agregar la opción -d después del comando docker run para que el contenedor Docker se ejecute en segundo plano como un demonio. Y el programa que se ejecuta en el contenedor no puede finalizar.
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始终处于 UP,运行状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet
docker run -itd --name test1 centos:7 /bin/bash #创建容器并持续运行容器
5.4 Terminar la operación del contenedor
Formato: ID/nombre del contenedor Docker Stop
docker stop 2592d3fad0fb
docker ps -a
5.5 Acceso a contenedores
Cuando necesite ingresar al contenedor para operaciones de comando, puede usar el comando docker exec para ingresar al contenedor en ejecución.
Formato: docker exec -it ID/nombre/bin/bash del contenedor
La opción -i significa mantener abierta la entrada del contenedor;
La opción -t le dice a Docker que asigne un pseudoterminal.
docker start 2592d3fad0fb #进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在运行
docker ps -a
docker run -it centos:7 bash #不加 -d 选项会创建容器后直接进入容器,但是退出容器,容器也会停止
5.6 Copiar al contenedor
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/
5.7 Copiar archivos del contenedor al host
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt
5.8 Exportación e importación de contenedores
Los usuarios pueden migrar cualquier contenedor Docker de una máquina a otra. Durante el proceso de migración, puede utilizar el comando docker export para exportar el contenedor creado como un archivo, independientemente de si el contenedor está ejecutándose o detenido. El archivo de exportación se puede transferir a otras máquinas y la migración del contenedor se puede realizar mediante el comando de importación correspondiente.
#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar
#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器
5.9 Eliminar contenedor
Formato: docker rm [-f] ID/nombre del contenedor
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb #删除已经终止状态的容器
docker rm -f 2592d3fad0fb #强制删除正在运行的容器
5.10 Procesamiento por lotes
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi #删除none镜像
docker rm $(docker ps -a -q) #批量清理后台停止的容器