Difference between revisions of "Docker install"
| Line 1: | Line 1: | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
#!/bin/bash | #!/bin/bash | ||
| − | |||
| − | |||
| − | |||
| − | + | set -e | |
| − | |||
| − | |||
| − | + | DATASET_NAME="tank-nvme/docker" | |
| − | + | DOCKER_DIR="/var/lib/docker" | |
| − | |||
| − | |||
| − | sudo | + | if ! sudo zfs list "${DATASET_NAME%%/*}" &>/dev/null; then |
| + | echo "Error: ZFS pool '${DATASET_NAME%%/*}' does not exist." >&2 | ||
| + | exit 1 | ||
| + | fi | ||
| − | sudo | + | if sudo zfs list "$DATASET_NAME" &>/dev/null; then |
| + | echo "ZFS dataset $DATASET_NAME already exists." | ||
| + | else | ||
| + | sudo zfs create -o mountpoint=legacy "$DATASET_NAME" | ||
| + | fi | ||
| − | sudo docker | + | # Add Docker's official GPG key: |
| + | sudo apt update | ||
| + | sudo apt install ca-certificates curl | ||
| + | sudo install -m 0755 -d /etc/apt/keyrings | ||
| + | sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc | ||
| + | sudo chmod a+r /etc/apt/keyrings/docker.asc | ||
| − | + | # Add the repository to Apt sources: | |
| + | sudo tee /etc/apt/sources.list.d/docker.sources <<EOF | ||
| + | Types: deb | ||
| + | URIs: https://download.docker.com/linux/ubuntu | ||
| + | Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") | ||
| + | Components: stable | ||
| + | Architectures: $(dpkg --print-architecture) | ||
| + | Signed-By: /etc/apt/keyrings/docker.asc | ||
| + | EOF | ||
| + | |||
| + | sudo apt update | ||
| − | |||
| − | |||
sudo apt-get update | sudo apt-get update | ||
| − | sudo apt-get install | + | sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| + | |||
| + | sudo systemctl stop docker | ||
| + | sudo systemctl stop docker.socket | ||
| − | sudo | + | sudo mkdir -p "$DOCKER_DIR" |
| − | |||
| − | |||
| − | + | if ! mountpoint -q "$DOCKER_DIR"; then | |
| − | + | sudo mount -t zfs "$DATASET_NAME" "$DOCKER_DIR" | |
| − | + | fi | |
| − | |||
| − | sudo | + | if ! grep -q "$DATASET_NAME" /etc/fstab; then |
| + | echo "$DATASET_NAME $DOCKER_DIR zfs defaults 0 0" | sudo tee -a /etc/fstab > /dev/null | ||
| + | fi | ||
| − | sudo | + | sudo mkdir -p /etc/docker |
| + | sudo tee /etc/docker/daemon.json > /dev/null <<EOF | ||
| + | { | ||
| + | "storage-driver": "zfs" | ||
| + | } | ||
| + | EOF | ||
| + | sudo systemctl start docker | ||
| + | sleep 5 | ||
sudo docker run hello-world | sudo docker run hello-world | ||
``` | ``` | ||
Revision as of 23:07, 19 June 2026
!/bin/bash
set -e
DATASET_NAME="tank-nvme/docker" DOCKER_DIR="/var/lib/docker"
if ! sudo zfs list "${DATASET_NAME%%/}" &>/dev/null; then
echo "Error: ZFS pool '${DATASET_NAME%%/}' does not exist." >&2
exit 1
fi
if sudo zfs list "$DATASET_NAME" &>/dev/null; then
echo "ZFS dataset $DATASET_NAME already exists."
else
sudo zfs create -o mountpoint=legacy "$DATASET_NAME"
fi
Add Docker's official GPG key:
sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF
sudo apt update
sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl stop docker sudo systemctl stop docker.socket
sudo mkdir -p "$DOCKER_DIR"
if ! mountpoint -q "$DOCKER_DIR"; then
sudo mount -t zfs "$DATASET_NAME" "$DOCKER_DIR"
fi
if ! grep -q "$DATASET_NAME" /etc/fstab; then
echo "$DATASET_NAME $DOCKER_DIR zfs defaults 0 0" | sudo tee -a /etc/fstab > /dev/null
fi
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json > /dev/null <<EOF {
"storage-driver": "zfs"
} EOF
sudo systemctl start docker sleep 5 sudo docker run hello-world ```