Build Your AI Engineering Workspace
Create the project workspace and verify VS Code, Python, Git, and Docker before building the AI system.
What you'll build
Before You Build
2 quick questions. This is diagnostic only — it does not block the lesson.
What proves the Docker Engine is running?
What is the purpose of git add?
Mission
Create the project workspace and verify VS Code, Python, Git, and Docker before building the AI system.
Understand
Every later lesson extends one project. A reproducible workspace is part of the system: tools, files, version history, and runtime must all be observable before AI code is added.
Build
You will create one project folder, add three starter files, verify your tools, and record a first Git checkpoint. Every step below starts collapsed: click the whole row to open it.
You are creating the persistent project folder that every ENJYRA Free lesson keeps extending.
One reusable folder means each lesson builds on the last instead of starting again.
mkdir -p ~/enjyra-free-ai/app ~/enjyra-free-ai/docs
cd ~/enjyra-free-aimkdir -p ~/enjyra-free-ai/app ~/enjyra-free-ai/docs
cd ~/enjyra-free-aiNew-Item -ItemType Directory -Force -Path "$HOME\enjyra-free-ai\app", "$HOME\enjyra-free-ai\docs"
cd $HOME\enjyra-free-aiBefore You Run
- Your terminal is open in your home folder.
Why You're Running This
Makes the project folder with its two sub-folders, then moves your terminal into it.
Command Breakdown
mkdir- Make directories.
-p- Also create missing parent folders and do not fail if a folder already exists.
~/enjyra-free-ai/app- Application source code lives here.
~/enjyra-free-ai/docs- Documents the AI will retrieve from in later lessons.
cd- Change into the project folder so later commands run there.
Expected Result
No error. Expected structure:
enjyra-free-ai/
├── app/
└── docs/What Changed
Before~/enjyra-free-ai/app may not exist yet.
After~/enjyra-free-ai/app now exists, including any required parent folders.
Verify It
macOSls -ld ~/enjyra-free-ai/app
Linuxls -ld ~/enjyra-free-ai/app
Windows PowerShellGet-Item "~\enjyra-free-ai\app"
Confirm the folder exists before continuing.
If It Fails
- Check you typed the path exactly. If you see Permission denied, make sure you are inside your own home folder.
What this command does Makes the project folder with its two sub-folders, then moves your terminal into it.
No error. Expected structure:
enjyra-free-ai/
├── app/
└── docs/If it fails
Check you typed the path exactly. If you see Permission denied, make sure you are inside your own home folder.
lslsdirBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
Lists what is inside the project folder.
Command Breakdown
ls / Get-Item- Inspects the requested file or folder without modifying it.
dir- Runs the dir tool with the shown arguments to complete this lesson step.
Expected Result
app docsWhat Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOSls
Linuxls
Windows PowerShelldir
Run the command and compare its output with the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
What this command does Lists what is inside the project folder.
app docs~/enjyra-free-ai now exists with an app/ folder for source code and a docs/ folder for the documents the AI reads later.
You are creating the Python dependency file for this project.
requirements.txt records which Python packages the project depends on, so anyone can reinstall exactly the same set.
touch requirements.txttouch requirements.txtif (-not (Test-Path requirements.txt)) { New-Item requirements.txt -ItemType File | Out-Null }Before You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
Creates an empty requirements.txt if one does not already exist.
Command Breakdown
touch / New-Item File- Creates an empty file at the requested path without requiring code to exist first.
Expected Result
requirements.txt now exists in the lesson workspace and is ready for the next instruction.What Changed
Beforerequirements.txt may not exist yet, or may still contain its previous content.
Afterrequirements.txt now exists in the lesson workspace and is ready for the next instruction.
Verify It
macOSls -l requirements.txt
Linuxls -l requirements.txt
Windows PowerShellGet-Item "requirements.txt"
Confirm the file exists at the expected path.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
What this command does Creates an empty requirements.txt if one does not already exist.
code requirements.txtcode requirements.txtcode requirements.txtBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
- Visual Studio Code is installed; the optional code shell command is available, or you can open the file manually.
Why You're Running This
Opens the file in VS Code. If the code command is not installed, open VS Code, choose File → Open Folder, and pick enjyra-free-ai.
Command Breakdown
code- Opens the file or folder in Visual Studio Code from the terminal.
Expected Result
The command has completed and the next lesson step has the state it needs.What Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
- code command not found → open VS Code manually and use File → Open Folder.
What this command does Opens the file in VS Code. If the code command is not installed, open VS Code, choose File → Open Folder, and pick enjyra-free-ai.
requirements.txt (~/enjyra-free-ai/requirements.txt, text)requests==2.32.3
requests- The Python HTTP library later lessons use to talk to Ollama's local API.
==2.32.3- Pins the tested package version so results stay repeatable.
Save the file Press Ctrl+S (Windows/Linux) or Cmd+S (macOS) in VS Code before you verify it.
cat requirements.txtcat requirements.txtGet-Content requirements.txtBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
This checks the current state without changing it, so you can verify the previous action worked.
Command Breakdown
cat / Get-Content- Reads the saved file and prints its contents so you can verify it.
Expected Result
requests==2.32.3What Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOScat requirements.txt
Linuxcat requirements.txt
Windows PowerShellGet-Content requirements.txt
Run the command and compare its output with the Expected Result block.
If It Fails
- If nothing prints, the file was not saved. Return to VS Code and save it. If it says no such file, check your working directory with pwd.
requests==2.32.3If it fails
If nothing prints, the file was not saved. Return to VS Code and save it. If it says no such file, check your working directory with pwd.
~/enjyra-free-ai/requirements.txt now exists and records the project's Python dependency.
You are telling Git which files it must never track.
Some files are private or can be re-created, so they should not become part of your project history.
touch .gitignoretouch .gitignoreif (-not (Test-Path .gitignore)) { New-Item .gitignore -ItemType File | Out-Null }Before You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
Creates an empty .gitignore if one does not already exist.
Command Breakdown
touch / New-Item File- Creates an empty file at the requested path without requiring code to exist first.
Expected Result
.gitignore now exists in the lesson workspace and is ready for the next instruction.What Changed
Before.gitignore may not exist yet, or may still contain its previous content.
After.gitignore now exists in the lesson workspace and is ready for the next instruction.
Verify It
macOSls -l .gitignore
Linuxls -l .gitignore
Windows PowerShellGet-Item ".gitignore"
Confirm the file exists at the expected path.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
What this command does Creates an empty .gitignore if one does not already exist.
code .gitignorecode .gitignorecode .gitignoreBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
- Visual Studio Code is installed; the optional code shell command is available, or you can open the file manually.
Why You're Running This
This command completes the “2 · Open it in VS Code” step and produces the state needed by the next instruction.
Command Breakdown
code- Opens the file or folder in Visual Studio Code from the terminal.
Expected Result
The command has completed and the next lesson step has the state it needs.What Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
- code command not found → open VS Code manually and use File → Open Folder.
.gitignore (~/enjyra-free-ai/.gitignore, text).env
.venv/
__pycache__/
*.pyc
*.log
.env- Local environment variables and secrets stay out of version history.
.venv/- A re-creatable local Python environment.
__pycache__/- Cache folders Python generates.
*.pyc- Compiled Python cache files.
*.log- Runtime log files.
Save the file Press Ctrl+S (Windows/Linux) or Cmd+S (macOS) in VS Code before you verify it.
cat .gitignorecat .gitignoreGet-Content .gitignoreBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
This checks the current state without changing it, so you can verify the previous action worked.
Command Breakdown
cat / Get-Content- Reads the saved file and prints its contents so you can verify it.
Expected Result
.env
.venv/
__pycache__/
*.pyc
*.logWhat Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOScat .gitignore
Linuxcat .gitignore
Windows PowerShellGet-Content .gitignore
Run the command and compare its output with the Expected Result block.
If It Fails
- A leading dot hides the file in some file managers; use the terminal command above to check it exists.
.env
.venv/
__pycache__/
*.pyc
*.logIf it fails
A leading dot hides the file in some file managers; use the terminal command above to check it exists.
~/enjyra-free-ai/.gitignore now exists. Git will skip the listed files. It is a convenience, not a security system: never put secrets in the project at all.
You are creating the front page of your project.
README.md is the documentation entry point people (and you, later) read first.
touch README.mdtouch README.mdif (-not (Test-Path README.md)) { New-Item README.md -ItemType File | Out-Null }Before You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
Creates an empty README.md if one does not already exist.
Command Breakdown
touch / New-Item File- Creates an empty file at the requested path without requiring code to exist first.
Expected Result
README.md now exists in the lesson workspace and is ready for the next instruction.What Changed
BeforeREADME.md may not exist yet, or may still contain its previous content.
AfterREADME.md now exists in the lesson workspace and is ready for the next instruction.
Verify It
macOSls -l README.md
Linuxls -l README.md
Windows PowerShellGet-Item "README.md"
Confirm the file exists at the expected path.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
What this command does Creates an empty README.md if one does not already exist.
code README.mdcode README.mdcode README.mdBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
- Visual Studio Code is installed; the optional code shell command is available, or you can open the file manually.
Why You're Running This
This command completes the “2 · Open it in VS Code” step and produces the state needed by the next instruction.
Command Breakdown
code- Opens the file or folder in Visual Studio Code from the terminal.
Expected Result
The command has completed and the next lesson step has the state it needs.What Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
- code command not found → open VS Code manually and use File → Open Folder.
README.md (~/enjyra-free-ai/README.md, markdown)# ENJYRA Free AI
A local AI assistant built lesson by lesson.
#- In Markdown, a leading # makes the line a top-level heading.
Save the file Press Ctrl+S (Windows/Linux) or Cmd+S (macOS) in VS Code before you verify it.
cat README.mdcat README.mdGet-Content README.mdBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
This checks the current state without changing it, so you can verify the previous action worked.
Command Breakdown
cat / Get-Content- Reads the saved file and prints its contents so you can verify it.
Expected Result
# ENJYRA Free AI
A local AI assistant built lesson by lesson.What Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOScat README.md
Linuxcat README.md
Windows PowerShellGet-Content README.md
Run the command and compare its output with the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
# ENJYRA Free AI
A local AI assistant built lesson by lesson.~/enjyra-free-ai/README.md now exists with a Markdown heading and one description line.
You are collecting real evidence that each tool works from this project folder.
Later lessons assume these tools run. Finding a problem now is cheaper than finding it mid-lesson.
python3 --version && git --version && docker --version && docker info --format "{{.ServerVersion}}"python3 --version && git --version && docker --version && docker info --format "{{.ServerVersion}}"py --version; git --version; docker --version; docker info --format "{{.ServerVersion}}"Before You Run
- Your terminal is open in ~/enjyra-free-ai.
- Docker Desktop or Docker Engine is running.
- Python 3 is installed; activate .venv first when the lesson has already created it.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
Prints the Python, Git and Docker CLI versions, then asks the Docker Engine for its version.
Command Breakdown
python- Runs the selected Python module or script with the supplied arguments.
git- Runs the git tool with the shown arguments to complete this lesson step.
docker- Runs the docker tool with the shown arguments to complete this lesson step.
py- Runs the py tool with the shown arguments to complete this lesson step.
&&- Runs the next command only when the previous command succeeds.
Expected Result
Four version values appear; harmless version differences are expected.What Changed
BeforeThe saved program has not yet been executed for this verification step.
AfterThe program ran and produced output or started the local process described by the lesson.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- If docker info fails, Docker Engine is not running: start Docker Desktop and retry. On Windows, use whichever of py or python works.
What this command does Prints the Python, Git and Docker CLI versions, then asks the Docker Engine for its version.
Four version values appear; harmless version differences are expected.If it fails
If docker info fails, Docker Engine is not running: start Docker Desktop and retry. On Windows, use whichever of py or python works.
Nothing is created. This only reads versions from your machine.
You are turning the project folder into a Git repository.
Git records checkpoints, so you can always return to a known-good state.
git init
git branch -M main
git status --shortgit init
git branch -M main
git status --shortgit init
git branch -M main
git status --shortBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
git init makes the folder a repository, git branch -M main names the branch main, and git status --short lists changes.
Command Breakdown
git- Runs the git tool with the shown arguments to complete this lesson step.
git status --short- Shows changed and untracked files in a compact form without modifying the repository.
Expected Result
Initialized empty Git repository, then your three new files listed as untracked (??).What Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOSgit init
git branch -M main
git status --short
Linuxgit init
git branch -M main
git status --short
Windows PowerShellgit init
git branch -M main
git status --short
Run the command and compare its output with the Expected Result block.
If It Fails
- If git is not found, install Git (see Prerequisites) and reopen the terminal.
What this command does git init makes the folder a repository, git branch -M main names the branch main, and git status --short lists changes.
Initialized empty Git repository, then your three new files listed as untracked (??).If it fails
If git is not found, install Git (see Prerequisites) and reopen the terminal.
A hidden .git folder now exists in ~/enjyra-free-ai and the default branch is named main.
You are saving the first snapshot of the project.
A checkpoint lets you undo mistakes later; the Break section relies on it.
The mental model: FILES → STAGE → COMMIT. Files you edit are staged to choose what goes in the next snapshot, then committed to record it.
git add .
git commit -m "Start ENJYRA Free project"git add .
git commit -m "Start ENJYRA Free project"git add .
git commit -m "Start ENJYRA Free project"Before You Run
- Your terminal is open in ~/enjyra-free-ai.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
git add . stages every current change; git commit creates the checkpoint, and -m supplies its message.
Command Breakdown
git- Runs the git tool with the shown arguments to complete this lesson step.
Expected Result
3 files changedWhat Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- If Git asks who you are, set git config --global user.name and user.email, then run the commit again.
What this command does git add . stages every current change; git commit creates the checkpoint, and -m supplies its message.
3 files changedIf it fails
If Git asks who you are, set git config --global user.name and user.email, then run the commit again.
Git now holds one commit containing README.md, requirements.txt and .gitignore.
What just happened?
- ✓ Reusable ENJYRA project folder created
- ✓ app/ created for source code
- ✓ docs/ created for documents
- ✓ requirements.txt created
- ✓ .gitignore created
- ✓ README.md created
- ✓ Git repository initialised
- ✓ First Git checkpoint created
Break
printf "temporary\n" > README.mdprintf "temporary\n" > README.mdSet-Content -Path README.md -Value "temporary"Before You Run
- Your terminal is open in Current lesson workspace.
Why You're Running This
The learner-created file must exist before content can be saved or used by the next step.
Command Breakdown
printf / Set-Content- Writes the specified text into the target file, replacing its previous contents when it already exists.
Expected Result
README.md is intentionally replaced.
The working file now differs from the checkpoint.What Changed
BeforeREADME.md may not exist yet, or may still contain its previous content.
AfterREADME.md now exists in the lesson workspace and is ready for the next instruction.
Verify It
macOSls -l README.md
Linuxls -l README.md
Windows PowerShellGet-Item "README.md"
Confirm the file exists at the expected path.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
README.md is intentionally replaced.If it fails
command not found → verify the required tool is installed and reopen the terminal.No such file or directory → check your current folder with pwd or Get-Location.Permission denied → confirm the lesson workspace is writable.Debug
git status --short && git diff -- README.mdgit status --short && git diff -- README.mdgit status --short; git diff -- README.mdBefore You Run
- Your terminal is open in Current lesson workspace.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
This checks the current state without changing it, so you can verify the previous action worked.
Command Breakdown
git status --short- Shows changed and untracked files in a compact form without modifying the repository.
git- Runs the git tool with the shown arguments to complete this lesson step.
&&- Runs the next command only when the previous command succeeds.
Expected Result
M README.md
Git identifies the modified file and displays its changed content.What Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOSgit status --short && git diff -- README.md
Linuxgit status --short && git diff -- README.md
Windows PowerShellgit status --short; git diff -- README.md
Run the command and compare its output with the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
M README.mdIf it fails
command not found → verify the required tool is installed and reopen the terminal.No such file or directory → check your current folder with pwd or Get-Location.Permission denied → confirm the lesson workspace is writable.Improve
Keep secrets in ignored files. Never commit .env, cloud credentials, API tokens, SSH keys, or Docker credentials.
Verify
git restore README.md && git status --shortgit restore README.md && git status --shortgit restore README.md; git status --shortBefore You Run
- Your terminal is open in Current lesson workspace.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
This checks the current state without changing it, so you can verify the previous action worked.
Command Breakdown
git- Runs the git tool with the shown arguments to complete this lesson step.
git status --short- Shows changed and untracked files in a compact form without modifying the repository.
&&- Runs the next command only when the previous command succeeds.
Expected Result
No output
A blank short-status result means the working tree is clean again.What Changed
BeforeThe current state has not yet been checked.
AfterNo persistent state changed; the command printed evidence you can compare with the expected result.
Verify It
macOSgit restore README.md && git status --short
Linuxgit restore README.md && git status --short
Windows PowerShellgit restore README.md; git status --short
Run the command and compare its output with the Expected Result block.
If It Fails
- No such file or directory → verify the current folder and the path spelling.
- Permission denied → work inside your own lesson folder and confirm it is writable.
No outputIf it fails
command not found → verify the required tool is installed and reopen the terminal.No such file or directory → check your current folder with pwd or Get-Location.Permission denied → confirm the lesson workspace is writable.Challenge
Repeat the verification from a fresh terminal and explain which observable signal proves each dependency is healthy.
Ship
A clean ~/enjyra-free-ai repository with verified tools and a recoverable first commit.
Next Step
Continue to Lesson 02: Run Your First Local AI Model.
Prepare Your Machine
Open only the setup step you need. Complete every verification before moving into Build.
This lesson needs
Install Docker Desktop / Engine (full walkthrough)
- Check your Mac's chip architecture (Apple Silicon vs Intel) before downloading.COMMAND
uname -mExpected output"arm64" (Apple Silicon) or "x86_64" (Intel)If error
If nothing prints, open Terminal from Applications → Utilities and try again.
- Download Docker Desktop for your chip from docs.docker.com/desktop/setup/install/mac-install and open the downloaded
.dmg, then drag Docker to Applications. - Launch Docker Desktop from Applications and wait for the whale icon in the menu bar to show "Docker Desktop is running".
- Verify the CLI is installed.COMMAND
docker --versionExpected outputDocker version 2x.x.x, build xxxxxxxIf error
If “command not found”, reopen Terminal after installing so your PATH refreshes, or reinstall Docker Desktop.
- Verify the engine is actually running (not just installed).COMMAND
docker infoExpected outputA block of server information, including Server Version and ContainersIf error
If it says “Cannot connect to the Docker daemon”, open Docker Desktop and wait for the whale icon to stop animating.
- Run a real test container end-to-end.COMMAND
docker run --rm hello-worldExpected output"Hello from Docker!" followed by an explanation of what happenedIf error
If the image can't be pulled, check your internet connection; this is the only step that needs it.
- Download Docker Desktop for Windows from docs.docker.com/desktop/setup/install/windows-install and run the installer. Docker Desktop will guide you through any compatible Windows backend requirement; this lesson does not require a WSL terminal.
- If the installer asks you to enable a Windows feature or restart, follow that prompt and finish the Docker Desktop setup before continuing.
- Start Docker Desktop from the Start menu and wait for the whale icon in the system tray to report "Docker Desktop is running".
- Verify the CLI, using PowerShell or the built-in VS Code terminal (not a Bash-syntax terminal).COMMAND
docker --versionExpected outputDocker version 2x.x.x, build xxxxxxxIf error
If “not recognized”, close and reopen your terminal so PATH changes take effect.
- Verify the engine is running.COMMAND
docker infoExpected outputA block of server information, including Server Version and ContainersIf error
If it can't connect to the daemon, open Docker Desktop, wait until it reports Running, and review Docker Desktop's own Troubleshoot panel.
- Run a real test container.COMMAND
docker run --rm hello-worldExpected output"Hello from Docker!" followed by an explanation of what happenedIf error
If the pull hangs, check your internet connection and that Docker Desktop shows as running, not starting.
- Prefer Docker Engine (not Docker Desktop) on Linux. Follow the official instructions for your distribution at docs.docker.com/engine/install — for Ubuntu specifically, use docs.docker.com/engine/install/ubuntu.
- Start and enable the Docker service.COMMAND
sudo systemctl enable --now dockerExpected outputNo output on successIf error
If systemctl isn't available, your distro may use a different init system — check its Docker Engine install page.
- Confirm the service is active.COMMAND
systemctl status dockerExpected outputActive: active (running)If error
If it shows “inactive” or “failed”, re-run the enable command above and check the install steps were completed.
- Verify the CLI.COMMAND
docker --versionExpected outputDocker version 2x.x.x, build xxxxxxxIf error
If “command not found”, the Engine install likely didn't finish — re-check the distro-specific install page.
- Verify the engine responds.COMMAND
docker infoExpected outputA block of server information, including Server Version and ContainersIf error
A permission-denied error here usually means your user isn't in the docker group yet — see the note below rather than running commands as root.
- Run a real test container.COMMAND
docker run --rm hello-worldExpected output"Hello from Docker!" followed by an explanation of what happenedIf error
If you see a permission error, add your user to the docker group yourself (sudo usermod -aG docker $USER, then log out and back in) — we won't do this for you automatically.
Note: running Docker commands as root or with a global chmod on the socket is not recommended. Add your user to the docker group instead, as shown above.
Before You Run
Install Docker Desktop on macOS or Windows, or Docker Engine/Desktop using the official instructions for your Linux distribution. Start Docker and open Terminal or native Windows PowerShell.
Why Do We Need Docker?
The ENJYRA AWS, Azure, and GCP labs run locally inside Docker containers. No real AWS, Azure, or GCP account is required.
Command Breakdown
docker --version- Confirms the Docker command-line client is installed.
docker info- Asks the Docker Engine for server information, proving it is running and reachable.
docker run --rm hello-world- Runs a small official test container end to end and removes it when finished.
Expected Result
Docker version 2x.x.x
docker info: server details
Hello from Docker!What Changed
BeforeDocker is not yet confirmed.
AfterDocker CLI and Docker Engine are available to launch the local lab.
Verify It
macOSdocker --version
docker info
Linuxdocker --version
docker info
Windows PowerShelldocker --version
docker info
If It Fails
- Open Docker Desktop or start Docker Engine, wait until it reports running, and retry.
- Open a new terminal after installation so PATH changes are loaded.
- On Linux, follow the official instructions for your distribution rather than assuming Ubuntu commands apply.
Install this once — later lessons that need Python will only ask you to verify it.
Official download: python.org/downloads
- Open python.org/downloads and download the current Python 3 installer for macOS, if Python 3 isn't already available.
- Run the installer, then open a new Terminal window (existing ones won't see the update).
- Verify.COMMAND
python3 --versionExpected outputPython 3.x.xIf error
If “command not found”, reopen Terminal, or check the installer actually completed.
- Open python.org/downloads and download Python 3 for Windows.
- Run the installer. When offered, enable "Add Python to PATH" — this step is easy to miss.
- Open a new PowerShell window and verify.COMMAND
py --versionExpected outputPython 3.x.xIf error
If py isn't found, try python --version instead — installers vary in which launcher they register.
- Many Linux distributions already include Python 3 — check first.COMMAND
python3 --versionExpected outputPython 3.x.xIf error
If not found, install Python 3 through your distribution's own package manager or documentation — this varies by distro, so there's no single command here.
- If it's missing, see python.org/downloads for the official source and platform-specific guidance.
Before You Run
Complete the installation instructions for your operating system, then open a new Terminal or native Windows PowerShell window.
Why You're Running This
Python is used by ENJYRA learning utilities, scripts, and exercises.
Command Breakdown
python3 --version / py --version- Asks the installed Python launcher to print its version without running a program.
Expected Result
Python 3.x.xWhat Changed
BeforePython 3 is not yet confirmed on this machine.
AfterA supported Python 3 launcher is available in Terminal or native Windows PowerShell.
Verify It
macOSpython3 --version
Linuxpython3 --version
Windows PowerShellpy --version (fallback: python --version)
If It Fails
Open a new terminal after installation. On Windows, confirm “Add Python to PATH” was selected, then try py or python.
Official download: git-scm.com/downloads
- Visit git-scm.com/downloads and follow the macOS installer, or check whether it's already installed.
- Verify.COMMAND
git --versionExpected outputgit version 2.x.xIf error
macOS may prompt to install Xcode Command Line Tools the first time you run git — accept that prompt, then try again.
- Download Git for Windows from git-scm.com/install/windows and run the installer, keeping the default options.
- Open a new PowerShell window and verify.COMMAND
git --versionExpected outputgit version 2.x.xIf error
Reopen PowerShell so it picks up the updated PATH.
- Git is often preinstalled; check first with the command below. If missing, see git-scm.com/downloads for your distribution's official install method — this is not the same command on every distro.
- Verify.COMMAND
git --versionExpected outputgit version 2.x.xIf error
If git is missing, install it using your distribution's official package manager instructions, then open a new terminal.
Before You Run
Complete the installation instructions for your operating system, then open a new Terminal or native Windows PowerShell window.
Why You're Running This
Git is needed to download the official ENJYRA Cloud Labs repository and work with version-controlled lesson files.
Command Breakdown
git --version- Asks Git to print its installed version without changing any files.
Expected Result
git version 2.x.xWhat Changed
BeforeGit is not yet confirmed on this machine.
AfterGit is available to clone https://github.com/gudshuis/enjyra-cloud-labs.
Verify It
macOSgit --version
Linuxgit --version
Windows PowerShellgit --version
If It Fails
Open a new terminal after installation so the updated PATH is loaded, then retry.
Official download: code.visualstudio.com/download
- Download from code.visualstudio.com/download, unzip, and drag VS Code to Applications.
- Open VS Code once to confirm it launches.
- Optional — verify the
codeshell command, if you want it (not required):COMMANDcode --versionExpected outputA version number, e.g. 1.9x.xIf error
The code command is often not installed by default. In VS Code, open the Command Palette and run “Shell Command: Install 'code' command in PATH” — or just confirm VS Code opens instead, below.
- Download from code.visualstudio.com/download and run the installer.
- Open VS Code once to confirm it launches.
- Optional — verify the
codeshell command:COMMANDcode --versionExpected outputA version number, e.g. 1.9x.xIf error
The Windows installer usually adds this automatically; if not, confirm VS Code opens instead, below.
- Download the package for your distribution from code.visualstudio.com/download and install it using your distribution's normal method.
- Open VS Code once to confirm it launches.
- Optional — verify the
codeshell command:COMMANDcode --versionExpected outputA version number, e.g. 1.9x.xIf error
The code command may not be linked automatically on Linux; confirming VS Code opens is enough for this lesson.
Before You Run
Complete the installation instructions for your operating system, then open a new Terminal or native Windows PowerShell window.
Why You're Running This
Visual Studio Code is used to inspect and edit learner files when a lesson requires it.
Command Breakdown
code --version (optional)- Checks the optional VS Code shell command. Readiness depends on the app opening, not on this command being installed.
Expected Result
VS Code opens successfully; code --version may also print a version number.What Changed
BeforeVisual Studio Code is not yet confirmed on this machine.
AfterVisual Studio Code opens and can be used for lesson files; the code command remains optional.
Verify It
macOSOpen Visual Studio Code
LinuxOpen Visual Studio Code
Windows PowerShellOpen Visual Studio Code
If It Fails
Launch VS Code from Applications or the Start menu. Do not block readiness only because code is missing from PATH.
Run each command in your own terminal. This page cannot run commands on your machine, so tick a box only after you see the expected result.
docker --versiondocker --versiondocker --versionBefore You Run
- Your terminal is open in Any terminal folder.
- Docker Desktop or Docker Engine is running.
Why You're Running This
Confirms the Docker command-line client is installed.
Command Breakdown
docker- Runs the docker tool with the shown arguments to complete this lesson step.
Expected Result
A Docker version is printedWhat Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- Confirm Docker CLI is installed or running, then retry the command in a new terminal.
docker infodocker infodocker infoBefore You Run
- Your terminal is open in Any terminal folder.
- Docker Desktop or Docker Engine is running.
Why You're Running This
Confirms Docker is actually running, not only installed.
Command Breakdown
docker- Runs the docker tool with the shown arguments to complete this lesson step.
Expected Result
Docker server information is returnedWhat Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- Confirm Docker Engine is installed or running, then retry the command in a new terminal.
docker run --rm hello-worlddocker run --rm hello-worlddocker run --rm hello-worldBefore You Run
- Your terminal is open in Any terminal folder.
- Docker Desktop or Docker Engine is running.
Why You're Running This
Starts Docker's small official test container. It proves the CLI can talk to the Engine, obtain an image if needed, and create and run a container.
Command Breakdown
docker run- Creates and starts a container from the named image using the supplied ports, environment values, and runtime options.
--rm- Automatically removes the temporary container after it stops.
Expected Result
"Hello from Docker!" output appearsWhat Changed
BeforeThe requested local service or lab containers are not yet confirmed running.
AfterThe local service or lab containers are running in the background and can be verified.
Verify It
macOSdocker ps
Linuxdocker ps
Windows PowerShelldocker ps
Confirm the expected container is listed as running or healthy.
If It Fails
- Confirm Docker test container is installed or running, then retry the command in a new terminal.
python3 --versionpython3 --versionpy --version
# If py is unavailable:
python --versionBefore You Run
- Your terminal is open in Any terminal folder.
- Python 3 is installed; activate .venv first when the lesson has already created it.
Why You're Running This
Confirms Python 3 is installed. On Windows PowerShell use py --version or python --version if python3 is not found.
Command Breakdown
python- Runs the selected Python module or script with the supplied arguments.
py- Runs the py tool with the shown arguments to complete this lesson step.
#- Runs the # tool with the shown arguments to complete this lesson step.
Expected Result
A supported Python 3.x version is printedWhat Changed
BeforeThe saved program has not yet been executed for this verification step.
AfterThe program ran and produced output or started the local process described by the lesson.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- Confirm Python is installed or running, then retry the command in a new terminal.
git --versiongit --versiongit --versionBefore You Run
- Your terminal is open in Any terminal folder.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
Confirms Git is installed.
Command Breakdown
git- Runs the git tool with the shown arguments to complete this lesson step.
Expected Result
A Git version is printedWhat Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- Confirm Git is installed or running, then retry the command in a new terminal.
- Docker CLI verified
- Docker Engine running
- Test container completed
- Python 3 verified
- Git verified
- Visual Studio Code ready
Need help with a prerequisite?
Docker not running? Open Docker Desktop or start Docker Engine, then run docker info.
Permission denied? Confirm your account can access the Docker daemon; do not use a global prune.
Port already in use? Use docker ps to identify the container that owns the port.
Launch the ENJYRA Lab
Start only after the prerequisite checks above are complete.
This button confirms readiness; commands still run in your own terminal.
ENJYRA Lab · workspace
mkdir -p ~/enjyra-free-ai/app ~/enjyra-free-ai/docsmkdir -p ~/enjyra-free-ai/app ~/enjyra-free-ai/docsNew-Item -ItemType Directory -Force -Path "$HOME\enjyra-free-ai\app", "$HOME\enjyra-free-ai\docs" | Out-NullBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
Why You're Running This
Creates the local workspace state required before the Build steps begin.
Command Breakdown
mkdir -p / New-Item Directory- Creates the requested folder and any missing parent folders without failing when it already exists.
Expected Result
The lesson workspace is ready.What Changed
Before~/enjyra-free-ai/app may not exist yet.
After~/enjyra-free-ai/app now exists, including any required parent folders.
Verify It
macOSls -ld ~/enjyra-free-ai/app
Linuxls -ld ~/enjyra-free-ai/app
Windows PowerShellGet-Item "~\enjyra-free-ai\app"
Confirm the folder exists before continuing.
If It Fails
- Check the current folder, confirm Docker is running when required, and verify the image or script name before retrying.
What this command does Creates the local workspace state required before the Build steps begin.
The lesson workspace is ready.If it fails
Check the current folder, confirm Docker is running when required, and verify the image or script name before retrying.
python3 --version && git --version && docker infopython3 --version && git --version && docker infopython --version; git --version; docker infoBefore You Run
- Your terminal is open in ~/enjyra-free-ai.
- Docker Desktop or Docker Engine is running.
- Python 3 is installed; activate .venv first when the lesson has already created it.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
Checks the local runtime state required by this lesson without changing it.
Command Breakdown
python- Runs the selected Python module or script with the supplied arguments.
git- Runs the git tool with the shown arguments to complete this lesson step.
docker- Runs the docker tool with the shown arguments to complete this lesson step.
&&- Runs the next command only when the previous command succeeds.
Expected Result
The expected version or runtime information is printed.What Changed
BeforeThe saved program has not yet been executed for this verification step.
AfterThe program ran and produced output or started the local process described by the lesson.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- Confirm the start command completed first, then compare the image, container, port, or script name exactly with this lesson.
What this command does Checks the local runtime state required by this lesson without changing it.
The expected version or runtime information is printed.If it fails
Confirm the start command completed first, then compare the image, container, port, or script name exactly with this lesson.
Reset My Lab
git restore .git restore .git restore .Before You Run
- Your terminal is open in ~/enjyra-free-ai.
- Git is installed; cloning also requires an internet connection.
Why You're Running This
Returns this lesson’s local runtime or resources to a known starting state without touching unrelated projects.
Command Breakdown
git- Runs the git tool with the shown arguments to complete this lesson step.
Expected Result
This lesson’s runtime state is reset or the named lesson container is removed.What Changed
BeforeThe action shown by this card has not yet been completed or verified.
AfterThe command has completed and the next lesson step has the state it needs.
Verify It
macOSInspect the command output shown above.
LinuxInspect the command output shown above.
Windows PowerShellInspect the command output shown above.
Continue only when the observed result matches the Expected Result block.
If It Fails
- Check Docker is running and make sure you are using this lesson’s exact container or launcher name.
What this command does Returns this lesson’s local runtime or resources to a known starting state without touching unrelated projects.
This lesson’s runtime state is reset or the named lesson container is removed.If it fails
Check Docker is running and make sure you are using this lesson’s exact container or launcher name.
Prove What You Learned
This lesson contains 4 focused questions. You answered 2 before the build; complete the remaining 2 now.