Lab - Install Docker and Docker Compose on Ubuntu
Context To serve as the basis when self hosting services at home or in the cloud.
Install Docker CE
Remove any existing Docker installations:
sudo apt remove docker docker-engine docker.io containerd runcInstall the prerequisite packages:
sudo apt install ca-certificates curl gnupg lsb-releaseInstall using Docker's apt repository:
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgAdd the Docker repository to the APT package manager:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullUpdate the APT indices, then install the Docker Engine along with the Docker Compose plugin:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginOnce installed, ensure that the Docker daemon is running:
sudo systemctl status dockerIf it is not running (active), enable and start the Docker daemon with the following commands:
sudo systemctl enable docker
sudo systemctl start dockerTo run docker as a non-root user, add user to the docker group
sudo groupadd docker
sudo usermod -aG docker $USERLog out and log back in so that your group membership is re-evaluated.
If you're running Linux in a virtual machine, it may be necessary to restart the virtual machine for changes to take effect.
You can also run the following command to activate the changes to groups:
$ newgrp dockerVerify that you can run docker commands without sudo.
docker run hello-worldAccessing Remote Docker
If the Ubuntu box running the Docker engine is somewhere else in the LAN, e.g. with IP 192.168.0.10, and your local machine has Docker or Docker client installed, you can set the environment variable DOCKER_HOST locally, e.g.,
export DOCKER_HOST=tcp://192.168.0.10:2375/then you can issue docker commands from your terminal directly. Be sure not to do this over insecure network.