середа, 2 жовтня 2024 р.

Встановлення Docker на Linux сервері

Задача

В мене є мінімалістичний Linux сервер на хостінгу. Я хочу використовувати його для експериментів і розгортання невеликих сервісів, користуватися якими буду здебільшого я сам. 

Оскільки я планую числені експерименти зі встановленням і видаленням сервісів, буду орієнтуватися на їх імплементацію у вигляді Docker контейнерів. Це дозволить захистити базову операційну систему від безладу, а також надасть спосіб перенесення сервісів на інші сервери у разі потреби.

Отже вихідні умови наступні:

  • сервер: Ubuntu 22.04, CPU 4 core, RAM 6GB, HDD 400GB (340GB free)

  • доступ: SSH

Задача: встановити Docker Engine (не Desktop), забезпечити можливість оновлення його версій штатними засобами ОС, тобто apt.

Інформаційний пошук

Яку версію Docker Engine всановлювати?

Маючи певний досвід роботи з Ubuntu, перша ідея, яка приходить, це встановити пакунок Docker з тих, що доступні в базових репозиторіях Ubuntu:

chd@REBEL:~$ sudo apt update

chd@REBEL:~$ apt search docker

docker.io/jammy-updates 24.0.7-0ubuntu2~22.04.1 amd64

  Linux container runtime


Схоже, що docker.io – це саме те, що нам потрібно. Остання доступна версія пакунку – 24.0.7.

А яка зараз взагалі найсвіжіша версія Docker Engine?

Іду на сайт https://www.docker.com/

Developers → DocumentationManualsDocker EngineRelease Notes 

Бачу, що на сьогодні останньою версією Docker Engine є 27.3. Отже версія 24.0, яку пропонує Ubuntu, є застарілою і мені не підходить.

Як встановити Docker Engine останньої версії?

Зі сторінки огляду Docker Engine переходжу на Install Docker Engine. Пропускаю посилання, пов’язані з Docker Desktop, і знаходжу в таблиці Supported Platforms посилання на інструкцію зі встановлення Docker Engine на Ubuntu.

Встановлення Docker Engine

Попередня чистка системи

Пересвідчимося, що в системі немає вже встановлених пакунків, пов’язаних з docker, containerd, чи runc. Якщо такі є, їх потрібно видалити. В документації для цього пропонуються наступні команди:

chd@REBEL:~$ for pkg in \

docker.io docker-doc docker-compose docker-compose-v2 \

podman-docker containerd runc

do

sudo apt-get remove $pkg

done

Налаштування доступу до репозиторію пакунків

Серед описаних далі способів встановлення обираємо Install using the apt repository.

Налаштування доступу до репозиторію пакунків:

chd@REBEL:~$ sudo apt-get update


chd@REBEL:~$ sudo apt-get install ca-certificates curl

Reading package lists... Done

Building dependency tree... Done

Reading state information... Done

ca-certificates is already the newest version (20240203~22.04.1).

curl is already the newest version (7.81.0-1ubuntu1.18).

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


chd@REBEL:~$ sudo install -m 0755 -d /etc/apt/keyrings


chd@REBEL:~$ sudo curl -fsSL \

    https://download.docker.com/linux/ubuntu/gpg \

    -o /etc/apt/keyrings/docker.asc


chd@REBEL:~$ sudo chmod a+r /etc/apt/keyrings/docker.asc


chd@REBEL:~$ echo \

  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \

  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


# вміст файлу docker.list має бути одним рядком

chd@REBEL:~$ cat /etc/apt/sources.list.d/docker.list

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu   jammy stable


chd@REBEL:~$ sudo apt-get update

Get:10 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [40.7 kB]

Встановлення пакунків Docker Engine

Встановлення пакунків Docker Engine:

chd@REBEL:~$ sudo apt-get install docker-ce docker-ce-cli \

    containerd.io docker-buildx-plugin docker-compose-plugin

The following additional packages will be installed:

  docker-ce-rootless-extras git git-man libcurl3-gnutls liberror-perl libltdl7 libslirp0 patch pigz slirp4netns

The following NEW packages will be installed:

  containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin git git-man libcurl3-gnutls liberror-perl libltdl7 libslirp0 patch pigz

  slirp4netns

Do you want to continue? [Y/n] y

Перевірка працездатності Docker Engine

Стан сервісу docker:

chd@REBEL:~$ systemctl status docker

● docker.service - Docker Application Container Engine

     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)

     Active: active (running) since Wed 2024-10-02 16:25:43 EEST; 2min 50s ago


Перевірка версії docker:

chd@REBEL:~$ docker --version

Docker version 27.3.1, build ce12230


Запуск тестового контейнера:

chd@REBEL:~$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

c1ec31eb5944: Pull complete 

Digest: sha256:91fb4b041da273d5a3273b6d587d62d518300a6ad268b28628f74997b93171b2

Status: Downloaded newer image for hello-world:latest


Hello from Docker!

This message shows that your installation appears to be working correctly.


chd@REBEL:~$ sudo docker ps -a

CONTAINER ID   IMAGE         COMMAND    CREATED              STATUS                      PORTS     NAMES

a22480e8d2c4   hello-world   "/hello"   About a minute ago   Exited (0) 59 seconds ago             quizzical_jang


chd@REBEL:~$ sudo docker images

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE

hello-world   latest    d2c94e258dcb   17 months ago   13.3kB


Чистка системи після запуску тестового контейнера:

chd@REBEL:~$ sudo docker rm $(sudo docker ps -aq)

a22480e8d2c4


chd@REBEL:~$ sudo docker rmi $(sudo docker images -q)

Untagged: hello-world:latest

Untagged: hello-world@sha256:91fb4b041da273d5a3273b6d587d62d518300a6ad268b28628f74997b93171b2

Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a

Deleted: sha256:ac28800ec8bb38d5c35b49d45a6ac4777544941199075dff8c4eb63e093aa81e

Дозвіл для використання docker без sudo

Досі для виконання команд docker поточний користувач був змушений використовувати sudo, інакше наявних повноважень було недостатньо, наприклад:

chd@REBEL:~$ docker ps

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/containers/json": dial unix /var/run/docker.sock: connect: permission denied


Для зручності в подальшому і можливості працювати з docker без sudo додамо поточного користувача (в даному випадку chd) до системної групи docker:

chd@REBEL:~$ sudo usermod -a -G docker chd

chd@REBEL:~$ groups chd

chd : chd sudo docker

Для актуалізації членства в новій групі користувач повинен увійти в систему в новій сесії (перелогінитися).

Тепер команди docker можна виконувати без sudo:

chd@REBEL:~$ docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Посилання

Немає коментарів:

Дописати коментар