From 310dfbe856b706c37c38f7b190e27e35f04ecc66 Mon Sep 17 00:00:00 2001 From: David Karlsson Date: Wed, 14 Dec 2022 16:23:46 +0100 Subject: [PATCH] feedback: improve getting started documentation on bind mounts Signed-off-by: David Karlsson --- get-started/05_persisting_data.md | 40 ++-- get-started/06_bind_mounts.md | 267 +++++++++++++++------- get-started/images/bind-mount-newfile.png | Bin 0 -> 31321 bytes 3 files changed, 202 insertions(+), 105 deletions(-) create mode 100644 get-started/images/bind-mount-newfile.png diff --git a/get-started/05_persisting_data.md b/get-started/05_persisting_data.md index bcab809721..2deb31aaeb 100644 --- a/get-started/05_persisting_data.md +++ b/get-started/05_persisting_data.md @@ -31,7 +31,7 @@ What you'll see is that the files created in one container aren't available in a 2. Validate that you can see the output by accessing the terminal in the container. To do so, go to **Containers** in Docker Desktop, hover over the container running the **ubuntu** image, and select the **Show container actions** menu. From the dropdown menu, select **Open in terminal**. - You will see a terminal that is running a shell in the ubuntu container. Run the following command to see the content of the `/data.txt` file. Close this terminal afterwards again. + You will see a terminal that is running a shell in the Ubuntu container. Run the following command to see the content of the `/data.txt` file. Close this terminal afterwards again. ```console $ cat /data.txt @@ -69,11 +69,11 @@ the container back to the host machine. If a directory in the container is mount directory are also seen on the host machine. If we mount that same directory across container restarts, we'd see the same files. -There are two main types of volumes. We will eventually use both, but we will start with **named volumes**. +There are two main types of volumes. We will eventually use both, but we will start with volume mounts. ## Persist the todo data -By default, the todo app stores its data in a [SQLite Database](https://www.sqlite.org/index.html){:target="_blank" rel="noopener" class="_"} at +By default, the todo app stores its data in a SQLite database at `/etc/todos/todo.db` in the container's filesystem. If you're not familiar with SQLite, no worries! It's simply a relational database in which all of the data is stored in a single file. While this isn't the best for large-scale applications, it works for small demos. We'll talk about switching this to a different database engine later. @@ -83,9 +83,9 @@ next container, it should be able to pick up where the last one left off. By cre (often called "mounting") it to the directory the data is stored in, we can persist the data. As our container writes to the `todo.db` file, it will be persisted to the host in the volume. -As mentioned, we are going to use a **named volume**. Think of a named volume as simply a bucket of data. -Docker maintains the physical location on the disk and you only need to remember the name of the volume. -Every time you use the volume, Docker will make sure the correct data is provided. +As mentioned, we are going to use a volume mount. Think of a volume mount as an opaque bucket of data. +Docker fully manages the volume, including where it is stored on disk. You only need to remember the +name of the volume. 1. Create a volume by using the `docker volume create` command. @@ -95,11 +95,11 @@ Every time you use the volume, Docker will make sure the correct data is provide 2. Stop and remove the todo app container once again in the Dashboard (or with `docker rm -f `), as it is still running without using the persistent volume. -3. Start the todo app container, but add the `-v` flag to specify a volume mount. We will use the named volume and mount - it to `/etc/todos`, which will capture all files created at the path. +3. Start the todo app container, but add the `--mount` option to specify a volume mount. We will give the volume a name, and mount + it to `/etc/todos` in the container, which will capture all files created at the path. ```console - $ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started + $ docker run -dp 3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started ``` 4. Once the container starts up, open the app and add a few items to your todo list. @@ -117,17 +117,9 @@ Every time you use the volume, Docker will make sure the correct data is provide Hooray! You've now learned how to persist data! ->**Note** -> ->While named volumes and bind mounts (which we'll talk about in a minute) are the two main types of volumes supported ->by a default Docker engine installation, there are many volume driver plugins available to support NFS, SFTP, NetApp, ->and more! This will be especially important once you start running containers on multiple hosts in a clustered ->environment with Swarm, Kubernetes, etc. -> - ## Dive into the volume -A lot of people frequently ask "Where is Docker _actually_ storing my data when I use a named volume?" If you want to know, +A lot of people frequently ask "Where is Docker storing my data when I use a volume?" If you want to know, you can use the `docker volume inspect` command. ```console @@ -148,11 +140,11 @@ $ docker volume inspect todo-db The `Mountpoint` is the actual location on the disk where the data is stored. Note that on most machines, you will need to have root access to access this directory from the host. But, that's where it is! ->**Accessing volume data directly on Docker Desktop** -> ->While running in Docker Desktop, the Docker commands are actually running inside a small VM on your machine. ->If you wanted to look at the actual contents of the Mountpoint directory, you would need to first get inside ->of the VM. +> **Accessing volume data directly on Docker Desktop** +> +> While running in Docker Desktop, the Docker commands are actually running inside a small VM on your machine. +> If you wanted to look at the actual contents of the Mount point directory, you would need to look inside of +> that VM. ## Next steps @@ -161,4 +153,4 @@ At this point, you have a functioning application that can survive restarts! You However, you saw earlier that rebuilding images for every change takes quite a bit of time. There's got to be a better way to make changes, right? With bind mounts (which was hinted at earlier), there is a better way! -[Use bind mounts](06_bind_mounts.md){: .button .primary-btn} \ No newline at end of file +[Use bind mounts](06_bind_mounts.md){: .button .primary-btn} diff --git a/get-started/06_bind_mounts.md b/get-started/06_bind_mounts.md index e2d2b7627e..ebbbac4031 100644 --- a/get-started/06_bind_mounts.md +++ b/get-started/06_bind_mounts.md @@ -1,121 +1,226 @@ --- title: "Use bind mounts" -keywords: get started, setup, orientation, quickstart, intro, concepts, containers, docker desktop +keywords: > + get started, setup, orientation, quickstart, intro, concepts, containers, + docker desktop description: Using bind mounts in our application --- -In the previous chapter, we talked about and used a **named volume** to persist the data in our database. -Named volumes are great if we simply want to store data, as we don't have to worry about _where_ the data -is stored. +In the previous chapter, we talked about and used a volume mount to persist the +data in our database. A volume mount is a great choice when you need somewhere +persistent to store your application data. -With **bind mounts**, we control the exact mountpoint on the host. We can use this to persist data, but it's often -used to provide additional data into containers. When working on an application, we can use a bind mount to -mount our source code into the container to let it see code changes, respond, and let us see the changes right -away. +A bind mount is another type of mount, which lets you share a directory from the +host's filesystem into the container. When working on an application, you can +use a bind mount to mount source code into the container. The container sees the +changes you make to the code immediately, as soon as you save a file. This means +that you can run processes in the container that watch for filesystem changes +and respond to them. -For Node-based applications, [nodemon](https://npmjs.com/package/nodemon){:target="_blank" rel="noopener" class="_"} is a great tool to watch for file -changes and then restart the application. There are equivalent tools in most other languages and frameworks. +In this chapter, we'll see how we can use bind mounts and a tool called +[nodemon](https://npmjs.com/package/nodemon){:target="_blank" rel="noopener" +class="_"} to watch for file changes, and then restart the application +automatically. There are equivalent tools in most other languages and +frameworks. ## Quick volume type comparisons -Bind mounts and named volumes are the two main types of volumes that come with the Docker engine. However, additional -volume drivers are available to support other use cases ([SFTP](https://github.com/vieux/docker-volume-sshfs){:target="_blank" rel="noopener" class="_"}, [Ceph](https://ceph.com/geen-categorie/getting-started-with-the-docker-rbd-volume-plugin/){:target="_blank" rel="noopener" class="_"}, [NetApp](https://netappdvp.readthedocs.io/en/stable/){:target="_blank" rel="noopener" class="_"}, [S3](https://github.com/elementar/docker-s3-volume){:target="_blank" rel="noopener" class="_"}, and more). +The following table outlines the main differences between volume mounts and bind +mounts. -| | Named Volumes | Bind Mounts | -| - | ------------- | ----------- | -| Host Location | Docker chooses | You control | -| Mount Example (using `-v`) | my-volume:/usr/local/data | /path/to/data:/usr/local/data | -| Populates new volume with container contents | Yes | No | -| Supports Volume Drivers | Yes | No | +| | Named volumes | Bind mounts | +| -------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------- | +| Host location | Docker chooses | You decide | +| Mount example (using `--mount`) | `type=volume,src=my-volume,target=/usr/local/data` | `type=bind,src=/path/to/data,target=/usr/local/data` | +| Populates new volume with container contents | Yes | No | +| Supports Volume Drivers | Yes | No | -## Start a dev-mode container +## Trying out bind mounts -To run our container to support a development workflow, we will do the following: +Before looking at how we can use bind mounts for developing our application, +let's run a quick experiment to get a practical understanding of how bind mounts +work. + +If you're following these steps on Windows, make sure to use PowerShell and not +command prompt (`cmd`). + +1. Open a terminal and make sure your current working directory is in the `app` + directory of the getting started repository. + +2. Run the following command to start `bash` in an `ubuntu` container with a + bind mount. + + ```console + $ docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bash + ``` + + The `--mount` option tells Docker to create a bind mount, where `src` is the + current working directory on your host machine (`getting-started/app`), and + `target` is where that directory should appear inside the container (`/src`). + +3. After running the command, Docker starts an interactive `bash` session in the + root directory of the container's filesystem. + + ```console + root@ac1237fad8db:/# pwd + / + root@ac1237fad8db:/# ls + bin dev home media opt root sbin srv tmp var + boot etc lib mnt proc run src sys usr + ``` + +4. Now, change directory in the `src` directory. + + This is the directory that you mounted when starting the container. Listing + the contents of this directory displays the same files as in the + `getting-started/app` directory on your host machine. + + ```console + root@ac1237fad8db:/# cd src + root@ac1237fad8db:/src# ls + Dockerfile node_modules package.json spec src yarn.lock + ``` + +5. Create a new file named `myfile.txt`. + + ```console + root@ac1237fad8db:/src# touch myfile.txt + root@ac1237fad8db:/src# ls + Dockerfile myfile.txt node_modules package.json spec src yarn.lock + ``` + +6. Now if you open this directory on the host, you'll see the `myfile.txt` file + has been created in the directory. + + ![File viewer on the host machine that sees the file created from the container](images/bind-mount-newfile.png) + +7. From the host, delete the `myfile.txt` file. +8. In the container, list the contents of the `app` directory once more. You'll + see that the file is now gone. + + ```console + root@ac1237fad8db:/src# ls + Dockerfile node_modules package.json spec src yarn.lock + ``` + +9. Stop the interactive container session with `Ctrl` + `D`. + +And that's all for a brief introduction to bind mounts. This procedure +demonstrated how files are shared between the host and the container, and how +changes are immediately reflected on both sides. Now let's see how we can use +bind mounts to develop software. + +## Run your app in a development container + +The following steps describe how to run a development container with a bind +mount that does the following: - Mount our source code into the container -- Install all dependencies, including the "dev" dependencies -- Start nodemon to watch for filesystem changes +- Install all dependencies +- Start `nodemon` to watch for filesystem changes So, let's do it! -1. Make sure you don't have any previous `getting-started` containers running. +1. Make sure you don't have any `getting-started` containers currently running. -2. Run the following command from the app directory. We'll explain what's going on afterwards. +2. Run the following command from the `getting-started/app` directory. - If you are using an x86-64 Mac or Linux device, then use the following command. + If you are using an Mac or Linux device, then use the following command. - ```console - $ docker run -dp 3000:3000 \ - -w /app -v "$(pwd):/app" \ - node:18-alpine \ - sh -c "yarn install && yarn run dev" - ``` + ```console + $ docker run -dp 3000:3000 \ + -w /app --mount type=bind,src="$(pwd)",target=/app \ + node:18-alpine \ + sh -c "yarn install && yarn run dev" + ``` - If you are using Windows, then use the following command in PowerShell. + If you are using Windows, then use the following command in PowerShell. - ```powershell - $ docker run -dp 3000:3000 ` - -w /app -v "$(pwd):/app" ` - node:18-alpine ` - sh -c "yarn install && yarn run dev" - ``` + ```powershell + $ docker run -dp 3000:3000 ` + -w /app --mount type=bind,src="$(pwd)",target=/app ` + node:18-alpine ` + sh -c "yarn install && yarn run dev" + ``` - - `-dp 3000:3000` - same as before. Run in detached (background) mode and create a port mapping - - `-w /app` - sets the "working directory" or the current directory that the command will run from - - `-v "$(pwd):/app"` - bind mount the current directory from the host into the `/app` directory in the container - - `node:18-alpine` - the image to use. Note that this is the base image for our app from the Dockerfile - - `sh -c "yarn install && yarn run dev"` - the command. 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`. If we look in the `package.json`, - we'll see that the `dev` script is starting `nodemon`. + - `-dp 3000:3000` - same as before. Run in detached (background) mode and + create a port mapping + - `-w /app` - sets the "working directory" or the current directory that the + command will run from + - `--mount type=bind,src="$(pwd)",target=/app` - bind mount the current + directory from the host into the `/app` directory in the container + - `node:18-alpine` - the image to use. Note that this is the base image for + our app from the Dockerfile + - `sh -c "yarn install && yarn run dev"` - the command. We're starting a + shell using `sh` (alpine doesn't have `bash`) and running `yarn install` to + install packages and then running `yarn run dev` to start the development + server. If we look in the `package.json`, we'll see that the `dev` script + starts `nodemon`. -3. You can watch the logs using `docker logs`. You'll know you're ready to go when you see this: +3. You can watch the logs using `docker logs`. You'll know you're ready to go + when you see this: - ```console - $ docker logs -f - nodemon src/index.js - [nodemon] 2.0.20 - [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 - ``` + ```console + $ docker logs -f + nodemon src/index.js + [nodemon] 2.0.20 + [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 + ``` - When you're done watching the logs, exit out by hitting `Ctrl`+`C`. + When you're done watching the logs, exit out by hitting `Ctrl`+`C`. -4. Now, let's make a change to the app. In the `src/static/js/app.js` file, let's change the "Add Item" button to simply say - "Add". This change will be on line 109: +4. Now, make a change to the app. In the `src/static/js/app.js` file, on line + 109, change the "Add Item" button to simply say "Add": - ```diff - - {submitting ? 'Adding...' : 'Add Item'} - + {submitting ? 'Adding...' : 'Add'} - ``` + ```diff + - {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. + Save the file. - ![Screenshot of updated label for Add button](images/updated-add-button.png){: style="width:75%;"} - {: .text-center } +5. Refresh the page in your web browser, and you should see the change reflected + almost immediately. It might take a few seconds for the Node server to + restart. If you get an error, try refreshing after a few seconds. -6. Feel free to make any other changes you'd like to make. When you're done, stop the container and build your new image - using: + ![Screenshot of updated label for Add button](images/updated-add-button.png){: + style="width:75%;" .text-center} - ```console - $ docker build -t getting-started . - ``` +6. Feel free to make any other changes you'd like to make. Each time you make a + change and save a file, the `nodemon` process restarts the app inside the + container automatically. When you're done, stop the container and build your + new image using: -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. With a single `docker run` command, the dev environment is pulled and ready -to go. We'll talk about Docker Compose in a future step, as this will help simplify our commands (we're already getting a lot -of flags). + ```console + $ docker build -t getting-started . + ``` + +Using bind mounts is common for local development setups. The advantage is that +the development machine doesn't need to have all of the build tools and +environments installed. With a single `docker run` command, dependencies and +tools are pulled and ready to go. We'll talk about Docker Compose in a future +step, as this will help simplify our commands (we're already getting a lot of +flags). + +In addition to volume mounts and bind mounts, Docker also supports other mount +types and storage drivers for handling more complex and specialized use cases. +To learn more about the advanced storage concepts, see +[Manage data in Docker](https://docs.docker.com/storage/). ## Next steps -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! +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! -In order to prepare for production, you need to migrate your database from working in SQLite to something that can scale a -little better. For simplicity, you'll keep with a relational database and switch your application to use MySQL. But, how -should you run MySQL? How do you allow the containers to talk to each other? You'll learn about that next! +In order to prepare for production, you need to migrate your database from +working in SQLite to something that can scale a little better. For simplicity, +you'll keep with a relational database and switch your application to use MySQL. +But, how should you run MySQL? How do you allow the containers to talk to each +other? You'll learn about that next! [Multi container apps](07_multi_container.md){: .button .primary-btn} diff --git a/get-started/images/bind-mount-newfile.png b/get-started/images/bind-mount-newfile.png new file mode 100644 index 0000000000000000000000000000000000000000..41b9a3ecc27e6e43c99d26bc4a5154cae0661115 GIT binary patch literal 31321 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