Usar montagens de associaçãoUse bind mounts

No capítulo anterior, você aprendeu e usou um volume nomeado para manter os dados em seu banco de dado.In the previous chapter, you learned about and used a named volume to persist the data in your database. Os volumes nomeados são ótimos se você simplesmente deseja armazenar dados, pois não precisa se preocupar com o local em que os dados são armazenados.Named volumes are great if you simply want to store data, as you don't have to worry about where the data is stored.

Com montagens de associação, você controla o mountpoint exato no host.With bind mounts, you control the exact mountpoint on the host. Você pode usar isso para manter dados, mas geralmente é usado para fornecer dados adicionais em contêineres.You can use this to persist data, but is often used to provide additional data into containers. Ao trabalhar em um aplicativo, você pode usar uma montagem de associação para montar o código-fonte no contêiner para permitir que ele veja alterações de código, responder e permitir que você veja as alterações imediatamente.When working on an application, you can use a bind mount to mount source code into the container to let it see code changes, respond, and let you see the changes right away.

Para aplicativos baseados em nó, nodemon é uma excelente ferramenta para observar alterações de arquivo e reiniciar o aplicativo.For Node-based applications, nodemon is a great tool to watch for file changes and then restart the application. Há ferramentas equivalentes na maioria das outras linguagens e estruturas.There are equivalent tools in most other languages and frameworks.

Comparações de tipo de volume rápidoQuick volume type comparisons

As montagens de ligação e os volumes nomeados são os dois tipos principais de volumes que acompanham o mecanismo do Docker.Bind mounts and named volumes are the two main types of volumes that come with the Docker engine. No entanto, drivers de volume adicionais estão disponíveis para dar suporte a outros casos de uso (SFTP, ceph, NetApp, S3e mais).However, additional volume drivers are available to support other uses cases (SFTP, Ceph, NetApp, S3, and more).

PropriedadeProperty Volumes nomeadosNamed Volumes Montagens por associaçãoBind Mounts
Local do hostHost Location O Docker escolheDocker chooses Você controlaYou control
Exemplo de montagem (usando -v )Mount Example (using -v) meu-volume:/usr/local/dadosmy-volume:/usr/local/data /path/to/data:/usr/local/data/path/to/data:/usr/local/data
Popula o novo volume com o conteúdo do contêinerPopulates new volume with container contents SimYes NãoNo
Dá suporte a drivers de volumeSupports Volume Drivers SimYes NãoNo

Iniciar um contêiner de modo de desenvolvimentoStart a dev-mode container

Para executar o contêiner para dar suporte a um fluxo de trabalho de desenvolvimento, você fará o seguinte:To run your container to support a development workflow, you'll do the following:

  • Monte seu código-fonte no contêinerMount your source code into the container
  • Instalar todas as dependências, incluindo as dependências de "desenvolvimento"Install all dependencies, including the "dev" dependencies
  • Iniciar nodemon para observar as alterações do sistema de arquivosStart nodemon to watch for filesystem changes
  1. Verifique se você não tem nenhum getting-started contêiner anterior em execução.Make sure you don't have any previous getting-started containers running.

  2. Execute o comando a seguir (substitua os \ caracteres por ` no Windows PowerShell).Run the following command (replace the \ characters with ` in Windows PowerShell). Você aprenderá o que está acontecendo posteriormente:You'll learn what's going on afterwards:

    docker run -dp 3000:3000 \
        -w /app -v ${PWD}:/app \
        node:12-alpine \
        sh -c "yarn install && yarn run dev"
    
    • -dp 3000:3000 -o mesmo que antes.-dp 3000:3000 - same as before. Executar no modo desanexado (segundo plano) e criar um mapeamento de portaRun in detached (background) mode and create a port mapping
    • -w /app -define o "diretório de trabalho" ou o diretório atual do qual o comando será executado-w /app - sets the "working directory" or the current directory that the command will run from
    • -v ${PWD}:/app -associar a montagem do diretório atual do host no contêiner no /app diretório-v ${PWD}:/app - bind mount the current directory from the host in the container into the /app directory
    • node:12-alpine -a imagem a ser usada.node:12-alpine - the image to use. Observe que essa é a imagem base para seu aplicativo do DockerfileNote that this is the base image for your app from the Dockerfile
    • sh -c "yarn install && yarn run dev" -o comando.sh -c "yarn install && yarn run dev" - the command. Estamos iniciando um shell usando sh (o Alpine Ski não tem bash ) e executamos yarn install para instalar todas as dependências e, em seguida, executar yarn run dev .We're starting a shell using sh (alpine doesn't have bash) and running yarn install to install all dependencies and then running yarn run dev. Se você olhar no, veremos package.json que o dev script está sendo iniciado nodemon .If you look in the package.json, we'll see that the dev script is starting nodemon.
  3. Você pode assistir aos logs usando docker logs -f <container-id> .You can watch the logs using docker logs -f <container-id>. Você saberá que está pronto para começar quando vir:You'll know you're ready to go when you see this:

    docker logs -f <container-id>
    $ nodemon src/index.js
    [nodemon] 1.19.2
    [nodemon] to restart at any time, enter `rs`
    [nodemon] watching dir(s): *.*
    [nodemon] starting `node src/index.js`
    Using sqlite database at /etc/todos/todo.db
    Listening on port 3000
    

    Quando você terminar de assistir aos logs, saia ao pressionar Ctrl + C .When you're done watching the logs, exit out by hitting Ctrl+C.

  4. Agora, faça uma alteração no aplicativo.Now, make a change to the app. No src/static/js/app.js arquivo, altere o botão Adicionar item para simplesmente dizer Adicionar.In the src/static/js/app.js file, change the Add Item button to simply say Add. Essa alteração estará na linha 109.This change will be on line 109.

    -                         {submitting ? 'Adding...' : 'Add Item'}
    +                         {submitting ? 'Adding...' : 'Add'}
    
  5. Basta atualizar a página (ou abri-la) e você verá a alteração refletida no navegador quase imediatamente.Simply refresh the page (or open it) and you should see the change reflected in the browser almost immediately. Pode levar alguns segundos para o servidor de nó reiniciar, portanto, se você receber um erro, basta tentar atualizar após alguns segundos.It might take a few seconds for the Node server to restart, so if you get an error, just try refreshing after a few seconds.

    Captura de tela do rótulo atualizado para o botão Adicionar

  6. Fique à vontade para fazer outras alterações que você gostaria de fazer.Feel free to make any other changes you'd like to make. Quando terminar, pare o contêiner e crie a nova imagem usando docker build -t getting-started . .When you're done, stop the container and build your new image using docker build -t getting-started ..

O uso de montagens de associação é muito comum para configurações de desenvolvimento local.Using bind mounts is very common for local development setups. A vantagem é que a máquina de desenvolvimento não precisa ter todas as ferramentas e ambientes de compilação instalados.The advantage is that the dev machine doesn't need to have all of the build tools and environments installed. Com um único docker run comando, o ambiente de desenvolvimento é puxado e pronto para uso.With a single docker run command, the dev environment is pulled and ready to go. Você aprenderá sobre Docker Compose em uma etapa futura, pois isso ajudará a simplificar seus comandos (você já está recebendo muitos sinalizadores).You'll learn about Docker Compose in a future step, as this will help simplify your commands (you're already getting a lot of flags).

RecapitulaçãoRecap

Neste ponto, você pode persistir seu banco de dados e responder rapidamente às necessidades e demandas de seus investidores e fundadores.At this point, you can persist your database and respond rapidly to the needs and demands of your investors and founders. Alegria!Hooray! Mas adivinhe?But, guess what? Você recebeu ótima notícia!You received great news!

Seu projeto foi selecionado para desenvolvimento futuro!Your project has been selected for future development!

Para se preparar para a produção, você precisa migrar seu banco de dados do trabalho no SQLite para algo que possa ser dimensionado um pouco melhor.In order to prepare for production, you need to migrate your database from working in SQLite to something that can scale a little better. Para simplificar, você continuará com um banco de dados relacional e alternará seu aplicativo para usar o MySQL.For simplicity, you'll keep with a relational database and switch your application to use MySQL. Mas como você deve executar o MySQL?But, how should you run MySQL? Como permitir que os contêineres se comuniquem entre si?How do you allow the containers to talk to each other? Você aprenderá sobre isso em seguida!You'll learn about that next!

Próximas etapasNext steps

Continue com o tutorial!Continue with the tutorial!