Week 13 - Systems

App Development lifecycle

Continuous integration (CI)

Continuous Delivery (CD)

Packaging and Docker

Docker setup

Building an API server

Deployments

Intro to Cloud

Using local LLMs

Appendix 1 yaml syntax

Appendix 2 Docker commands

Practice

Assignment

Core program

What is packaging?

What is delivery in the software industry?

Let’s go back to our IKEA example. Imagine you have just made a new table made up of different parts. Delivery would mean the parts are packaged in boxes and available on shelves for customers to pick up.

Deployment would be the moment the customer opens the boxes at home and assembles the furniture in their living room.

image.png

Different software can be packaged in different ways. For example, you have already encountered packages when using npm (the p stands for packages 😉). With npm packages, we usually put a set of JavaScript files in the same box so other developers can use them in their project.

But when you run a large application, you need more than a bunch of files. You might need environment variables, specific scripts, databases, and much more. On top of that, the computer you run the command on can change how it behaves: Windows and Linux work differently, and different versions of Node.js can behave differently. So how should you package software like this?

The containers problem, how to ship your computer

Let’s go back to our table. Imagine you have a robot at home that knows how to assemble the furniture. The problem is that it only knows how to do it in your living room. How would you make it work in someone else’s house?

One solution would be to recreate an exact copy of your living room in your friend’s house. You would reuse an existing room and build a smaller room inside it that looks as close as possible to yours. Then the robot can work.

This is tedious. It means building new walls, planning the space, and making sure your friend has a big enough room. If you update your robot and need to change the room, your friend would also have to make the same changes.

Another solution would be to literally ship the room. You would make a copy of your room with the robot inside it and let anyone use the copy anywhere they want.

In the software world, we ship a self-contained package, or a container, that includes everything needed to run an application anywhere:

Packaging software

Packaging software

Docker and Dockerfile

Docker lets you package your application together with everything it needs: the operating system, the right version of Node.js, environment variables, scripts, and any other tools. This package is called a container image. When you run it, it becomes a container - a lightweight, isolated copy of that environment running on any machine. It does not matter if the machine runs Windows, macOS, or Linux. The container always behaves the same way because it carries its own "room" with it. This is why developers say Docker solves the "but it works on my machine" problem. You build the image once, and anyone can run it anywhere.

Docker containers were inspired by the real world, where most cargo is delivered in a standard-sized container that is easy to handle and transport.

AI generated image of containers in a seaport

AI generated image of containers in a seaport

Watch: Virtual Machines explained in 15 minutes

Before Jumping into Docker, watch the following 15 minute video to understand what is a virtual machine and how it works.

https://www.youtube.com/watch?v=mQP0wqNT_DI

Watch: Docker overview

Finding a simple, informative video about Docker can be challenging without going too deep. This one explains it really well.

https://youtu.be/_dfLOzuIg2o?si=48bKvKnnJuWEyT3M&t=19

Key takeaways from the video

  1. Docker is different from a virtual machine. It uses your operating system’s resources instead of virtualizing a full independent operating system.
  2. The video introduces two important terms: container and image. An image is like a blueprint or template for creating multiple containers of the same application. You can compare this to classes and objects: an image is like a class, and a container is like an object of that class.
  3. Creating new Dockerfiles is out of scope for the core program

Watch: Docker core concepts

<aside> 💭

Watch the video on YouTube. Stop at the “Layers” section at 5:34. Watching until the end is optional, but feel free to continue if you are interested.

</aside>

Docker Core Concepts Every Developer Should Know

Learning scope

Docker is large and complex, so it is easy to get lost in technical terms. In the Core program, we will focus on the main concept of Docker and learn how to run a container. More advanced topics will be taught in some specialization tracks (Data, backend and cloud).

Will cover in the core program:

✅ What is Docker  ✅ Installing Docker ✅ Running a container

Out of scope for the core program ❌ Creating new images ❌ Dockerfile ❌ Docker compose ❌ Networking ❌ Volumes ❌ Deploying a container ❌ Kubernetes


The HackYourFuture curriculum is licensed under CC BY-NC-SA 4.0 *https://hackyourfuture.net/*

CC BY-NC-SA 4.0 Icons

Built with ❤️ by the HackYourFuture community · Thank you, contributors

Found a mistake or have a suggestion? Let us know in the feedback form.