2.Gestión de contenedores Docker, gestión de almacenes, gestión de datos, copia de seguridad y recuperación del volumen de datos

Gestión de contenedores Docker

  • Cree un contenedor : docker create -it centos6 bash // Esto puede crear un contenedor, pero el contenedor no se inicia y docker ps no puede verlo. Necesita docker ps -a para ver

[root @ awei-01 ~] # docker create -it centos6 bash 
55a10d72564eecca7e11d9ed1d5950109e972a51a2c717102e7eca5a5d52f6df 
[root @ awei-01 ~] # docker ps 
ID DE CONTENEDOR IMAGEN COMANDO ESTADO CREADO 
NOMBRE Debe agregar la opción "-a" para verlo, porque no inició 
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO PUERTOS NOMBRES 
55a10d72564e centos6 "bash" hace 11 segundos Creado elated_kepler 
[root @ awei-01 ~] # docker exec -it 55a10d72564e bash ## No se inició, así que no puedo obtener la 
respuesta de error del demonio: El contenedor 55a10d72564eecca7e11d9ed1d5950109e972a51a2c717102e7eca5a5d52f6df no se está ejecutando

  • Inicie el contenedor : docker start container_id // Después de iniciar el contenedor, puede usar docker ps para ver que si hay inicio, hay parada y reinicio

[root @ awei-01 ~] # docker start 55a10d72564e 
55a10d72564e 
[root @ awei-01 ~] # docker ps 
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO PUERTOS NOMBRES 
55a10d72564e centos6 "bash" Hace aproximadamente un minuto Arriba 11 segundos elated_kepler

 ps: la ejecución de la ventana acoplable que usamos antes es equivalente a crear y luego comenzar

  • Ingrese al contenedor y ya no se ejecute en segundo plano: docker run -it centos bash

Si sales del contenedor directamente, docker ps no podrá verlo porque no se ejecutará en segundo plano sin la opción d. Si sales con ctrl + d, saldrás directamente. De esta forma, podemos ejecutar algunos comandos en una terminal virtual. Use el comando exit o ctrl d para salir del bash, y el contenedor se detendrá después de salir.

  • Ejecute el contenedor en segundo plano : docker run -d más la opción "-d" permite que el contenedor se ejecute en segundo plano

     También puede escribir un bucle infinito (que rara vez se usa): docker run -d centos bash -c "while:; do echo" 123 "; sleep 2; done"

  • Nombre personalizado para iniciar el contenedor : docker run  --name Nombre personalizado  -itd  para iniciar la imagen  bash //

[root @ awei-01 ~] # docker run --name awei -itd centos6 bash 
d8ba554eae2df6254945e3ce21b09d9f252fba98fba13872ea31c69240ae364c 
[root @ awei-01 ~] # docker ps 
ID DE CONTENEDOR IMAGEN COMANDO 
NECESAM4 ESTADO DE ARRIBA 12 segundos " awei 
55a10d72564e centos6 "bash" Hace 22 minutos Hasta 20 minutos elated_kepler

   Puede ingresar al contenedor directamente por su nombre

[root @ awei-01 ~] # docker exec -it awei bash 
[root @ d8ba554eae2d /] #
  • Inicie el contenedor y ejecute el comando : docker run --rm -it centos bash -c "sleep 30" // - rm puede eliminar el contenedor directamente después de salir, aquí el contenedor saldrá después de ejecutar el comando

  • Ver registros de contenedores : los registros de Docker container_id pueden obtener la información del historial de ejecución del contenedor, el uso es el siguiente 

docker attach puede entrar en un contenedor que se ejecuta en segundo plano, como

docker attach container_id // Pero el comando attach no es fácil de usar. Por ejemplo, si queremos salir de la terminal, tenemos que salir, para que salga el contenedor. Hay otra forma

  • Entrar en el contenedor

docker exec -it container_id bash // Puede abrir temporalmente una terminal virtual y, después de salir, el contenedor aún se está ejecutando

  • Eliminar contenedor

docker rm container_id // container_id está marcado cuando ps, por lo que puede eliminar el contenedor, si es un contenedor en ejecución, puede agregar -f

  • Contenedor de exportación

docker export container_id> file.tar // Exportar el contenedor, que se puede migrar a otras máquinas y debe importarse

  • Importar contenedor

cat file.tar | docker import-aming_test // Esto generará un espejo de aming_test


Gestión de almacén de Docker

Porque no importa si tira del espejo o empuja el espejo de carga, irá al almacén público oficial. Para mayor privacidad, podemos crear nuestro propio almacén privado.

Cree un método de almacén privado:

  • Descargue la imagen de registro: docker pull registry // registy es una imagen oficial proporcionada por Docker, que puede ejecutar un contenedor y podemos usarla para crear un almacén privado de Docker local.

  • Inicie la imagen del registro como un contenedor: docker run -d -p 5000: 5000 registro // - p asignará el puerto del contenedor al host: el lado izquierdo es el puerto de escucha del host y el derecho es el puerto de escucha del contenedor

[root @ localhost ~] # docker run -d -p 5000: 5000 registro 
ADVERTENCIA: el reenvío de IPv4 está deshabilitado. La creación de redes no funcionará. 
b31501bfcb453be61b2d0da0589d9c0fbc36c4a954967deeb86d112552bc99c2 
[root @ localhost ~] # docker ps 
ID DE CONTENEDOR COMANDO DE IMAGEN CREADO ESTADO PUERTOS NOMBRES 
b31501bfcb45 registro hace "/entrypoint" 40.05.sh / etc.
  • Visite el almacén : curl 127.0.0.1:5000/v2/_catalog // Este almacén está temporalmente vacío, debe cargar una imagen reflejada

[root @ localhost ~] # curl 127.0.0.1:5000/v2/_catalog 
{"repositories": []}

Cómo subir la imagen al almacén privado:

  • Primero etiqueta la imagen que quieres subir

Formato: nombre de la imagen de la etiqueta de la ventana acoplable que se va a etiquetar IP del host: puerto del host / nombre de la etiqueta

docker tag centos6 192.168.238.128:5000/centos6  // Marque la etiqueta, debe tener la ip: puerto del almacén privado

  • Empuje la imagen marcada al almacén privado

docker push 192.168.238.128:5000/centos6

En este momento, no tendrá éxito e informará un error (porque quiere usar la dirección https de forma predeterminada)

[root @ localhost ~] # docker push 192.168.238.128:5000/centos6 
Usando la etiqueta predeterminada: latest 
El push se refiere al repositorio [192.168.238.128:5000/centos6] 
Obtenga https://192.168.238.128:5000/v2/: http : el servidor dio una respuesta HTTP al cliente HTTPS

Cambie el archivo de configuración y cambie vi /etc/docker/daemon.json// a los siguientes parámetros (la dirección del almacén privado, porque usa https por defecto pero queremos usar http)

{"registros inseguros": ["192.168.18.128:5000"]}

重启 docker: systemctl restart docker

Iniciar registro: id del registro de inicio de Docker 

Empujar de nuevo

docker push 192.168.238.128:5000/centos

[root @ localhost ~] # docker push 192.168.238.128:5000/centos6 
Usando la etiqueta predeterminada: latest 
El push se refiere al repositorio [192.168.238.128:5000/centos6] 
0a2f11f7b1ef: Pulsado  
latest: digest: sha256: aaa6c8af8eaa472d6606675c5ae867d8967

curl 127.0.0.1:5001/v2/_catalog // Puede ver la imagen enviada

[root @ localhost ~] # curl 127.0.0.1:5000/v2/_catalog 
{"repositories": ["centos6"]}
  • Otros hosts descargan y usan métodos de almacenamiento privado :

También puede descargar la imagen que acaba de cargar en su propio almacén en otros hosts. Primero, el servidor debe tener un programa de docker, y luego el grupo de extracción de docker  ip: puerto / nombre de imagen.

Configure la dirección IP del archivo de configuración /etc/docker/daemon.json, configúrelo como un servidor de almacén, y luego puede extraerlo


Gestión de datos de Docker

Debido a que su contenedor se abre mediante un espejo, cuando escribe nuevos datos o actualiza nuevos datos en el contenedor, elimina el espejo o cierra los datos y los elimina, lo cual es un cierto riesgo

Solución: puede montar un directorio de la computadora host en el contenedor, y luego escribirá en el disco de la computadora host cuando escriba datos

  • Monte el directorio local en el contenedor

docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建

  • 挂载数据卷

其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为relaxed_franklin,这个名字可以使用命令 docker ps  看最右侧一列

我们开启一个新的镜像,并指定一个之前可共享的容器:

docker run -itd --volumes-from 共享容器名 要启动的容器名 bash

--volumes-from:指定共享的容器名,其实就是一个数据卷容器 relaxed_franklin:容器名 aming123:新开启的容器叫什么

这样,我们使用aming123镜像创建了新的容器,并且使用了 relaxed_franklin  容器的数据卷

  •  创建数据卷容器

有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。

首先建立数据卷容器

-v选项:共享目录

docker run -itd -v /data/ --name testvol centos  bash  //注意这里的/data/是容器的/data目录,并非本地的/data/目录。这样加-v选项意思就是把容器的data目录共享出来 

然后让其他容器挂载该数据卷

docker run -itd  --volumes-from testvol aming123 bash

小结:-v选项的两种用法

第一种是挂载映射的作用:-v /data/:/data 把宿主机的data目录挂载到容器里的data目录上

第二种是把容器的某个盘共享出来:-v /data/ 把容器的data目录共享出来当数据卷使用

分享的目录是什么,那挂载的目录就是什么,我分享的是data目录,如果我其中一个容器是data,另一个想是home怎么办,做软连接

软连接:ln -s /data/ /home/


Docker数据卷的备份与恢复

适用于数据卷容器没有映射宿主机目录的情况下

备份

创建目录:mkdir /data/backup (宿主机)

docker run --volumes-from testvol -v  /data/backup/:/backup centos tar cvf  /backup/data.tar /data/

说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。

恢复

思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。

新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash

挂载数据卷新建容器,并解包:docker run --volumes-from testvol2  -v /data/backup/:/backup centos tar xf /backup/data.tar

image.png

1机器共享出/data/目录

2机器在开启的时候使用1镜像创建了新的容器,挂载了1机器的数据卷那么2机器上也会有1机器上共享出来的/data/目录

2机器在自己挂在一个目录(/backup)到宿主机上的一个目录(/data/backup/)

然后2机器把之前/data/目录的数据拷贝到/backup/下,/backup/自然也会映射到宿主机的/data/backup/


Supongo que te gusta

Origin blog.51cto.com/12922638/2591043
Recomendado
Clasificación