Directorio de artículos
Uno, introducción a la imagen de la ventana acoplable
1. ¿Qué es una imagen de Docker?
La imagen de Docker está superpuesta por el sistema de archivos (una forma de almacenamiento de archivos). En la parte inferior hay un sistema de arranque de archivos, bootfs, que es muy similar a un sistema de archivos de arranque típico de Linux / Unix. Los usuarios de Docker casi nunca interactúan con el sistema de arranque. De hecho, cuando se inicia un contenedor, se moverá a la memoria y el sistema de archivos de inicio se desmontará para dejar más memoria para la duplicación del disco. El inicio del contenedor de Docker requiere algunos archivos, y estos archivos se pueden llamar imágenes de Docker.
Cómo conseguir el espejo:
- Descargar desde un almacén remoto
- Los amigos te copian
- Hacer un espejo Docker
2. Principio de carga de imágenes de Docker
Cuando descargamos, capa por capa es este
UnionFS (Union File System)
UnionFS (Union File System): Union File System (UnionFS) es un sistema de archivos jerárquico, liviano y de alto rendimiento que admite archivos La modificación del sistema se envía como una única capa de envío sobre la capa, y se pueden montar diferentes directorios bajo el mismo sistema de archivos virtual (unir varios directorios en un solo sistema de archivos virtual). El sistema de archivos Union es la base de las imágenes de Docker. La duplicación se puede heredar a través de capas. Sobre la base de la duplicación básica (sin duplicación principal), se pueden realizar varias duplicaciones de aplicaciones específicas.
Características: Cargue varios sistemas de archivos al mismo tiempo, pero desde el exterior, solo se puede ver un sistema de archivos. La carga conjunta superpondrá los sistemas de archivos de varias capas, de modo que el sistema de archivos final contendrá todos los archivos y directorios subyacentes.
La imagen de la ventana acoplable se compone en realidad de un sistema de archivos en capas, este sistema de archivos en capas UnionFS.
- Bootfs (sistema de archivos de arranque) incluye principalmente el gestor de arranque y el kernel, el gestor de arranque es principalmente el kernel de carga de bow | guía, Linux cargará el sistema de archivos bootfs cuando se inicie, y la capa inferior de la imagen de Docker es bootfs. Esta capa es la misma que la de nuestro sistema Linux / Unix típico, incluido el cargador de arranque y el kernel. Cuando se carga el boo, todo el kernel está en la memoria.En este momento, el derecho a usar la memoria se ha transferido del bootfs al kernel, y el sistema también descargará el bootfs en este momento.
- rootfs (sistema de archivos raíz), además de bootfs. Se incluyen directorios y archivos estándar como / dev, / proc, / bin, / etc en un sistema Linux típico. Rootfs es una variedad de distribuciones de sistemas operativos diferentes, como Ubuntu, Centos, etc.
Por lo general, los CentOS que instalamos en la máquina virtual son varios G, ¿por qué Docker solo tiene 200M aquí?
Para un sistema operativo optimizado, los rootfs pueden ser muy pequeños, solo es necesario incluir los comandos más básicos, solo la biblioteca del programa es suficiente, porque la capa inferior es directamente Con el kernel de Host, solo necesita proporcionar rootfs. Se puede ver que para diferentes distribuciones de Linux, los bootfs son básicamente iguales y los rootfs serán diferentes, por lo que diferentes distribuciones pueden compartir bootfs.
4. Principio de construcción del espejo
4. Hay tres formas de construir un espejo:
1. Crear basado en Dockerfile (el más utilizado)
2. Cree una imagen basada en un contenedor de imágenes existente.
3. Construya basándose en plantillas locales
Segundo, crea un espejo
1. ¿Introducción a Dockerfile?
Dockerfile es un archivo compuesto por un conjunto de instrucciones
La estructura de Dockerfile se divide en cuatro partes:
-
1. Información básica de la imagen
-
2. Información del encargado del mantenimiento
-
3. Instrucciones de funcionamiento del espejo
-
4. Especifique las instrucciones cuando comience el contenedor.
(1) Instrucciones de funcionamiento comunes de Dockerfile
(2) Dockerfile para crear un espejo
Use Dockerfile para crear una imagen httpd y ejecútela
1. Escriba Dockerfile
[root@docker ~]# mkdir apache
[root@docker ~]# cd apache/
[root@docker apache]# vim Dockerfile
##基于的基础镜像
FROM centos
##维护镜像的用户信息
MAINTAINER The porject <CN-TangZheng>
##镜像操作指令安装Apache软件
RUN yum -y update
##安装Apache服务
RUN yum -y install httpd
##开启80端口
EXPOSE 80
##复制网址首页文件
ADD index.html /var/www/html/index.html '//此命令可以结合上图理解'
##将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
##启动容器时执行脚本
CMD ["/run.sh"]
2. Escriba scripts de ejecución y contenido de la página de inicio.
[root@docker apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/* '//清除缓存'
exec /usr/sbin/apachectl -D FOREGROUND '//启动apache'
[root@docker apache]# echo "this is test web" > index.html
3. Genera un espejo
[root@docker apache]# ls
Dockerfile index.html run.sh
[root@docker apache]# docker build -t httpd:centos . '//最后的一个"."要注意,-t:镜像的名字:标签'
'//每一个缓存层都会生成一个临时容器来执行命令,然后删除'
[root@docker apache]# docker images '//查看镜像,已经生成了两个'
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos d2010670b33a 19 seconds ago 434MB
centos latest 470671670cac 3 months ago 237MB
4. Ejecute el contenedor con la nueva imagen.
[root@docker apache]# docker run -d -p 1111:80 httpd:centos '//-p 指定端口号,-P 随机端口号'
04b0f0f1bda36a4857f8d48e044cd17f442be19f4d32dee4cf3183827b451b55
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04b0f0f1bda3 httpd:centos "/run.sh" 4 seconds ago
2. Cree en función del contenedor de imágenes existente
Crear contenedor
[root@docker apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos d2010670b33a 23 minutes ago 434MB
centos latest 470671670cac 3 months ago 237MB '//使用此镜像创建容器'
[root@docker apache]# docker create -it centos /bin/bash
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
325c28cc9349 centos "/bin/bash" 42 seconds ago Created infallible_poitras
04b0f0f1bda3 httpd:centos "/run.sh" 21 minutes ago Up 21 minutes 0.0.0.0:1111->80/tcp nostalgic_greider
Crear espejo
[root@docker apache]# docker commit -m "ceshi" -a "tang" 325c28cc9349 tang:centos '//-m:说明文字,-a:提交的作者'
sha256:a49089651887dee9c9168532466542ca7ea0c9113da078230694ac30aebe064c
[root@docker apache]# docker images '//镜像创建成功'
REPOSITORY TAG IMAGE ID CREATED SIZE
tang centos a49089651887 14 seconds ago 237MB
httpd centos d2010670b33a 30 minutes ago 434MB
centos latest 470671670cac 3 months ago 237MB
3. Cree según la plantilla local
Descargue la plantilla local. El
espejo se puede generar importando el archivo de la plantilla del sistema. La plantilla se puede descargar del proyecto de código abierto OPENVZ. La
dirección es: https://wiki.openvz.org/Download/template/precreated
o usando wget para descargar: wget http: //download.openvz .org / template / precreated / debian-7.0-x86-minimal.tar.gz La
plantilla se puede importar directamente después de la descarga
[root@docker opt]# ls
debian-7.0-x86-minimal.tar.gz
[root@docker opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new 487145d2411f 8 seconds ago 215MB
2. Establecimiento de almacén privado de Docker
La herramienta Docker Registry es actualmente la versión de la serie 2.0. Esta versión se empaqueta junto con algunas bibliotecas y herramientas en un conjunto de herramientas responsable de la distribución del contenido del contenedor: Docker Distribution. En la actualidad, sus componentes funcionales centrales siguen siendo responsables de la gestión del almacén espejo. La nueva versión de Registry se ha refactorizado basándose en Golang para proporcionar un mejor rendimiento y escalabilidad, y es compatible con Docker 1.6+ API, que es muy adecuada para crear un servidor de registro de imágenes privado. La imagen del registro también se proporciona en el almacén oficial, por lo que los usuarios pueden utilizar el registro a través de la operación del contenedor y la instalación de la fuente.
1. Pasos para configurar un almacén privado
1. Descargue la imagen de registro
2. Configure el archivo daemon.json en el lado del cliente y especifique la ubicación del almacén privado
3. Genere el contenedor de registro, abra el puerto 5000
4. Etiquete la imagen
5. Cargue la imagen, docker push
6. Descargue la imagen, docker pull
2. Establecer un almacén privado
(1) El servidor descarga la imagen de registro
[root@docker apache]# docker pull registry
(2) Especifique la dirección del almacén espejo
[root@docker apache]# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.233.133:5000"], '//添加此段'
"registry-mirrors": ["https://yu1vx79j.mirror.aliyuncs.com"]
}
[root@docker apache]# systemctl restart docker
(3) Genere un contenedor de registro y abra el puerto 5000
El registro debe estar habilitado para brindar servicios
[root@docker apache]# docker create -it registry /bin/bash
87db162017924493a4dadefd1f58ff2fdf5a62921a9f4233c84143340e36e1e5
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87db16201792 registry "/entrypoint.sh /bin…" 12 seconds ago Created agitated_darwin
[root@docker apache]# docker start 87db16201792
[root@docker apache]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry '共享目录 宿主机的data共享到docker的tmp下'
60e04d648d5116ceb369eee810e8ed85f2043aa2f573b0ebf1e1233e8e13e2f6
(4) Etiquetado espejo
[root@docker apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tang centos a49089651887 38 minutes ago 237MB
httpd centos d2010670b33a About an hour ago 434MB
registry latest 708bc6af7e5e 2 months ago 25.8MB
centos latest 470671670cac 3 months ago 237MB
[root@docker apache]# docker tag tang:centos 192.168.233.133:5000/httpd '要打上镜像仓库ip地址端口的tag'
(5) Cargar prueba de espejo
[root@docker apache]# docker push 192.168.233.133:5000/httpd
The push refers to repository [192.168.233.133:5000/httpd]
0683de282177: Pushed
latest: digest: sha256:7a6f34c22ab081c96ee0b676244300691d7a2f63fe4aedd22f150f17fe4aa5a9 size: 529
(6) Descargar prueba de espejo
curl para ver el directorio espejo
[root@docker apache]# curl -XGET http://192.168.233.133:5000/v2/_catalog
{
"repositories":["httpd"]}
[root@docker apache]# docker pull 192.168.233.133:5000/httpd '从本地下载镜像'