Registro de aprendizaje de Docker (para docker-compose)

Estibador

  • Sitio web oficial: https://www.docker.com/
  • Documentación: https://docs.docker.com/
  • Almacén: https://hub.docker.com/

La composición de Docker
Inserte la descripción de la imagen aquí

  1. Imágenes espejo)
  2. Envase
  3. Almacén (registro)

1. Instale Docker

#1.卸载原有的Docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#2.安装yum-utils软件包
sudo yum install -y yum-utils
#3.设置稳定的存储库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
#4.安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
#5.启动Docker
sudo systemctl start docker
#6.查看版本
docker version
-------------------------------------------
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:27:04 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:25:42 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

#7.测试Docker
sudo docker run hello-world
-------------------------------------------
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2. El principio subyacente

  • Cliente Docker : también conocido como cliente Docker. De hecho, Docker proporciona herramientas de interfaz de línea de comandos, que es la forma principal para que muchos usuarios de Docker interactúen con Docker.

  • Demonio de Docker : es un componente de servidor que se ejecuta como un servicio en segundo plano de Linux. Es el proceso principal en segundo plano de Docker. También lo llamamos demonio. Es responsable de responder a las solicitudes del cliente Docker y luego traducir estas solicitudes en llamadas al sistema para completar las operaciones de administración de contenedores.

  • Imagen de Docker : se puede considerar como un sistema de archivos especial. Además de proporcionar los programas, bibliotecas, recursos, configuración y otros archivos requeridos por el contenedor para ejecutarse, también contiene algunos parámetros (volumen anónimo, variables de entorno, usuario Espere). La imagen no contiene datos dinámicos y su contenido no se modificará una vez que se haya creado. Podemos considerar la imagen de Docker como una plantilla de solo lectura, a través de la cual se pueden crear contenedores de Docker.

  • Registro de Docker : es un repositorio para almacenar imágenes de Docker.

  • Contenedor de Docker : Es la instancia en ejecución de la imagen de Docker. Es el lugar donde se ejecutan los programas del proyecto, se consumen los recursos del sistema y se proporcionan los servicios.

3. Contenedores y máquinas virtuales

Inserte la descripción de la imagen aquí

Comandos de Docker

1. Comandos de ayuda

docker version	#版本信息
docker info		#详细信息
docker 命令 --help	#帮助信息

2. Comando espejo

docker images	#查看镜像
--------------------------------
	#REPOSITORY:镜像名称          
	#TAG:镜像版本                 
	#IMAGE ID:镜像ID            
	#CREATED:镜像创建时间             
	#SIZE:镜像大小
docker images -a	#显示所有信息
docker images -q	#只显示镜像ID
docker search --help	#搜索命令
-----------------------------------
Usage:	docker search [可选参数] TERM
Options:	#可选参数
  -f, --filter filter   根据提供的条件过滤输出
      --format string   使用Go模板进行打印搜索
      --limit int       最大搜索结果数(默认25)
      --no-trunc        不要截断输出
docker pull --help	#镜像下载
----------------------------------
Usage:	docker pull [可选参数] NAME[:版本号]
Options:
  -a, --all-tags                下载存储库中所有标记的图像
      --disable-content-trust   跳过图像验证(默认为true)
  -q, --quiet                   禁止详细输出
----------------------------------------------
[root@wdd ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql#版本信息
afb6ec6fdc1c: Pull complete #分层下载
0bdc5971ba40: Pull complete 
97ae94a2c729: Pull complete 
f777521d340e: Pull complete 
1393ff7fc871: Pull complete 
a499b89994d9: Pull complete 
7ebe8eefbafe: Pull complete 
4eec965ae405: Pull complete 
a531a782d709: Pull complete 
10e94c02b508: Pull complete 
799a94b968ef: Pull complete 
Digest: sha256:5c9fd7949bc0f076429fa2c40d0e7406e095bdb5216a923257b31972a6f3ae4f
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7#真实地址
docker rmi --help	#镜像删除
Usage:	docker rmi [可选参数] IMAGE [镜像名。。。]
Options:
  -f, --force      强制删除镜像
      --no-prune   不要删除未标记的父级
---------------------------------------------------------
docker rmi -f b84d68d0a7db	#删除镜像
docker rmi -f id1 id2 id3 #批量删除镜像
docker rmi -f $(docker images -aq)	#删除所有镜像

3. Comando de contenedores

docker run --help	#运行镜像
Usage:	docker run [可选参数] IMAGE [命令] [参数]
--name  容器姓名区分
-d		后台运行
-p		指定端口映射
-P		随机端口映射
-it		交互模式运行,进入容器内部
-v		绑定挂载卷
-e		环境配置,运行内存等
#测试
docker pull centos

#启动
docker run -it 470671670cac /bin/bash

#容器停止并退出
exit

#容器不停止退出
ctrl+P+Q

#显示容器
docker ps 【参数】
-a	#显示所有容器包括历史容器
-n=#参数限定
-q	#只显示ID

#删除容器
docker rm id	#删除容器,不能删除
docker rm -f $(docker ps -aq)	#删除所有容器
docker ps -a -q|xrags docker rm	#删除所有容器

#容器启动和停止
docker strat id	#启动容器
docker restart id	#重启容器
docker stop id	#停止容器
docker kill id	#强制停止容器

4. Comandos comunes

#后台运行容器
docker run -d id
	#docker ps 时容器停止了,后台运行必须有一个前台进程,没有即停止
	
#查看日志
docker logs -t -f --tail 行数 id

#容器进程
docker top id

#容器元数据
docker inspect id

#进入容器
docker exec -it id /bin/bash	#交互模式进入正在运行的容器中,进入后开启新的终端
docker attach id	#进入容器正在执行的终端,没有创建新的进程

#拷贝命令
docker cp 

Principio de duplicación de Docker

1. Espejo

Mirror es un paquete de software independiente, ligero y ejecutable, que se utiliza para empaquetar el entorno operativo del software y el software de desarrollo basado en el entorno operativo, contiene

Todo el contenido necesario para un software, incluido el código, el tiempo de ejecución, las bibliotecas, las variables de entorno y los archivos de configuración.

  • Obtenga la imagen reflejada: almacén remoto + intercambio de amigos + hecho a sí mismo

2. Sistema de archivos de unión (UnionFS)

  • Union File System (UnionFS) es un sistema de archivos jerárquico, liviano y de alto rendimiento que admite la modificación del sistema de archivos como una mejora única.

    Con capas de superposiciones, se pueden montar diferentes directorios en el mismo sistema de archivos virtual.

  • El sistema de archivos Union es la base de las imágenes de Docker.

  • La duplicación se puede integrar a través de capas. Sobre la base de la duplicación básica, se pueden realizar varias aplicaciones específicas.

  • Característica: Cargue varios sistemas de archivos al mismo tiempo, pero desde el exterior, solo se puede ver un sistema de archivos. La carga conjunta apilará todas las capas de los sistemas de archivos

    Juntos, el sistema de archivos final contendrá todos los archivos y directorios subyacentes.

3. Principio de carga de imágenes de Docker

  • 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 cargador de arranque y el kernel, el cargador de arranque es principalmente el kernel de carga de arranque, Linux acaba de comenzar

    Cuando se carga el sistema de archivos bootfs, la capa inferior de la imagen de Docker es bootfs. Esta capa es la misma que la de nuestro sistema típico Linux / Unix

    , Incluido el cargador de arranque y el kernel. Cuando se completa la carga de arranque, todo el kernel se almacena en la memoria. En este momento, bootfs ha cambiado el derecho a usar la memoria.

    Transfiera al kernel, en este momento el sistema también desinstalará bootfs.

  • roorfs (sistema de archivos raíz), además de bootfs. Se incluyen / dev, / proc, / bin, / etx y otros estándares en un sistema Linux típico

  • Directorios y archivos estándar. Rootfs es una variedad de distribuciones de sistemas operativos diferentes. Como Ubuntu, Centos, etc.

  • Para un sistema operativo optimizado, rootfs puede ser muy pequeño y solo necesita incluir los comandos, herramientas y bibliotecas más básicos, porque la capa inferior usa directamente el kernel del host (host) y solo necesita proporcionar rootfs. Esto muestra que Para diferentes distribuciones de Linux, bootfs es básicamente el mismo, y rootfs será diferente, por lo que diferentes distribuciones pueden compartir bootfs.
    Inserte la descripción de la imagen aquí

4. Imagen de Docker

Inserte la descripción de la imagen aquí

  • Uno de los mayores beneficios de utilizar esta estructura en capas es compartir recursos. Por ejemplo, si se crean varias imágenes a partir de la misma imagen base, el host

    La máquina solo necesita guardar una imagen base en el disco,

  • Al mismo tiempo, solo se necesita cargar una imagen base en la memoria para servir a todos los contenedores. Y cada capa del espejo se puede compartir.

  • Todas las imágenes de Docker son de solo lectura. Cuando se inicia el contenedor, se carga una nueva capa de escritura encima de la imagen. Esta capa se suele llamar "contenedor

    La "capa" y la "capa contenedora" se denominan capa de espejo.

5. Confirmar espejo

docker commit [可选参数] 容器id [新镜像名[:版本]]
-a, --author string    作者
-c, --change list      将Dockerfile指令应用于创建的映像
-m, --message string   提交信息
-p, --pause            提交期间暂停容器(默认为true)

Volumen de datos del contenedor

** Persistencia de datos de Docker: ** Los datos generados por el contenedor durante la operación no se escribirán en la imagen. Reiniciar un nuevo contenedor con esta imagen inicializará la imagen y agregará una nueva capa de lectura y escritura para guardar los datos. . Si desea lograr la persistencia de los datos, Docker proporciona un volumen de datos o un volumen de contenedor de datos para resolver el problema. Además, puede enviar una nueva imagen a través de la confirmación para guardar los datos generados.

1. Ventajas:

  1. Omita el sistema de "copiar y escribir" para [alcanzar el rendimiento de E / S del disco local], (como ejecutar un contenedor y modificar el contenido del volumen de datos en el contenedor cambiará directamente el contenido del volumen de datos en el host, por lo que es un disco local Rendimiento de IO, en lugar de escribir una copia en el contenedor primero y finalmente copiar el contenido modificado en el contenedor para la sincronización).
  2. Sin pasar por el sistema de "copiar y escribir", algunos archivos [no es necesario empaquetarlos en la confirmación de la ventana acoplable] ingresan al archivo espejo.
  3. El volumen de datos puede compartir y reutilizar datos [entre contenedores]
  4. El volumen de datos puede compartir datos entre [Host] y [Container]
  5. Los cambios en el volumen de datos son [modificación directa]
  6. Los volúmenes de datos son [persistentes] hasta que no hay ningún dispositivo para usarlos. Incluso si se elimina el contenedor de volumen de datos original o el contenedor de volumen de datos de nivel medio, siempre que haya otros contenedores que utilicen el volumen de datos, los datos que contiene no se perderán.

2. Comando mount -v

docker run 【-d】【 -v 宿主机目录:容器目录】 【--name 容器名】 【-p 宿主端口:容器端口】 镜像ID
#启动mysql

#查看元数据
docker inspect 970ffe5b3623 
-----------------------------------------
"Mounts": [		#挂载
            {
    
    
                "Type": "bind",
                "Source": "/root/mysql/conf",	#宿主机目录
                "Destination": "/etc/mysql/conf.d",	#容器目录,Mysql的配置文件
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
    
    
                "Type": "bind",
                "Source": "/root/mysql/logs",
                "Destination": "/logs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
    
    
                "Type": "bind",
                "Source": "/root/mysql/data",
                "Destination": "/var/lib/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

3. Montaje con nombre y anónimo

#匿名挂载 -v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的卷信息
docker vplume ls
------------------------------
DRIVER              VOLUME NAME
local				9f38292179faal78afcce54d80be99d4ddd68c91d2a68870bcece72d2b7ed061

#具名挂载 -v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

docker volume Is
DRIVER              VOLUME NAME
local				juming-nginx

docker volume inspect juming-nginx
------------------------------------
Mountpoint:“/var/Lib/docker/voLumes/juming-nginx/_data”
#docker容器内没有指定目录时默认在 /var/Lib/docker/voLumes/xxx/_data
-v 容器路径	#匿名挂载
-v 卷名:容器路径	#具名挂载
-v /路径:容器路径	#路径挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

#ro readonly 只读权限-----只能通过宿主机操作,容器内无法操作
#rw readwrite	可读可写权限

4. Montaje de Dockerfile

vim dockerfile1
FROM centos
VOLUME ["volume1","volume1"]	#匿名挂载
CMD echo "-----end------"
CMD /bin/bash
docker build -f /home/dockerfile1 -t wddcentos:1.0 .#创建镜像

5. Sincronización del volumen de datos con diferentes contenedores

Contenedor principal: contenedor de volumen de datos

--volume-from #数据备份,双向拷贝
docker -it --name docker01 970ffe5b3623 #父容器
docker -it --name docker02 --volumes-from docker01 970ffe5b3623	#挂载docker01数据
docker -it --name docker03 --volumes-from docker01 970ffe5b3623	#挂载docker01数据
#docker01 docker02 docker03 挂载卷数据共享,持久化保存,删除某个容器数据仍存在

DockerFile

Dockerfile es un archivo de texto que se utiliza para construir un espejo. El texto contiene instrucciones e instrucciones para construir un espejo.

  • Crear file-vim file-docker build-docker run-docker commit-docker push

1. comando dockerfile

  • Mantenga las mayúsculas de las palabras clave

  • Cada comando es una capa

  • #Comentario

  • Contenedor DockerFile-Docker image-Docker

FROM 	#基础容器
MAINTAINER	#作者 姓名+邮箱
RUN		#用于执行后面跟着的命令行命令
ADD		#
WORKDIR	#镜像的工作目录
VOLUME	#挂载的目录
EXPOSE	#暴漏端口配置
CMD		#指定这个容据启动的时候要运行的今,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候运行的指今,可追加命令
ONBUILD	#用于延迟构建命令的执行,新的镜像使用镜像时,执行命令

Inserte la descripción de la imagen aquí

Docker-Compose

Administre imágenes escribiendo archivos docker-compose.yml

docker-compose up -d #启动docker-compose
docker-compose down  #关闭docker容器
docker-compose restart #重启docker容器
docker-compose up -d --build  #从新构建docker镜像

docker administrar redis

version: '3'
services:
  redis:
    restart: always
    image: redis:latest
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/usr/local/redis/redis.conf
      - ./logs:/logs
    command:
      redis-server /usr/local/redis/redis.conf"

docker-compose up -d
#Iniciar docker-compose down #Cerrar el contenedor de la ventana acoplable
docker-componer reiniciar #Restablecer el contenedor de la ventana acoplable
docker-compose up -d --build #Crear la imagen de la ventana acoplable a partir de la nueva

docker administrar redis

version: '3'
services:
  redis:
    restart: always
    image: redis:latest
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/usr/local/redis/redis.conf
      - ./logs:/logs
    command:
      redis-server /usr/local/redis/redis.conf"

Supongo que te gusta

Origin blog.csdn.net/qq_38473355/article/details/108705122
Recomendado
Clasificación