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
Verifique se você não tem nenhum
getting-started
contêiner anterior em execução.Make sure you don't have any previousgetting-started
containers running.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
directorynode: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 Dockerfilesh -c "yarn install && yarn run dev"
-o comando.sh -c "yarn install && yarn run dev"
- the command. Estamos iniciando um shell usandosh
(o Alpine Ski não tembash
) e executamosyarn install
para instalar todas as dependências e, em seguida, executaryarn run dev
.We're starting a shell usingsh
(alpine doesn't havebash
) and runningyarn install
to install all dependencies and then runningyarn run dev
. Se você olhar no, veremospackage.json
que odev
script está sendo iniciadonodemon
.If you look in thepackage.json
, we'll see that thedev
script is startingnodemon
.
Você pode assistir aos logs usando
docker logs -f <container-id>
.You can watch the logs usingdocker 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 hittingCtrl
+C
.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 thesrc/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'}
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.
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 usingdocker 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!