summaryrefslogtreecommitdiff
path: root/docs/tutorial/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorial/index.md')
-rw-r--r--docs/tutorial/index.md72
1 files changed, 72 insertions, 0 deletions
diff --git a/docs/tutorial/index.md b/docs/tutorial/index.md
new file mode 100644
index 0000000..863ba6d
--- /dev/null
+++ b/docs/tutorial/index.md
@@ -0,0 +1,72 @@
+---
+next_page: app.md
+---
+
+## The command you just ran
+
+Congratulations! You have started the container for this tutorial!
+Let's first explain the command that you just ran. In case you forgot,
+here's the command:
+
+```cli
+docker run -d -p 80:80 docker/getting-started
+```
+
+You'll notice a few flags being used. Here's some more info on them:
+
+- `-d` - run the container in detached mode (in the background)
+- `-p 80:80` - map port 80 of the host to port 80 in the container
+- `docker/getting-started` - the image to use
+
+!!! info "Pro tip"
+ You can combine single character flags to shorten the full command.
+ As an example, the command above could be written as:
+ ```
+ docker run -dp 80:80 docker/getting-started
+ ```
+
+## The Docker Dashboard
+
+Before going too far, we want to highlight the Docker Dashboard, which gives
+you a quick view of the containers running on your machine. It gives you quick
+access to container logs, lets you get a shell inside the container, and lets you
+easily manage container lifecycle (stop, remove, etc.).
+
+To access the dashboard, follow the instructions in the
+[Docker Desktop manual](https://docs.docker.com/desktop/). If you open the dashboard
+now, you will see this tutorial running! The container name (`jolly_bouman` below) is a
+randomly created name. So, you'll most likely have a different name.
+
+![Tutorial container running in Docker Dashboard](tutorial-in-dashboard.png)
+
+
+## What is a container?
+
+Now that you've run a container, what _is_ a container? Simply put, a container is
+simply another process on your machine that has been isolated from all other processes
+on the host machine. That isolation leverages [kernel namespaces and cgroups](https://medium.com/@saschagrunert/demystifying-containers-part-i-kernel-space-2c53d6979504), features that have been
+in Linux for a long time. Docker has worked to make these capabilities approachable and easy to use.
+
+!!! info "Creating Containers from Scratch"
+ If you'd like to see how containers are built from scratch, Liz Rice from Aqua Security
+ has a fantastic talk in which she creates a container from scratch in Go. While she makes
+ a simple container, this talk doesn't go into networking, using images for the filesystem,
+ and more. But, it gives a _fantastic_ deep dive into how things are working.
+
+ <iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/8fi7uSYlOdc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+## What is a container image?
+
+When running a container, it uses an isolated filesystem. This custom filesystem is provided
+by a **container image**. Since the image contains the container's filesystem, it must contain everything
+needed to run an application - all dependencies, configuration, scripts, binaries, etc. The
+image also contains other configuration for the container, such as environment variables,
+a default command to run, and other metadata.
+
+We'll dive deeper into images later on, covering topics such as layering, best practices, and more.
+
+!!! info
+ If you're familiar with `chroot`, think of a container as an extended version of `chroot`. The
+ filesystem is simply coming from the image. But, a container adds additional isolation not
+ available when simply using chroot.
+