Compare commits

5 Commits

Author SHA1 Message Date
ebf03f3e56 Modiy route or example pr 2025-06-19 21:17:48 -04:00
7aa80d9800 Cleanup backend dockerfile 2025-06-19 21:14:49 -04:00
761ea8fef8 Simplify slides 2025-06-19 13:05:44 -04:00
94a71d6d77 Clean up compose 2025-06-19 12:26:09 -04:00
66fc64dcac Update slides and cleanup examples 2025-06-19 12:05:32 -04:00
9 changed files with 99 additions and 102 deletions

View File

@ -1,5 +1,8 @@
FROM node:lts-alpine3.22 AS base FROM node:lts-alpine3.22 AS base
HEALTHCHECK --interval=5s --timeout=10s --start-period=5s --retries=5 \ HEALTHCHECK --interval=5s \
--timeout=10s \
--start-period=5s \
--retries=5 \
CMD sh -c 'wget --no-verbose --tries=1 --spider http://127.0.0.1:3333 || exit 1' CMD sh -c 'wget --no-verbose --tries=1 --spider http://127.0.0.1:3333 || exit 1'
# All deps stage # All deps stage
@ -9,11 +12,10 @@ ADD package.json package-lock.json ./
RUN npm ci RUN npm ci
FROM deps AS develop FROM deps AS develop
WORKDIR /app
COPY dev-entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN cat /entrypoint.sh
ENV NODE_ENV=development ENV NODE_ENV=development
WORKDIR /app
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 3333 EXPOSE 3333
ENTRYPOINT [ "/entrypoint.sh" ] ENTRYPOINT [ "/entrypoint.sh" ]

View File

@ -3,7 +3,6 @@
echo "starting up..." echo "starting up..."
node ace generate:key node ace generate:key
# Check for pending migrations by parsing output # Check for pending migrations by parsing output
PENDING_MIGRATIONS=$(node ace migration:status | grep -ic 'pending') PENDING_MIGRATIONS=$(node ace migration:status | grep -ic 'pending')

View File

@ -12,6 +12,6 @@ import UsersController from '#controllers/users_controller'
router.get('users', [UsersController, 'index']) router.get('users', [UsersController, 'index'])
router.get('/', async () => { router.get('/', async () => {
return { return {
hello: 'world', hello: 'SCS',
} }
}) })

View File

@ -1,3 +1,4 @@
name: fullstack
services: services:
frontend: frontend:
image: frontend:latest image: frontend:latest
@ -22,14 +23,10 @@ services:
image: backend:latest image: backend:latest
build: build:
context: ./backend context: ./backend
volumes:
- backend_node_modules:/backend/node_modules
- ./backend/:/backend
labels: labels:
- "traefik.http.middlewares.strip-api-prefix.stripprefix.prefixes=/api" - "traefik.http.middlewares.strip-api-prefix.stripprefix.prefixes=/api"
- "traefik.http.routers.backend.rule=Host(`app.docker.localhost`) && PathPrefix(`/api`)" - "traefik.http.routers.backend.rule=Host(`app.docker.localhost`) && PathPrefix(`/api`)"
- "traefik.http.routers.backend.middlewares=strip-api-prefix@docker" - "traefik.http.routers.backend.middlewares=strip-api-prefix@docker"
env_file: env_file:
- ./backend/.env - ./backend/.env
depends_on: depends_on:

View File

@ -5,12 +5,9 @@ RUN yarn install
COPY . . COPY . .
FROM base AS build FROM base AS build
WORKDIR /app
COPY --from=base /app/* .
RUN yarn build RUN yarn build
FROM base AS develop FROM base AS develop
COPY --from=base /app/ .
EXPOSE 5173 EXPOSE 5173
ENTRYPOINT [ "yarn", "dev", "--host", "0.0.0.0" ] ENTRYPOINT [ "yarn", "dev", "--host", "0.0.0.0" ]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

View File

@ -5,15 +5,13 @@ theme: seriph
# like them? see https://unsplash.com/collections/94734566/slidev # like them? see https://unsplash.com/collections/94734566/slidev
background: https://cover.sli.dev background: https://cover.sli.dev
# some information about your slides (markdown enabled) # some information about your slides (markdown enabled)
title: Welcome to Slidev title: Demystifying Docker - SCS 2025
info: | info: |
## Slidev Starter Template ## The basics of containerization and beyond by Mike Conrad
Presentation slides for developers. Scenic City Summit 2025
Learn more at [Sli.dev](https://sli.dev) Learn more at [Hackanooga](https://hackanooga.com/scs)
# apply unocss classes to the current slide
class: text-center class: text-center
# https://sli.dev/features/drawing
drawings: drawings:
persist: false persist: false
# slide transition: https://sli.dev/guide/animations.html#slide-transitions # slide transition: https://sli.dev/guide/animations.html#slide-transitions
@ -52,36 +50,21 @@ The last comment block of each slide will be treated as slide notes. It will be
--- ---
transition: fade-out transition: fade-out
layout: center layout: statement
background: ./images/pexels-markusspiske-1089438.jpg
--- ---
# The 3 universal constants in programming
# Who is this for? <v-click>
<h2>1) The speed of light</h2>
## About you </v-click>
- Some experience with Docker/containers <v-click>
- Familiarity with Linux/BASH <h2>2) "It's more complicated than you think"</h2>
- Want to better understand how containers work </v-click>
- Want to learn new techniques for automation <v-click>
<h2>3) "It works on my machine"</h2>
--- <br />
transition: fade-out <small>Source: <a href="https://www.linkedin.com/posts/robertroskam_the-3-universal-constants-in-programming-activity-7339260450074775553-ofik?utm_source=share&utm_medium=member_desktop&rcm=ACoAACZXneYB_uWiOE0T9VO3caUkn7m0ZMrRS_o">Some random guy on the internet</a></small>
layout: center </v-click>
---
## Follow Along
**Example Repo** - https://hackanooga.com/scs
**Prerequisites**
- Docker
- VSCode
- Git
- yarn/npm/pnpm,etc (For viewing slides)
### VSCode plugins
- [Official Docker Plugin](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)
- [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
- [Container Tools](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-containers)
--- ---
transition: fade-out transition: fade-out
@ -90,18 +73,42 @@ layout: center
<img src="./images/docker-meme.jpg" width="300"/> <img src="./images/docker-meme.jpg" width="300"/>
--- ---
transition: fade-out transition: fade-out
layout: center layout: image-right
image: ./images/pexels-markusspiske-1089438.jpg
--- ---
## Common Use cases for containers # Who is this for?
- Reproducible dev environments
- Testing in CI/CD environments
- Better "Portability" of application code
- Snapshot of application code at specific point in time
## About you
- Some experience with Docker/containers
- Familiarity with Linux/BASH/zsh, etc
- Want to better understand how containers work
- Want to learn new techniques for automation
---
transition: fade-out
layout: image-left
image: ./images/pexels-joshsorenson-1714208.jpg
---
## Follow Along
<small>Visit the link to check out the sample Git repository.</small>
**Example Repo** - https://hackanooga.com/scs
**Prerequisites**
- Docker Engine (Linux) or Docker Desktop (Windows/MacOS)
- VSCode
- Git
- yarn, npm or pnpm (for viewing slides)
### VSCode plugins
- [Official Docker Plugin](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)
- [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
- [Container Tools](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-containers)
--- ---
transition: fade-out transition: fade-out
@ -126,13 +133,13 @@ layout: center
## Containers vs Virtual Machines ## Containers vs Virtual Machines
| Feature | VM | Container | | Feature | VMs | Containers |
|------------------|----------------|------------------| |------------------|-----------------------|------------------------------|
| Boot time | Minutes | Seconds | | Boot time | Minutes | Seconds |
| Resource usage | Heavy | Lightweight | | Resource usage | Heavy | Lightweight |
| Isolation | Strong | Process-level | | Isolation | Strong | Process-level |
| Portability | Medium | Very High | | Portability | Medium | Very High |
| Operating System | Needs full OS install | Uses host OS/kernel features |
In reality we use containers and vm's together. Containers run inside of VM's for better security and isolation, especially in cloud and multi tenant environments. In reality we use containers and vm's together. Containers run inside of VM's for better security and isolation, especially in cloud and multi tenant environments.
--- ---
@ -142,26 +149,17 @@ layout: center
## What is Docker? ## What is Docker?
- A tool to build and run containers
- Written in GO - Written in GO
- Uses Client/Server model with REST API (`docker cli` and `dockerd`) - Uses Client/Server model with REST API (`docker cli` and `dockerd`)
- Eco system of tools (Compose, Swarm, etc) - Eco system of tools (Compose, Swarm, etc)
- Public Image Registry (Dockerhub) - Public Image Registry (Dockerhub)
- Docker client typically runs on same machine as server but doesn't have to - Docker client typically runs on same machine as server but doesn't have to
- Uses Linux kernal features like:
--- - Namespaces
transition: fade-out - cgroups
layout: center - Union file systems
--- - Containers are just processes
## What is Docker?
- A tool to build and run containers
- Containers are exclusive to Linux
- Docker engine runs containers using Linux features like:
- Namespaces
- cgroups
- Union file systems
- Container runs from an image layered with base image and application code
--- ---
transition: fade-out transition: fade-out
layout: center layout: center
@ -193,24 +191,42 @@ layout: center
--- ---
transition: fade-out transition: fade-out
layout: center layout: two-cols-header
--- ---
## Bind/Volume Mounts <div class="flex items-center flex-col">
<h1 class="ml-5">Bind/Volume Mounts</h1>
- 2 most common storage mechanisms <p>2 most common storage mechanisms<br />Different use cases and security implications</p>
- Different use cases and security implications </div>
::left::
## Bind Mounts
- Created/managed by user.
- Files from host mounted directly into container.
- Container processes can modify files on host system.
- Strongly tied to the host.
- Best for things like dev containers.
::right::
## Volume mounts
- Created/managed by Docker Daemon.
- Data is stored on host filesystem.
- Used for persistent data.
<!--
It is possible to modify the data directly via normal tools but unsupported and can cause unintended side-effects due to the overlayfs storage driver.
An example would be creating a postgres volume for persistent database storage.
-->
--- ---
transition: fade-out transition: fade-out
layout: center layout: center
image: 'https://unsplash.com/collections/oGE7TYSLt3I/software-development
equal: false
left: false
--- ---
## Bind Mounts
- Mounting files/directories from the host machine directly into a container (merged overlayfs layer).
- Processes inside container can modify files on host system.
- Bind mounts are strongly tied to the host
- Best for things like dev containers where you need to mount source code into container and have hot reload, etc.
## Bind Mount Example ## Bind Mount Example
```bash ```bash
@ -264,20 +280,6 @@ $ docker volume inspect postgresData
- Docker creates a volume named postgresData and mounts that directory inside the container. - Docker creates a volume named postgresData and mounts that directory inside the container.
<!-- https://docs.docker.com/engine/storage/bind-mounts/ --> <!-- https://docs.docker.com/engine/storage/bind-mounts/ -->
---
transition: fade-out
layout: center
---
## Volume mounts
- Created and managed by the Docker Daemon
- Volume data is stored on host filesystem but managed by Docker.
- Used for persistent data.
<!--
It is possible to modify the data directly via normal tools but unsupported and can cause unintended side-effects due to the overlayfs storage driver.
An example would be creating a postgres volume for persistent database storage.
-->
--- ---
transition: fade-out transition: fade-out
@ -330,7 +332,7 @@ EXPOSE 5173
```bash ```bash
$ docker build -t react . $ docker build -t react .
$ docker run --rm -P react $ docker run --rm -p 5173:5173 react
``` ```
<!-- <!--
Run docker image and demonstrate dev container functionality. Attach to the running container Run docker image and demonstrate dev container functionality. Attach to the running container