Learning Docker, Parte 6: Traballar con datos

Na parte de hoxe da tradución dunha serie de materiais sobre Docker, falaremos do traballo con datos. En particular, sobre os volumes de Docker. Nestes materiais, comparamos constantemente os mecanismos de programación de Docker con varias analoxías comestibles. Non nos desviaremos desta tradición aquí. Deixa que os datos de Docker sexan condimentos. Hai moitas especias no mundo e Docker ten moitas formas de traballar con datos.

Parte 1: Fundamentos
Parte 2: termos e conceptos
Parte 3: Dockerfiles
Parte 4: Reducir o tamaño das imaxes e acelerar a súa montaxe
Parte 5: ordes
Parte 6: traballo con datos

Learning Docker, Parte 6: Traballar con datos

Teña en conta que este material foi preparado usando a versión do motor Docker 18.09.1 ​​​​e a versión API 1.39.

Os datos en Docker pódense almacenar de forma temporal ou permanente. Comecemos cos datos temporais.

Almacenamento temporal de datos

Hai dúas formas de xestionar os datos temporais nos contedores de Docker.

De forma predeterminada, os ficheiros creados por unha aplicación que se executa nun contedor gárdanse nunha capa de contenedor escribible. Para que este mecanismo funcione, non é necesario configurar nada especial. Resulta barato e alegre. A aplicación simplemente ten que gardar os datos e seguir facendo as súas propias cousas. Non obstante, despois de que o contedor deixe de existir, os datos gardados de xeito tan sinxelo tamén desaparecerán.

O almacenamento temporal de ficheiros en Docker é outra solución adecuada para os casos nos que necesites un nivel de rendemento superior ao que se pode conseguir mediante o mecanismo de almacenamento temporal de datos estándar. Se non precisas que os teus datos se almacenen máis tempo do que existe o contedor, podes conectarte co contedor tmpfs, un almacén de información temporal que utiliza a memoria RAM do host. Isto acelerará a execución das operacións de escritura e lectura de datos.

Moitas veces ocorre que os datos deben almacenarse mesmo despois de que o contedor deixe de existir. Para iso, necesitamos mecanismos de almacenamento de datos persistentes.

Almacenamento de datos persistente

Hai dúas formas de aumentar a vida útil dos datos que a vida útil do contedor. Unha forma é usar a tecnoloxía de montaxe de enlace. Con este enfoque, pode montar, por exemplo, un cartafol real no contedor. Os procesos fóra de Docker tamén poderán traballar con datos almacenados neste cartafol. Así é como mirar tecnoloxía de montaxe e montaxe de tmpfs.

Learning Docker, Parte 6: Traballar con datos
Montaxe de tmpfs e montaxe de enlace

As desvantaxes do uso da tecnoloxía de montaxe de enlace son que o seu uso complica a copia de seguridade de datos, a migración de datos, o intercambio de datos entre varios contedores. É moito mellor usar os volumes Docker para o almacenamento de datos persistente.

Docker de volumes

Un volume é un sistema de ficheiros que se atopa na máquina host fóra dos contedores. Os volumes son creados e xestionados por Docker. Estas son as principais propiedades dos volumes Docker:

  • Son un medio de almacenamento permanente de información.
  • Son independentes e separados dos recipientes.
  • Pódense compartir entre diferentes recipientes.
  • Permítenche organizar unha lectura e escritura eficientes dos datos.
  • Os volumes pódense colocar nos recursos dun provedor de nube remoto.
  • Poden ser cifrados.
  • Pódeselles poñer nomes.
  • O contedor pode organizar a prepoboación do volume con datos.
  • Son convenientes para probar.

Como podes ver, os volumes Docker teñen propiedades sorprendentes. Falemos de como crealos.

Creación de volumes

Os volumes pódense crear mediante solicitudes de Docker ou API.

Aquí tes unha instrución no Dockerfile que che permite crear un volume ao iniciar un contedor.

VOLUME /my_volume

Cando se utiliza unha instrución similar, Docker, despois de crear o contedor, creará un volume que contén os datos que xa existen na localización especificada. Teña en conta que se crea un volume usando un ficheiro Dockerfile, isto non o exime da necesidade de especificar o punto de montaxe do volume.

Tamén pode crear volumes nun Dockerfile usando o formato JSON.

Ademais, pódense crear volumes usando ferramentas de liña de comandos mentres o contedor está en execución.

Traballar con volumes desde a liña de comandos

▍Creación de volumes

Podes crear un volume autónomo co seguinte comando:

docker volume create —-name my_volume

▍Descubra información sobre volumes

Para ver unha lista de volumes Docker, use o seguinte comando:

docker volume ls

Podes explorar un volume específico como este:

docker volume inspect my_volume

▍Eliminar un volume

Podes eliminar un volume coma este:

docker volume rm my_volume

Para eliminar todos os volumes que non son utilizados polos contedores, pode recorrer ao seguinte comando:

docker volume prune

Antes de eliminar volumes, Docker pedirache que confirmes esta operación.

Se un volume está asociado a un contedor, ese volume non se pode eliminar ata que se elimine o contedor correspondente. Ao mesmo tempo, aínda que se elimine o contedor, Docker non sempre entende isto. Se isto ocorre, pode usar o seguinte comando:

docker system prune

Está deseñado para limpar os recursos de Docker. Despois de executar este comando, deberías poder eliminar volumes cuxo estado era incorrecto anteriormente.

As bandeiras --mount e --volume

Para traballar con volumes, cando chamas ao comando docker, moitas veces terás que usar bandeiras. Por exemplo, para crear un volume durante a creación do contedor, pode usar esta construción:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

Nos tempos antigos (ata 2017), a bandeira era popular --volume. Inicialmente, esta bandeira (tamén se pode usar nunha forma abreviada, despois parece -v) utilizouse para contedores autónomos e a bandeira --mount - nun ambiente Docker Swarm. Non obstante, a partir de Docker 17.06, a bandeira --mount pode ser usado en calquera escenario.

Hai que ter en conta que ao usar a bandeira --mount a cantidade de datos adicionais que se deben especificar no comando aumenta, pero, por varias razóns, é mellor usar esta bandeira en particular e non --volume. Bandeira --mount é o único mecanismo que che permite traballar con servizos ou especificar opcións de controlador de volume. Ademais, esta bandeira é máis fácil de traballar.

Nos exemplos existentes de comandos de manipulación de datos de Docker, podes ver moitos exemplos do uso da bandeira -v. Cando intentes adaptar estes comandos por ti mesmo, ten en conta que as bandeiras --mount и --volume utilizar diferentes formatos de parámetros. É dicir, non pode simplemente substituír -v en --mount e conseguir un equipo de traballo.

A principal diferenza entre --mount и --volume é que ao usar a bandeira --volume todos os parámetros recóllense nun só campo e cando se usan --mount parámetros están separados.

Ao traballar con --mount os parámetros represéntanse como pares clave-valor, é dicir, parece key=value. Estes pares están separados por comas. Aquí están as opcións de uso habitual --mount:

  • type - Tipo de montaxe. O valor para a chave correspondente pode ser vincular, volume ou tmpfs. Aquí falamos de volumes, é dicir, interésanos o valor volume.
  • source - fonte de montaxe. Para volumes con nome, este é o nome do volume. Para volumes sen nome, esta chave non está especificada. Pódese acurtar a src.
  • destination - o camiño no que se monta o ficheiro ou cartafol no contedor. Esta chave pódese acurtar a dst ou target.
  • readonly - monta o volume que se pretende só para ler. O uso desta chave é opcional e non se lle asigna ningún valor.

Aquí tes un exemplo de uso --mount con moitas opcións:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Resultados de

Aquí tes algúns comandos útiles que podes usar cando traballas con volumes Docker:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Aquí tes unha lista de opcións de uso común para --mount, aplicable nun comando do formulario docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Agora que completamos esta serie de Docker, é hora de dicir algunhas palabras sobre onde poden ir os alumnos de Docker. Aquí excelente artigo sobre Docker. Aquí un libro sobre Docker (ao mercar este libro, tenta obter a edición máis recente del). Aquí outro libro para aqueles que pensan que a práctica é a mellor forma de aprender tecnoloxía.

Queridos lectores! Que materiais de Docker recomendarías para que aprendan os principiantes?

Learning Docker, Parte 6: Traballar con datos

Fonte: www.habr.com

Engadir un comentario