|
@@ -0,0 +1,205 @@
|
|
|
+# Docker
|
|
|
+
|
|
|
+Information on how to install and use Docker.
|
|
|
+
|
|
|
+Docker is an open-source project that automates the deployment of applications inside software containers.
|
|
|
+
|
|
|
+## Prerequisites
|
|
|
+
|
|
|
+Ensure you have the following:
|
|
|
+
|
|
|
+- a (fresh) install of Ubuntu LTS with SSH enabled and VSCode installed including a `sudo` user
|
|
|
+
|
|
|
+ >- SSH: `sudo apt install openssh-server`
|
|
|
+ >- VSCode: download `.deb` package from [this URL](https://code.visualstudio.com/download)
|
|
|
+
|
|
|
+- OR a Windows machine including a `Administrator` user with VSCode installed
|
|
|
+
|
|
|
+ >- VSCode: download `Windows installer` package from [this URL](https://code.visualstudio.com/download)
|
|
|
+
|
|
|
+## Install Docker on Ubuntu
|
|
|
+
|
|
|
+### Step 1 - Installing Docker
|
|
|
+
|
|
|
+Add the `docker-ce` repo:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo apt update
|
|
|
+sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
|
|
|
+
|
|
|
+curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
|
|
+echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
|
+
|
|
|
+sudo apt update
|
|
|
+```
|
|
|
+
|
|
|
+Install `docker`:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo apt install docker-ce
|
|
|
+```
|
|
|
+
|
|
|
+### Step 2 - Executing the Docker Command Without Sudo
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo usermod -aG docker ${USER}
|
|
|
+```
|
|
|
+
|
|
|
+Reboot your machine:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo reboot
|
|
|
+```
|
|
|
+
|
|
|
+### Step 3 - Installing docker-compose
|
|
|
+
|
|
|
+`Docker Compose` is a tool that allows you to run multi-container application environments based on definitions set in a YAML file. It uses service definitions to build fully customizable environments with multiple containers that can share networks and data volumes.
|
|
|
+
|
|
|
+```bash
|
|
|
+mkdir -p ~/.docker/cli-plugins/
|
|
|
+curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
|
|
|
+
|
|
|
+chmod +x ~/.docker/cli-plugins/docker-compose
|
|
|
+```
|
|
|
+
|
|
|
+To verify that the installation was successful, you can run:
|
|
|
+
|
|
|
+```bash
|
|
|
+docker compose version
|
|
|
+```
|
|
|
+
|
|
|
+You'll see output similar to this:
|
|
|
+
|
|
|
+```bash
|
|
|
+Docker Compose version v2.3.3
|
|
|
+```
|
|
|
+
|
|
|
+## Setting Up a `docker-compose.yml` file
|
|
|
+
|
|
|
+To demonstrate how to set up a `docker-compose.yml` file and work with `Docker Compose`, you'll create a **postgres** environment using the official `postgres` image from `Docker Hub`, the public **Docker registry**. This containerized environment will serve a `postgres` service.
|
|
|
+
|
|
|
+Start off by creating a new directory in your home folder, and then moving into it:
|
|
|
+
|
|
|
+```bash
|
|
|
+mkdir ~/docker-repo
|
|
|
+cd ~/docker-repo
|
|
|
+```
|
|
|
+
|
|
|
+In this directory, set up an application folder to serve as the document root for your **postgres** environment and an *running* folder to serve as **persistent** "rundir" root:
|
|
|
+
|
|
|
+```bash
|
|
|
+mkdir postgres
|
|
|
+mkdir runnning
|
|
|
+```
|
|
|
+
|
|
|
+Next, create the `docker-compose.yml` file:
|
|
|
+
|
|
|
+```bash
|
|
|
+vi docker-compose.yml
|
|
|
+```
|
|
|
+
|
|
|
+Insert the following content in your `docker-compose.yml` file:
|
|
|
+
|
|
|
+```yaml
|
|
|
+version: '3.7'
|
|
|
+
|
|
|
+services:
|
|
|
+ postgres:
|
|
|
+ image: postgres:11
|
|
|
+ container_name: postgres
|
|
|
+ network_mode: bridge
|
|
|
+ restart: always
|
|
|
+ ports:
|
|
|
+ - 5432:5432
|
|
|
+ environment:
|
|
|
+ - POSTGRES_USER=postgres
|
|
|
+ - POSTGRES_PASSWORD=my_password
|
|
|
+ volumes:
|
|
|
+ - /home/$USER/docker-repo/running/postgres/data:/var/lib/postgresql/data
|
|
|
+```
|
|
|
+
|
|
|
+Save and close the file.
|
|
|
+
|
|
|
+## Running docker-compose
|
|
|
+
|
|
|
+With the `docker-compose.yml` file in place, you can now execute `Docker Compose` to bring your environment up. The following command will download the necessary `Docker` images, create a container for the **postgres** service, and run the containerized environment in background mode:
|
|
|
+
|
|
|
+```bash
|
|
|
+docker-compose -f docker-compose.yml up -d
|
|
|
+```
|
|
|
+
|
|
|
+`Docker Compose` will first look for the defined image on your local system, and if it can't locate the image it will download the image from `Docker Hub`.
|
|
|
+
|
|
|
+Your environment is now up and running in the background. To verify that the container is active, you can run:
|
|
|
+
|
|
|
+```bash
|
|
|
+docker ps
|
|
|
+```
|
|
|
+
|
|
|
+## Usefull commands
|
|
|
+
|
|
|
+Go inside the container:
|
|
|
+
|
|
|
+```bash
|
|
|
+docker exec -it postgres /bin/bash -l
|
|
|
+```
|
|
|
+
|
|
|
+Stop, start or restart the container:
|
|
|
+
|
|
|
+```bash
|
|
|
+docker stop postgres
|
|
|
+docker start postgres
|
|
|
+docker restart postgres
|
|
|
+```
|
|
|
+
|
|
|
+> Tips for Daniele
|
|
|
+
|
|
|
+```bash
|
|
|
+docker exec -it postgres /bin/bash -l
|
|
|
+apt update
|
|
|
+apt install postgis
|
|
|
+exit
|
|
|
+```
|
|
|
+
|
|
|
+> Tips for Daniele (Configure a database and dump the content from `dbexport.pgsql`)
|
|
|
+
|
|
|
+```bash
|
|
|
+psql -h localhost -p 5432 -U postgres
|
|
|
+
|
|
|
+CREATE ROLE livestock WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'happycattle';
|
|
|
+CREATE DATABASE livestock_db;
|
|
|
+GRANT ALL PRIVILEGES ON DATABASE livestock_db TO livestock;
|
|
|
+\q
|
|
|
+
|
|
|
+psql -h localhost -p 5432 -U livestock livestock_db
|
|
|
+
|
|
|
+CREATE SCHEMA postgis;
|
|
|
+CREATE EXTENSION postgis SCHEMA public;
|
|
|
+\q
|
|
|
+
|
|
|
+psql -h localhost -p 5432 -U livestock livestock_db < dbexport.pgsql
|
|
|
+
|
|
|
+psql -h localhost -p 5432 -U livestock livestock_db
|
|
|
+
|
|
|
+SELECT * FROM livpop ORDER BY livpop DESC LIMIT 10;
|
|
|
+\q
|
|
|
+```
|
|
|
+
|
|
|
+## Install Docker on Windows
|
|
|
+
|
|
|
+### Install interactively
|
|
|
+
|
|
|
+- Downloaded the installer (`Docker Desktop Installer.exe`) from [Docker Hub](https://docs.docker.com/desktop/install/windows-install/)
|
|
|
+- Double-click `Docker Desktop Installer.exe` to run the installer
|
|
|
+- When prompted, ensure the **Use WSL 2** instead of **Hyper-V** option on the *Configuration page* is selected or not depending on your choice of backend
|
|
|
+ > If your system only supports one of the two options, you will not be able to select which backend to use
|
|
|
+- Follow the instructions on the installation wizard to authorize the installer and proceed with the install
|
|
|
+- When the installation is successful, click *Close* to complete the installation process
|
|
|
+
|
|
|
+### Start Docker Desktop
|
|
|
+
|
|
|
+Docker Desktop does not start automatically after installation. To start Docker Desktop:
|
|
|
+
|
|
|
+- Search for Docker, and select `Docker Desktop` in the search results
|
|
|
+- The Docker menu displays the *Docker Subscription Service Agreement* window.
|
|
|
+- Select *Accept* to continue. `Docker Desktop` starts after you accept the terms
|