@fredlackey/devutils 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
|
@@ -0,0 +1,1109 @@
|
|
|
1
|
+
# Installing Docker
|
|
2
|
+
|
|
3
|
+
## Dependencies
|
|
4
|
+
|
|
5
|
+
### macOS (Homebrew)
|
|
6
|
+
- **Required:**
|
|
7
|
+
- Homebrew - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
|
|
8
|
+
- **Optional:** None
|
|
9
|
+
- **Auto-installed:** None (Docker Desktop includes all components)
|
|
10
|
+
|
|
11
|
+
### Ubuntu (APT/Snap)
|
|
12
|
+
- **Required:**
|
|
13
|
+
- `ca-certificates` - Install via `sudo apt install ca-certificates`
|
|
14
|
+
- `curl` - Install via `sudo apt install curl`
|
|
15
|
+
- **Optional:** None
|
|
16
|
+
- **Auto-installed:**
|
|
17
|
+
- `docker-ce` (Docker Engine)
|
|
18
|
+
- `docker-ce-cli` (Docker CLI)
|
|
19
|
+
- `containerd.io` (Container runtime)
|
|
20
|
+
- `docker-buildx-plugin` (BuildKit plugin)
|
|
21
|
+
- `docker-compose-plugin` (Compose v2)
|
|
22
|
+
|
|
23
|
+
### Raspberry Pi OS (APT/Snap)
|
|
24
|
+
- **Required:**
|
|
25
|
+
- `ca-certificates` - Install via `sudo apt install ca-certificates`
|
|
26
|
+
- `curl` - Install via `sudo apt install curl`
|
|
27
|
+
- **Optional:** None
|
|
28
|
+
- **Auto-installed:**
|
|
29
|
+
- `docker-ce` (Docker Engine)
|
|
30
|
+
- `docker-ce-cli` (Docker CLI)
|
|
31
|
+
- `containerd.io` (Container runtime)
|
|
32
|
+
- `docker-buildx-plugin` (BuildKit plugin)
|
|
33
|
+
- `docker-compose-plugin` (Compose v2)
|
|
34
|
+
|
|
35
|
+
### Amazon Linux (DNF/YUM)
|
|
36
|
+
- **Required:** None (DNF/YUM are pre-installed on Amazon Linux)
|
|
37
|
+
- **Optional:**
|
|
38
|
+
- `docker-compose-plugin` - Install via `sudo dnf install docker-compose-plugin` (AL2023 only, for AL2 manual installation required)
|
|
39
|
+
- **Auto-installed:**
|
|
40
|
+
- `docker` (main package includes Docker Engine)
|
|
41
|
+
|
|
42
|
+
### Windows (Chocolatey/winget)
|
|
43
|
+
- **Required:**
|
|
44
|
+
- Chocolatey - Install via PowerShell: `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))`
|
|
45
|
+
- WSL 2 - Install via `wsl --install` (recommended) or Hyper-V enabled via PowerShell
|
|
46
|
+
- **Optional:** None
|
|
47
|
+
- **Auto-installed:** None (Docker Desktop is a complete package)
|
|
48
|
+
|
|
49
|
+
### Git Bash (Manual/Portable)
|
|
50
|
+
- **Required:**
|
|
51
|
+
- Docker Desktop on Windows host - Install via `choco install docker-desktop -y` from Administrator PowerShell
|
|
52
|
+
- Chocolatey on Windows host - Install via PowerShell (see Windows section above)
|
|
53
|
+
- **Optional:**
|
|
54
|
+
- `winpty` - Typically pre-installed with Git Bash, used for interactive containers with `winpty docker run -it <image>`
|
|
55
|
+
- **Auto-installed:** None (Git Bash uses the Windows host's Docker installation)
|
|
56
|
+
|
|
57
|
+
## Overview
|
|
58
|
+
|
|
59
|
+
Docker is a containerization platform that enables developers to package applications and their dependencies into standardized units called containers. These containers run consistently across different environments, solving the "it works on my machine" problem. Docker provides two main products:
|
|
60
|
+
|
|
61
|
+
- **Docker Engine**: The core runtime for building and running containers, ideal for servers and CI/CD pipelines
|
|
62
|
+
- **Docker Desktop**: A GUI application that includes Docker Engine plus additional tools like Docker Compose, Kubernetes, and a visual dashboard, ideal for desktop development environments
|
|
63
|
+
|
|
64
|
+
This guide documents Docker Desktop installation for desktop platforms (macOS, Windows) and Docker Engine for server platforms (Ubuntu, Raspberry Pi OS, Amazon Linux).
|
|
65
|
+
|
|
66
|
+
## Prerequisites
|
|
67
|
+
|
|
68
|
+
Before installing Docker on any platform, ensure:
|
|
69
|
+
|
|
70
|
+
1. **Internet connectivity** - Required to download Docker packages
|
|
71
|
+
2. **Administrative privileges** - Required for system-wide installation
|
|
72
|
+
3. **Virtualization support** - Required on Windows and macOS (Docker Desktop uses a VM)
|
|
73
|
+
4. **Sufficient resources** - Minimum 4 GB RAM and 10 GB free disk space recommended
|
|
74
|
+
|
|
75
|
+
**Important**: If you have older Docker installations (docker, docker-engine, docker.io, or docker-ce), remove them before installing to avoid conflicts.
|
|
76
|
+
|
|
77
|
+
## Platform-Specific Installation
|
|
78
|
+
|
|
79
|
+
### macOS (Homebrew)
|
|
80
|
+
|
|
81
|
+
#### Prerequisites
|
|
82
|
+
|
|
83
|
+
- macOS 14 (Sonoma) or later (Docker Desktop supports the current and two previous major macOS releases)
|
|
84
|
+
- Homebrew package manager installed
|
|
85
|
+
- At least 4 GB RAM
|
|
86
|
+
- Apple Silicon (M1/M2/M3) or Intel processor
|
|
87
|
+
|
|
88
|
+
If Homebrew is not installed, install it first:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### Installation Steps
|
|
95
|
+
|
|
96
|
+
Run the following command to install Docker Desktop:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
brew install --quiet --cask docker
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The `--quiet` flag suppresses non-essential output, and `--cask` specifies the graphical application version (Docker Desktop) rather than just the CLI tools.
|
|
103
|
+
|
|
104
|
+
After installation, start Docker Desktop from the Applications folder or via command line:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
open -a Docker
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Note**: On first launch, Docker Desktop will require your password to install privileged helper components. This is a one-time requirement.
|
|
111
|
+
|
|
112
|
+
#### Verification
|
|
113
|
+
|
|
114
|
+
Confirm the installation succeeded:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
docker --version
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Expected output (version numbers may vary):
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Docker version 27.4.1, build b9d17ea
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Test Docker is running correctly:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
docker run hello-world
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
This downloads a test image and runs it. If successful, you will see a message beginning with "Hello from Docker!"
|
|
133
|
+
|
|
134
|
+
#### Troubleshooting
|
|
135
|
+
|
|
136
|
+
**Problem**: `docker: command not found` after installation
|
|
137
|
+
|
|
138
|
+
**Solution**: Docker Desktop may not be running. Start it from Applications:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
open -a Docker
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Wait for the Docker icon in the menu bar to show "Docker Desktop is running" before running commands.
|
|
145
|
+
|
|
146
|
+
**Problem**: "Cannot connect to the Docker daemon"
|
|
147
|
+
|
|
148
|
+
**Solution**: Docker Desktop is not running. Start it and wait for initialization:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
open -a Docker
|
|
152
|
+
sleep 30
|
|
153
|
+
docker ps
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Problem**: Slow performance on Apple Silicon
|
|
157
|
+
|
|
158
|
+
**Solution**: Ensure you are using the native Apple Silicon version. Reinstall with:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
brew uninstall --cask docker
|
|
162
|
+
brew install --quiet --cask docker
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### Ubuntu/Debian (APT)
|
|
168
|
+
|
|
169
|
+
#### Prerequisites
|
|
170
|
+
|
|
171
|
+
- Ubuntu 22.04 (Jammy) or later, or Debian 11 (Bullseye) or later (64-bit)
|
|
172
|
+
- sudo privileges
|
|
173
|
+
- At least 4 GB RAM recommended
|
|
174
|
+
|
|
175
|
+
**Important**: Do not use `apt install docker.io` or `snap install docker`. These packages are maintained by third parties and may be outdated. Use Docker's official repository instead.
|
|
176
|
+
|
|
177
|
+
First, remove any conflicting packages:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
|
|
181
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get remove -y $pkg 2>/dev/null || true
|
|
182
|
+
done
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### Installation Steps
|
|
186
|
+
|
|
187
|
+
**Step 1: Set up Docker's APT repository**
|
|
188
|
+
|
|
189
|
+
Add Docker's official GPG key and repository:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
193
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl
|
|
194
|
+
sudo install -m 0755 -d /etc/apt/keyrings
|
|
195
|
+
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
|
196
|
+
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Add the repository to APT sources:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
203
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Note for Debian**: Replace `ubuntu` with `debian` in the URL above:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Step 2: Install Docker Engine**
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Step 3: Configure Docker to start on boot and add user to docker group**
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
sudo systemctl enable docker.service
|
|
222
|
+
sudo systemctl enable containerd.service
|
|
223
|
+
sudo usermod -aG docker $USER
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Important**: Log out and log back in for the group membership to take effect, or run:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
newgrp docker
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### Verification
|
|
233
|
+
|
|
234
|
+
Confirm the installation succeeded:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
docker --version
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Expected output (version numbers may vary):
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
Docker version 27.4.1, build b9d17ea
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Verify Docker Engine is running:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
sudo systemctl status docker
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Test Docker works without sudo (after re-logging in):
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
docker run hello-world
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### Troubleshooting
|
|
259
|
+
|
|
260
|
+
**Problem**: `E: Unable to locate package docker-ce`
|
|
261
|
+
|
|
262
|
+
**Solution**: The repository was not added correctly. Verify the docker.list file exists:
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
cat /etc/apt/sources.list.d/docker.list
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
If empty or missing, repeat Step 1.
|
|
269
|
+
|
|
270
|
+
**Problem**: `Cannot connect to the Docker daemon`
|
|
271
|
+
|
|
272
|
+
**Solution**: Start the Docker service:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
sudo systemctl start docker
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Problem**: Permission denied when running docker commands
|
|
279
|
+
|
|
280
|
+
**Solution**: Either use sudo, or ensure your user is in the docker group:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
groups
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
If `docker` is not listed, add yourself and log out/in:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
sudo usermod -aG docker $USER
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Problem**: GPG key import fails
|
|
293
|
+
|
|
294
|
+
**Solution**: Ensure curl and ca-certificates are installed:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl gnupg
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### Raspberry Pi OS (APT)
|
|
303
|
+
|
|
304
|
+
#### Prerequisites
|
|
305
|
+
|
|
306
|
+
- Raspberry Pi OS (64-bit recommended) - Bookworm or Bullseye
|
|
307
|
+
- Raspberry Pi 3B+ or later (64-bit capable hardware)
|
|
308
|
+
- At least 2 GB RAM (4 GB recommended for multi-container workloads)
|
|
309
|
+
- sudo privileges
|
|
310
|
+
|
|
311
|
+
**Important Deprecation Notice**: Docker Engine v28 will be the last major version to support Raspberry Pi OS 32-bit (armhf). For long-term support, use 64-bit Raspberry Pi OS.
|
|
312
|
+
|
|
313
|
+
First, verify your architecture:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
uname -m
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
- `aarch64` = 64-bit (recommended)
|
|
320
|
+
- `armv7l` = 32-bit (limited support)
|
|
321
|
+
|
|
322
|
+
Remove any conflicting packages:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
|
|
326
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get remove -y $pkg 2>/dev/null || true
|
|
327
|
+
done
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
#### Installation Steps
|
|
331
|
+
|
|
332
|
+
**For 64-bit Raspberry Pi OS (aarch64):**
|
|
333
|
+
|
|
334
|
+
Use the Debian arm64 packages:
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
# Add Docker's GPG key
|
|
338
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
339
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl
|
|
340
|
+
sudo install -m 0755 -d /etc/apt/keyrings
|
|
341
|
+
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
|
|
342
|
+
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
|
343
|
+
|
|
344
|
+
# Add the repository
|
|
345
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
346
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
347
|
+
|
|
348
|
+
# Install Docker
|
|
349
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**For 32-bit Raspberry Pi OS (armv7l):**
|
|
353
|
+
|
|
354
|
+
Use the Raspbian-specific packages:
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Add Docker's GPG key
|
|
358
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
359
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl
|
|
360
|
+
sudo install -m 0755 -d /etc/apt/keyrings
|
|
361
|
+
sudo curl -fsSL https://download.docker.com/linux/raspbian/gpg -o /etc/apt/keyrings/docker.asc
|
|
362
|
+
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
|
363
|
+
|
|
364
|
+
# Add the repository
|
|
365
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/raspbian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
366
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
367
|
+
|
|
368
|
+
# Install Docker
|
|
369
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Post-installation (both architectures):**
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
sudo systemctl enable docker.service
|
|
376
|
+
sudo systemctl enable containerd.service
|
|
377
|
+
sudo usermod -aG docker $USER
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Log out and log back in for group membership to take effect.
|
|
381
|
+
|
|
382
|
+
#### Verification
|
|
383
|
+
|
|
384
|
+
Confirm the installation succeeded:
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
docker --version
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Expected output (version numbers may vary):
|
|
391
|
+
|
|
392
|
+
```
|
|
393
|
+
Docker version 27.4.1, build b9d17ea
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Test Docker works:
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
docker run hello-world
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**Note**: On ARM architecture, not all Docker images are available. Use images with `arm64` or `arm/v7` tags, or multi-architecture images.
|
|
403
|
+
|
|
404
|
+
#### Troubleshooting
|
|
405
|
+
|
|
406
|
+
**Problem**: "no matching manifest for linux/arm/v7" or "no matching manifest for linux/arm64"
|
|
407
|
+
|
|
408
|
+
**Solution**: The image does not support ARM architecture. Look for ARM-compatible images or use official images which typically support multiple architectures.
|
|
409
|
+
|
|
410
|
+
**Problem**: Installation very slow
|
|
411
|
+
|
|
412
|
+
**Solution**: Raspberry Pi SD cards can be slow. Use a high-quality SD card (Class 10 or faster) or boot from USB/SSD.
|
|
413
|
+
|
|
414
|
+
**Problem**: Docker daemon fails to start with cgroup errors
|
|
415
|
+
|
|
416
|
+
**Solution**: Add cgroup options to boot config:
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
echo ' cgroup_memory=1 cgroup_enable=memory' | sudo tee -a /boot/cmdline.txt
|
|
420
|
+
sudo reboot
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
**Problem**: Out of memory errors
|
|
424
|
+
|
|
425
|
+
**Solution**: Add swap space or reduce container memory limits. Create a swap file:
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
sudo fallocate -l 2G /swapfile
|
|
429
|
+
sudo chmod 600 /swapfile
|
|
430
|
+
sudo mkswap /swapfile
|
|
431
|
+
sudo swapon /swapfile
|
|
432
|
+
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
### Amazon Linux (DNF/YUM)
|
|
438
|
+
|
|
439
|
+
#### Prerequisites
|
|
440
|
+
|
|
441
|
+
- Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
|
|
442
|
+
- sudo privileges
|
|
443
|
+
- EC2 instance or compatible environment
|
|
444
|
+
|
|
445
|
+
**Note**: Amazon Linux 2023 uses DNF as the package manager. Amazon Linux 2 uses YUM. The commands below use DNF for AL2023; for AL2, replace `dnf` with `yum`.
|
|
446
|
+
|
|
447
|
+
#### Installation Steps
|
|
448
|
+
|
|
449
|
+
**For Amazon Linux 2023:**
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
# Update system packages
|
|
453
|
+
sudo dnf update -y
|
|
454
|
+
|
|
455
|
+
# Install Docker from Amazon's repository
|
|
456
|
+
sudo dnf install -y docker
|
|
457
|
+
|
|
458
|
+
# Start and enable Docker
|
|
459
|
+
sudo systemctl start docker
|
|
460
|
+
sudo systemctl enable docker
|
|
461
|
+
|
|
462
|
+
# Add user to docker group
|
|
463
|
+
sudo usermod -aG docker $USER
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
**For Amazon Linux 2:**
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
# Update system packages
|
|
470
|
+
sudo yum update -y
|
|
471
|
+
|
|
472
|
+
# Install Docker using amazon-linux-extras
|
|
473
|
+
sudo amazon-linux-extras install -y docker
|
|
474
|
+
|
|
475
|
+
# Start and enable Docker
|
|
476
|
+
sudo systemctl start docker
|
|
477
|
+
sudo systemctl enable docker
|
|
478
|
+
|
|
479
|
+
# Add user to docker group
|
|
480
|
+
sudo usermod -aG docker $USER
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
Log out and log back in for group membership to take effect.
|
|
484
|
+
|
|
485
|
+
**Installing Docker Compose:**
|
|
486
|
+
|
|
487
|
+
Docker Compose v2 is installed as a plugin. On Amazon Linux, install it separately:
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
# For AL2023
|
|
491
|
+
sudo dnf install -y docker-compose-plugin
|
|
492
|
+
|
|
493
|
+
# For AL2 (manual installation)
|
|
494
|
+
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
|
495
|
+
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
496
|
+
sudo chmod +x /usr/local/bin/docker-compose
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
#### Verification
|
|
500
|
+
|
|
501
|
+
Confirm the installation succeeded:
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
docker --version
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Expected output (version numbers may vary):
|
|
508
|
+
|
|
509
|
+
```
|
|
510
|
+
Docker version 25.0.3, build 4debf41
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
**Note**: Amazon's repository may have a slightly older version than Docker's official repository. This is intentional for stability.
|
|
514
|
+
|
|
515
|
+
Verify Docker is running:
|
|
516
|
+
|
|
517
|
+
```bash
|
|
518
|
+
sudo systemctl status docker
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
Test Docker works:
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
docker run hello-world
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
#### Troubleshooting
|
|
528
|
+
|
|
529
|
+
**Problem**: `No match for argument: docker` on Amazon Linux 2
|
|
530
|
+
|
|
531
|
+
**Solution**: Use amazon-linux-extras:
|
|
532
|
+
|
|
533
|
+
```bash
|
|
534
|
+
sudo amazon-linux-extras install -y docker
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
**Problem**: Docker version is older than expected
|
|
538
|
+
|
|
539
|
+
**Solution**: Amazon's repository prioritizes stability. If you need the latest version, use Docker's official CentOS repository (compatible with Amazon Linux):
|
|
540
|
+
|
|
541
|
+
```bash
|
|
542
|
+
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
|
543
|
+
sudo sed -i 's/$releasever/9/g' /etc/yum.repos.d/docker-ce.repo
|
|
544
|
+
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
**Problem**: `Cannot connect to the Docker daemon`
|
|
548
|
+
|
|
549
|
+
**Solution**: Start the Docker service:
|
|
550
|
+
|
|
551
|
+
```bash
|
|
552
|
+
sudo systemctl start docker
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
**Problem**: Permission denied
|
|
556
|
+
|
|
557
|
+
**Solution**: Ensure Docker service is running and you are in the docker group:
|
|
558
|
+
|
|
559
|
+
```bash
|
|
560
|
+
sudo systemctl status docker
|
|
561
|
+
groups
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
### Windows (Chocolatey)
|
|
567
|
+
|
|
568
|
+
#### Prerequisites
|
|
569
|
+
|
|
570
|
+
- Windows 10 version 21H2 or higher (64-bit), or Windows 11
|
|
571
|
+
- BIOS-level virtualization enabled (Intel VT-x or AMD-V)
|
|
572
|
+
- WSL 2 backend (recommended) or Hyper-V enabled
|
|
573
|
+
- At least 4 GB RAM
|
|
574
|
+
- Administrator PowerShell or Command Prompt
|
|
575
|
+
- Chocolatey package manager installed
|
|
576
|
+
|
|
577
|
+
If Chocolatey is not installed, install it first by running this command in an Administrator PowerShell:
|
|
578
|
+
|
|
579
|
+
```powershell
|
|
580
|
+
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
#### Installation Steps
|
|
584
|
+
|
|
585
|
+
Run the following command in an Administrator PowerShell or Command Prompt:
|
|
586
|
+
|
|
587
|
+
```powershell
|
|
588
|
+
choco install docker-desktop -y
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
|
|
592
|
+
|
|
593
|
+
**Note**: A system restart may be required after installation to complete the setup.
|
|
594
|
+
|
|
595
|
+
After restart, Docker Desktop will launch automatically. If not, start it from the Start Menu.
|
|
596
|
+
|
|
597
|
+
#### Verification
|
|
598
|
+
|
|
599
|
+
Open a new Command Prompt or PowerShell window, then run:
|
|
600
|
+
|
|
601
|
+
```powershell
|
|
602
|
+
docker --version
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
Expected output (version numbers may vary):
|
|
606
|
+
|
|
607
|
+
```
|
|
608
|
+
Docker version 27.4.1, build b9d17ea
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
Test Docker works:
|
|
612
|
+
|
|
613
|
+
```powershell
|
|
614
|
+
docker run hello-world
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
#### Troubleshooting
|
|
618
|
+
|
|
619
|
+
**Problem**: "WSL 2 installation is incomplete" error
|
|
620
|
+
|
|
621
|
+
**Solution**: Install WSL 2 before Docker Desktop:
|
|
622
|
+
|
|
623
|
+
```powershell
|
|
624
|
+
wsl --install
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
Restart your computer and then retry Docker Desktop installation.
|
|
628
|
+
|
|
629
|
+
**Problem**: "Virtualization must be enabled" error
|
|
630
|
+
|
|
631
|
+
**Solution**: Enable virtualization in your BIOS/UEFI settings. The exact steps vary by manufacturer. Look for settings named "Intel VT-x", "Intel Virtualization Technology", "AMD-V", or "SVM Mode".
|
|
632
|
+
|
|
633
|
+
**Problem**: Docker Desktop fails to start with Hyper-V error
|
|
634
|
+
|
|
635
|
+
**Solution**: Enable Hyper-V from an Administrator PowerShell:
|
|
636
|
+
|
|
637
|
+
```powershell
|
|
638
|
+
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart
|
|
639
|
+
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All -NoRestart
|
|
640
|
+
Restart-Computer
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
**Problem**: `docker: command not found` in terminal
|
|
644
|
+
|
|
645
|
+
**Solution**: Docker Desktop may not be running. Start it from the Start Menu and wait for initialization (look for the whale icon in the system tray).
|
|
646
|
+
|
|
647
|
+
**Problem**: Slow performance
|
|
648
|
+
|
|
649
|
+
**Solution**: Use WSL 2 backend (recommended) instead of Hyper-V. In Docker Desktop settings, ensure "Use the WSL 2 based engine" is checked.
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
### WSL (Ubuntu)
|
|
654
|
+
|
|
655
|
+
#### Prerequisites
|
|
656
|
+
|
|
657
|
+
- Windows 10 version 2004 or higher, or Windows 11
|
|
658
|
+
- WSL 2 enabled with Ubuntu distribution installed
|
|
659
|
+
- sudo privileges within WSL
|
|
660
|
+
|
|
661
|
+
**Recommended Approach**: Install Docker Desktop on Windows (see Windows section) and enable WSL 2 integration. Docker Desktop automatically provides Docker access within WSL distributions without separate installation.
|
|
662
|
+
|
|
663
|
+
**Alternative Approach**: Install Docker Engine directly within WSL (documented below). Use this approach if you prefer not to use Docker Desktop or need Docker only within WSL.
|
|
664
|
+
|
|
665
|
+
#### Installation Steps
|
|
666
|
+
|
|
667
|
+
**Option A: Docker Desktop Integration (Recommended)**
|
|
668
|
+
|
|
669
|
+
1. Install Docker Desktop on Windows (see Windows section)
|
|
670
|
+
2. Open Docker Desktop settings
|
|
671
|
+
3. Navigate to Resources > WSL Integration
|
|
672
|
+
4. Enable integration for your Ubuntu distribution
|
|
673
|
+
5. Docker commands will now work in your WSL Ubuntu terminal
|
|
674
|
+
|
|
675
|
+
**Option B: Docker Engine in WSL (Without Docker Desktop)**
|
|
676
|
+
|
|
677
|
+
Run these commands in your WSL Ubuntu terminal:
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
# Remove any conflicting packages
|
|
681
|
+
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
|
|
682
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get remove -y $pkg 2>/dev/null || true
|
|
683
|
+
done
|
|
684
|
+
|
|
685
|
+
# Add Docker's GPG key
|
|
686
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
687
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl
|
|
688
|
+
sudo install -m 0755 -d /etc/apt/keyrings
|
|
689
|
+
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
|
690
|
+
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
|
691
|
+
|
|
692
|
+
# Add the repository
|
|
693
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
694
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
695
|
+
|
|
696
|
+
# Install Docker
|
|
697
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
698
|
+
|
|
699
|
+
# Add user to docker group
|
|
700
|
+
sudo usermod -aG docker $USER
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
**Starting Docker in WSL:**
|
|
704
|
+
|
|
705
|
+
WSL does not use systemd by default, so Docker must be started manually:
|
|
706
|
+
|
|
707
|
+
```bash
|
|
708
|
+
sudo service docker start
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
To start Docker automatically when WSL launches, add to your `~/.bashrc`:
|
|
712
|
+
|
|
713
|
+
```bash
|
|
714
|
+
echo 'if [ -z "$(pgrep -x dockerd)" ]; then sudo service docker start > /dev/null 2>&1; fi' >> ~/.bashrc
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
Configure passwordless sudo for the docker service (optional):
|
|
718
|
+
|
|
719
|
+
```bash
|
|
720
|
+
echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/service docker *" | sudo tee /etc/sudoers.d/docker-service
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
#### Verification
|
|
724
|
+
|
|
725
|
+
Confirm the installation succeeded:
|
|
726
|
+
|
|
727
|
+
```bash
|
|
728
|
+
docker --version
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
Expected output (version numbers may vary):
|
|
732
|
+
|
|
733
|
+
```
|
|
734
|
+
Docker version 27.4.1, build b9d17ea
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
Test Docker works:
|
|
738
|
+
|
|
739
|
+
```bash
|
|
740
|
+
docker run hello-world
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
#### Troubleshooting
|
|
744
|
+
|
|
745
|
+
**Problem**: `Cannot connect to the Docker daemon` in WSL
|
|
746
|
+
|
|
747
|
+
**Solution**: Start the Docker service:
|
|
748
|
+
|
|
749
|
+
```bash
|
|
750
|
+
sudo service docker start
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
**Problem**: iptables errors when starting Docker
|
|
754
|
+
|
|
755
|
+
**Solution**: Switch to iptables-legacy:
|
|
756
|
+
|
|
757
|
+
```bash
|
|
758
|
+
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
|
|
759
|
+
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
|
|
760
|
+
sudo service docker restart
|
|
761
|
+
```
|
|
762
|
+
|
|
763
|
+
**Problem**: Docker works in WSL but not in Windows terminal
|
|
764
|
+
|
|
765
|
+
**Solution**: If using Docker Desktop, ensure WSL integration is enabled. If using Docker Engine in WSL only, Docker commands will only work from within WSL.
|
|
766
|
+
|
|
767
|
+
**Problem**: "permission denied" errors after adding user to docker group
|
|
768
|
+
|
|
769
|
+
**Solution**: Close and restart your WSL terminal, or run:
|
|
770
|
+
|
|
771
|
+
```bash
|
|
772
|
+
newgrp docker
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
---
|
|
776
|
+
|
|
777
|
+
### Git Bash (Windows Installation)
|
|
778
|
+
|
|
779
|
+
#### Prerequisites
|
|
780
|
+
|
|
781
|
+
- Windows 10 or Windows 11 (64-bit)
|
|
782
|
+
- Git Bash installed (comes with Git for Windows)
|
|
783
|
+
- Docker Desktop installed on Windows (see Windows section)
|
|
784
|
+
|
|
785
|
+
**Note**: Git Bash on Windows does not require a separate Docker installation. Git Bash inherits the Windows PATH, so once Docker Desktop is installed on Windows, the `docker` command is automatically available in Git Bash.
|
|
786
|
+
|
|
787
|
+
#### Installation Steps
|
|
788
|
+
|
|
789
|
+
1. Install Docker Desktop on Windows using Chocolatey (see Windows section):
|
|
790
|
+
|
|
791
|
+
```bash
|
|
792
|
+
# Run from Administrator PowerShell or Command Prompt
|
|
793
|
+
choco install docker-desktop -y
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
2. Restart your computer if prompted
|
|
797
|
+
|
|
798
|
+
3. Launch Docker Desktop from the Start Menu and wait for it to initialize
|
|
799
|
+
|
|
800
|
+
4. Open Git Bash - the `docker` command will be available
|
|
801
|
+
|
|
802
|
+
#### Verification
|
|
803
|
+
|
|
804
|
+
In Git Bash, confirm Docker is accessible:
|
|
805
|
+
|
|
806
|
+
```bash
|
|
807
|
+
docker --version
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
Expected output (version numbers may vary):
|
|
811
|
+
|
|
812
|
+
```
|
|
813
|
+
Docker version 27.4.1, build b9d17ea
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
Test Docker works:
|
|
817
|
+
|
|
818
|
+
```bash
|
|
819
|
+
docker run hello-world
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
#### Troubleshooting
|
|
823
|
+
|
|
824
|
+
**Problem**: `docker: command not found` in Git Bash
|
|
825
|
+
|
|
826
|
+
**Solution**: Docker Desktop may not be running or PATH may not be inherited. First, ensure Docker Desktop is running (check for whale icon in system tray). Then verify the PATH includes Docker:
|
|
827
|
+
|
|
828
|
+
```bash
|
|
829
|
+
echo $PATH | tr ':' '\n' | grep -i docker
|
|
830
|
+
```
|
|
831
|
+
|
|
832
|
+
If Docker is not in PATH, add it to your `~/.bashrc`:
|
|
833
|
+
|
|
834
|
+
```bash
|
|
835
|
+
echo 'export PATH="$PATH:/c/Program Files/Docker/Docker/resources/bin"' >> ~/.bashrc
|
|
836
|
+
source ~/.bashrc
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
**Problem**: `the input device is not a TTY` error
|
|
840
|
+
|
|
841
|
+
**Solution**: Git Bash's mintty terminal has TTY compatibility issues with Docker. Use `winpty` prefix:
|
|
842
|
+
|
|
843
|
+
```bash
|
|
844
|
+
winpty docker run -it ubuntu bash
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
Or add an alias to your `~/.bashrc`:
|
|
848
|
+
|
|
849
|
+
```bash
|
|
850
|
+
echo 'alias docker="winpty docker"' >> ~/.bashrc
|
|
851
|
+
source ~/.bashrc
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
**Problem**: Volume mount paths not working
|
|
855
|
+
|
|
856
|
+
**Solution**: Git Bash automatically converts Unix-style paths. For volume mounts, prefix with double slash or use Windows-style paths:
|
|
857
|
+
|
|
858
|
+
```bash
|
|
859
|
+
# Use double leading slash
|
|
860
|
+
docker run -v //c/Users/me/project:/app ubuntu ls /app
|
|
861
|
+
|
|
862
|
+
# Or use MSYS_NO_PATHCONV
|
|
863
|
+
MSYS_NO_PATHCONV=1 docker run -v /c/Users/me/project:/app ubuntu ls /app
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
**Problem**: Docker Compose commands fail
|
|
867
|
+
|
|
868
|
+
**Solution**: Docker Compose v2 is integrated as `docker compose` (with a space). The old `docker-compose` command may not work in Git Bash. Use:
|
|
869
|
+
|
|
870
|
+
```bash
|
|
871
|
+
docker compose up
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
Instead of:
|
|
875
|
+
|
|
876
|
+
```bash
|
|
877
|
+
docker-compose up
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
---
|
|
881
|
+
|
|
882
|
+
## Post-Installation Configuration
|
|
883
|
+
|
|
884
|
+
After installing Docker on any platform, consider these optional but recommended configurations.
|
|
885
|
+
|
|
886
|
+
### Running Docker Without sudo (Linux)
|
|
887
|
+
|
|
888
|
+
On Linux systems, Docker requires root privileges by default. To run Docker commands without `sudo`:
|
|
889
|
+
|
|
890
|
+
1. Create the docker group (if it does not exist):
|
|
891
|
+
|
|
892
|
+
```bash
|
|
893
|
+
sudo groupadd docker
|
|
894
|
+
```
|
|
895
|
+
|
|
896
|
+
2. Add your user to the docker group:
|
|
897
|
+
|
|
898
|
+
```bash
|
|
899
|
+
sudo usermod -aG docker $USER
|
|
900
|
+
```
|
|
901
|
+
|
|
902
|
+
3. Log out and log back in for the change to take effect, or run:
|
|
903
|
+
|
|
904
|
+
```bash
|
|
905
|
+
newgrp docker
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
4. Verify you can run Docker without sudo:
|
|
909
|
+
|
|
910
|
+
```bash
|
|
911
|
+
docker run hello-world
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
**Security Warning**: The docker group grants root-equivalent privileges. Only add trusted users to this group.
|
|
915
|
+
|
|
916
|
+
### Configuring Docker to Start on Boot (Linux)
|
|
917
|
+
|
|
918
|
+
On systems using systemd:
|
|
919
|
+
|
|
920
|
+
```bash
|
|
921
|
+
sudo systemctl enable docker.service
|
|
922
|
+
sudo systemctl enable containerd.service
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
### Configuring Default Registry Mirror
|
|
926
|
+
|
|
927
|
+
To use a custom registry mirror (useful for corporate environments or improving pull speeds), create or edit `/etc/docker/daemon.json`:
|
|
928
|
+
|
|
929
|
+
```bash
|
|
930
|
+
sudo mkdir -p /etc/docker
|
|
931
|
+
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
|
|
932
|
+
{
|
|
933
|
+
"registry-mirrors": ["https://mirror.example.com"]
|
|
934
|
+
}
|
|
935
|
+
EOF
|
|
936
|
+
sudo systemctl restart docker
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### Configuring Log Rotation
|
|
940
|
+
|
|
941
|
+
By default, Docker container logs can grow unbounded. Configure log rotation:
|
|
942
|
+
|
|
943
|
+
```bash
|
|
944
|
+
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
|
|
945
|
+
{
|
|
946
|
+
"log-driver": "json-file",
|
|
947
|
+
"log-opts": {
|
|
948
|
+
"max-size": "10m",
|
|
949
|
+
"max-file": "3"
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
EOF
|
|
953
|
+
sudo systemctl restart docker
|
|
954
|
+
```
|
|
955
|
+
|
|
956
|
+
### Verifying Docker Compose
|
|
957
|
+
|
|
958
|
+
Docker Compose v2 is included with Docker Engine and Docker Desktop. Verify it is available:
|
|
959
|
+
|
|
960
|
+
```bash
|
|
961
|
+
docker compose version
|
|
962
|
+
```
|
|
963
|
+
|
|
964
|
+
Expected output (version numbers may vary):
|
|
965
|
+
|
|
966
|
+
```
|
|
967
|
+
Docker Compose version v2.32.1
|
|
968
|
+
```
|
|
969
|
+
|
|
970
|
+
---
|
|
971
|
+
|
|
972
|
+
## Common Issues
|
|
973
|
+
|
|
974
|
+
### Issue: "Cannot connect to the Docker daemon"
|
|
975
|
+
|
|
976
|
+
**Symptoms**: `Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?`
|
|
977
|
+
|
|
978
|
+
**Solutions**:
|
|
979
|
+
|
|
980
|
+
- **Linux**: Start the Docker service:
|
|
981
|
+
|
|
982
|
+
```bash
|
|
983
|
+
sudo systemctl start docker
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
- **macOS/Windows**: Ensure Docker Desktop is running (check for icon in menu bar/system tray)
|
|
987
|
+
|
|
988
|
+
- **WSL**: Start Docker manually:
|
|
989
|
+
|
|
990
|
+
```bash
|
|
991
|
+
sudo service docker start
|
|
992
|
+
```
|
|
993
|
+
|
|
994
|
+
### Issue: Permission Denied
|
|
995
|
+
|
|
996
|
+
**Symptoms**: `Got permission denied while trying to connect to the Docker daemon socket`
|
|
997
|
+
|
|
998
|
+
**Solutions**:
|
|
999
|
+
|
|
1000
|
+
- Add your user to the docker group:
|
|
1001
|
+
|
|
1002
|
+
```bash
|
|
1003
|
+
sudo usermod -aG docker $USER
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
- Log out and log back in
|
|
1007
|
+
- As a temporary workaround, use sudo:
|
|
1008
|
+
|
|
1009
|
+
```bash
|
|
1010
|
+
sudo docker run hello-world
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
### Issue: Disk Space Full
|
|
1014
|
+
|
|
1015
|
+
**Symptoms**: Docker operations fail with "no space left on device"
|
|
1016
|
+
|
|
1017
|
+
**Solutions**:
|
|
1018
|
+
|
|
1019
|
+
Remove unused Docker objects:
|
|
1020
|
+
|
|
1021
|
+
```bash
|
|
1022
|
+
# Remove unused containers, networks, images, and volumes
|
|
1023
|
+
docker system prune -af --volumes
|
|
1024
|
+
```
|
|
1025
|
+
|
|
1026
|
+
Check Docker disk usage:
|
|
1027
|
+
|
|
1028
|
+
```bash
|
|
1029
|
+
docker system df
|
|
1030
|
+
```
|
|
1031
|
+
|
|
1032
|
+
### Issue: Network Conflicts
|
|
1033
|
+
|
|
1034
|
+
**Symptoms**: Containers cannot access the internet or conflict with host network
|
|
1035
|
+
|
|
1036
|
+
**Solutions**:
|
|
1037
|
+
|
|
1038
|
+
Restart Docker to reset networking:
|
|
1039
|
+
|
|
1040
|
+
```bash
|
|
1041
|
+
# Linux
|
|
1042
|
+
sudo systemctl restart docker
|
|
1043
|
+
|
|
1044
|
+
# macOS/Windows
|
|
1045
|
+
# Restart Docker Desktop from the menu
|
|
1046
|
+
```
|
|
1047
|
+
|
|
1048
|
+
Check if Docker networks conflict with your host network:
|
|
1049
|
+
|
|
1050
|
+
```bash
|
|
1051
|
+
docker network ls
|
|
1052
|
+
docker network inspect bridge
|
|
1053
|
+
```
|
|
1054
|
+
|
|
1055
|
+
### Issue: Container DNS Resolution Failures
|
|
1056
|
+
|
|
1057
|
+
**Symptoms**: Containers cannot resolve hostnames
|
|
1058
|
+
|
|
1059
|
+
**Solutions**:
|
|
1060
|
+
|
|
1061
|
+
Configure custom DNS in `/etc/docker/daemon.json`:
|
|
1062
|
+
|
|
1063
|
+
```bash
|
|
1064
|
+
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
|
|
1065
|
+
{
|
|
1066
|
+
"dns": ["8.8.8.8", "8.8.4.4"]
|
|
1067
|
+
}
|
|
1068
|
+
EOF
|
|
1069
|
+
sudo systemctl restart docker
|
|
1070
|
+
```
|
|
1071
|
+
|
|
1072
|
+
### Issue: Slow Image Pulls
|
|
1073
|
+
|
|
1074
|
+
**Symptoms**: `docker pull` takes very long or times out
|
|
1075
|
+
|
|
1076
|
+
**Solutions**:
|
|
1077
|
+
|
|
1078
|
+
- Check your internet connection
|
|
1079
|
+
- Use a registry mirror (see Post-Installation Configuration)
|
|
1080
|
+
- For corporate networks, configure proxy settings:
|
|
1081
|
+
|
|
1082
|
+
```bash
|
|
1083
|
+
sudo mkdir -p /etc/systemd/system/docker.service.d
|
|
1084
|
+
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF'
|
|
1085
|
+
[Service]
|
|
1086
|
+
Environment="HTTP_PROXY=http://proxy.example.com:8080"
|
|
1087
|
+
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
|
|
1088
|
+
Environment="NO_PROXY=localhost,127.0.0.1"
|
|
1089
|
+
EOF
|
|
1090
|
+
sudo systemctl daemon-reload
|
|
1091
|
+
sudo systemctl restart docker
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
---
|
|
1095
|
+
|
|
1096
|
+
## References
|
|
1097
|
+
|
|
1098
|
+
- [Docker Official Installation Documentation](https://docs.docker.com/engine/install/)
|
|
1099
|
+
- [Docker Desktop for Mac](https://docs.docker.com/desktop/setup/install/mac-install/)
|
|
1100
|
+
- [Docker Desktop for Windows](https://docs.docker.com/desktop/setup/install/windows-install/)
|
|
1101
|
+
- [Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)
|
|
1102
|
+
- [Docker Engine on Debian](https://docs.docker.com/engine/install/debian/)
|
|
1103
|
+
- [Docker Engine on Raspberry Pi OS](https://docs.docker.com/engine/install/raspberry-pi-os/)
|
|
1104
|
+
- [Docker Desktop WSL 2 Backend](https://docs.docker.com/desktop/features/wsl/)
|
|
1105
|
+
- [Docker Post-Installation Steps for Linux](https://docs.docker.com/engine/install/linux-postinstall/)
|
|
1106
|
+
- [Docker Desktop Homebrew Cask](https://formulae.brew.sh/cask/docker)
|
|
1107
|
+
- [Docker Desktop Chocolatey Package](https://community.chocolatey.org/packages/docker-desktop)
|
|
1108
|
+
- [AWS Documentation: Installing Docker on Amazon Linux](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html)
|
|
1109
|
+
- [Microsoft Learn: Docker on WSL](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers)
|