바인드 탑재 사용Use bind mounts

이전 챕터에서는 명명된 볼륨 에 대해 설명하고 데이터베이스의 데이터를 유지하는 데 사용했습니다.In the previous chapter, you learned about and used a named volume to persist the data in your database. 명명된 볼륨을 사용하면 데이터 저장 ‘위치’에 대해 걱정하지 않아도 되므로 단순히 데이터를 저장하려는 경우에 유용합니다.Named volumes are great if you simply want to store data, as you don't have to worry about where the data is stored.

바인드 탑재 를 사용하면 호스트의 탑재 지점을 정확하게 제어할 수 있습니다.With bind mounts, you control the exact mountpoint on the host. 이 유형은 데이터 유지뿐 아니라 컨테이너에 추가 데이터를 제공하는 데에도 사용됩니다.You can use this to persist data, but is often used to provide additional data into containers. 애플리케이션 작업 시 바인드 탑재를 사용하여 소스 코드를 컨테이너에 탑재하면 변경 내용을 즉시 확인할 수 있으며, 컨테이너가 코드 변경을 확인하고 응답하게 할 수 있습니다.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.

노드 기반 애플리케이션에서 nodemon은 파일 변경을 감시하고 애플리케이션을 다시 시작하는 유용한 도구입니다.For Node-based applications, nodemon is a great tool to watch for file changes and then restart the application. 대부분의 다른 언어와 프레임워크에도 동등한 도구가 있습니다.There are equivalent tools in most other languages and frameworks.

볼륨 유형 빠른 비교Quick volume type comparisons

바인드 탑재와 명명된 볼륨은 Docker 엔진과 함께 제공되는 두 가지 기본 볼륨 유형입니다.Bind mounts and named volumes are the two main types of volumes that come with the Docker engine. 그러나 다른 사용 사례(SFTP, Ceph, NetApp, S3 등)를 지원하기 위해 추가 볼륨 드라이버도 사용할 수 있습니다.However, additional volume drivers are available to support other uses cases (SFTP, Ceph, NetApp, S3, and more).

속성Property 명명된 볼륨Named Volumes 바인딩 마운트Bind Mounts
호스트 위치Host Location Docker 선택Docker chooses 사용자 제어You control
탑재 예(-v 사용)Mount Example (using -v) my-volume:/usr/local/datamy-volume:/usr/local/data /path/to/data:/usr/local/data/path/to/data:/usr/local/data
새 볼륨에 컨테이너 내용을 채웁니다.Populates new volume with container contents Yes 아니요No
볼륨 드라이버 지원Supports Volume Drivers Yes 아니요No

개발 모드 컨테이너 시작Start a dev-mode container

컨테이너를 실행하여 개발 워크플로를 지원하려면 다음을 수행합니다.To run your container to support a development workflow, you'll do the following:

  • 컨테이너에 소스 코드 탑재Mount your source code into the container
  • “dev” 종속성을 포함하여 모든 종속성 설치Install all dependencies, including the "dev" dependencies
  • nodemon을 시작하여 파일시스템 변경 감시Start nodemon to watch for filesystem changes
  1. 이전 getting-started 컨테이너가 실행되고 있지는 않은지 확인합니다.Make sure you don't have any previous getting-started containers running.

  2. 다음 명령을 실행합니다(Windows PowerShell에서 \ 문자를 `로 바꿈).Run the following command (replace the \ characters with ` in Windows PowerShell). 코드에서 수행하는 작업은 나중에 알아보겠습니다.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 - 이전과 같습니다.-dp 3000:3000 - same as before. 백그라운드에서 분리 모드로 실행되며 포트 매핑을 만듭니다.Run in detached (background) mode and create a port mapping
    • -w /app - 명령이 실행되는 현재 디렉터리 또는 “작업 디렉터리”를 설정합니다.-w /app - sets the "working directory" or the current directory that the command will run from
    • -v ${PWD}:/app - 컨테이너에 있는 호스트의 현재 디렉터리를 /app 디렉터리로 바인드 탑재합니다.-v ${PWD}:/app - bind mount the current directory from the host in the container into the /app directory
    • node:12-alpine - 사용할 이미지입니다.node:12-alpine - the image to use. Dockerfile에 있는 앱의 기본 이미지입니다.Note that this is the base image for your app from the Dockerfile
    • sh -c "yarn install && yarn run dev" - 명령입니다.sh -c "yarn install && yarn run dev" - the command. sh를 사용하여 셸을 시작하고(alpine에는 bash가 없음) yarn install을 실행하여 ‘모든’ 종속성을 설치한 다음, 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. package.json을 살펴보면 dev 스크립트에서 nodemon을 시작하는 것을 확인할 수 있습니다.If you look in the package.json, we'll see that the dev script is starting nodemon.
  3. docker logs -f <container-id>를 사용하여 로그를 확인할 수 있습니다.You can watch the logs using docker logs -f <container-id>. 다음과 같이 표시되면 사용할 준비가 된 것입니다.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
    

    로그 확인을 마쳤으면 Ctrl+C를 눌러 종료합니다.When you're done watching the logs, exit out by hitting Ctrl+C.

  4. 이제 앱을 변경합니다.Now, make a change to the app. src/static/js/app.js 파일에서 단추를 로 표시되도록 변경합니다.In the src/static/js/app.js file, change the Add Item button to simply say Add. 이 변경 내용은 109줄에 있습니다.This change will be on line 109.

    -                         {submitting ? 'Adding...' : 'Add Item'}
    +                         {submitting ? 'Adding...' : 'Add'}
    
  5. 페이지를 새로 고치거나 열면, 거의 즉시 브라우저에 변경 내용이 표시됩니다.Simply refresh the page (or open it) and you should see the change reflected in the browser almost immediately. 노드 서버를 다시 시작하는 데 몇 초 정도 걸릴 수 있으므로, 오류가 표시되면 몇 초 후에 새로 고쳐 보세요.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.

    업데이트된 Add 단추 레이블 스크린샷

  6. 필요에 따라 다른 내용을 변경합니다.Feel free to make any other changes you'd like to make. 완료되면 컨테이너를 중지하고, docker build -t getting-started .를 사용하여 새 이미지를 빌드합니다.When you're done, stop the container and build your new image using docker build -t getting-started ..

바인드 탑재 사용은 로컬 개발 설정에서 ‘매우’ 일반적입니다.Using bind mounts is very common for local development setups. 개발 머신에 모든 빌드 도구와 환경을 설치할 필요가 없다는 이점이 있기 때문입니다.The advantage is that the dev machine doesn't need to have all of the build tools and environments installed. 단일 docker run 명령을 사용하면 개발 환경이 풀되어 바로 사용할 수 있습니다.With a single docker run command, the dev environment is pulled and ready to go. 명령 간소화에 도움이 되는 Docker Compose도 이후 단계에서 알아보겠습니다(이미 많은 플래그가 제공됨).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).

요약Recap

이제 데이터베이스를 유지하고 투자자와 경영진의 다양한 요구 사항에 신속하게 대응할 수 있습니다.At this point, you can persist your database and respond rapidly to the needs and demands of your investors and founders. 이에 따라Hooray! 좋은 결과를But, guess what? 얻게 됩니다.You received great news!

진행 중인 프로젝트가 향후 개발 프로젝트로 선정된 것입니다!Your project has been selected for future development!

프로덕션을 준비하기 위해 데이터베이스를 SQLite 작동 환경에서 좀 더 효과적으로 스케일링되는 환경으로 마이그레이션해야 합니다.In order to prepare for production, you need to migrate your database from working in SQLite to something that can scale a little better. 편의상, 관계형 데이터베이스를 유지하고 MySQL을 사용하도록 애플리케이션을 전환하겠습니다.For simplicity, you'll keep with a relational database and switch your application to use MySQL. 하지만 MySQL을 실행하려면 어떻게 해야 할까요?But, how should you run MySQL? 컨테이너 간 통신을 어떻게 허용할 수 있을까요?How do you allow the containers to talk to each other? 다음에는 이 내용에 대해 알아보겠습니다.You'll learn about that next!

다음 단계Next steps

자습서를 계속 진행합니다.Continue with the tutorial!