Настройка рабочей станции Linux (Ubuntu) в качестве среды разработки. Часть вторая. Установка и настройка Doсker

Настройка рабочей станции Linux (Ubuntu) в качестве среды разработки. Часть вторая. Установка и настройка Doсker

Emil Garipov

Статья представляет собой пошаговое руководство по установке и начальной настройке Docker на рабочей станции Linux c версией Ubuntu Desktop 19.04. в качестве среды разработки.

Так как я хочу использовать некоторые инструменты сетевой автоматизации, такие как Nornir, Ansible и Netmiko и многие из этих инструментов построены на Python и предназначены для работы в среде Linux, можно легко столкнуться с проблемами зависимостей. Изолировав эти инструменты в контейнере, мы сможем избежать этой проблемы.
Все это описано на сайте Cisco Devnet, также в документации по установке Docker.

Статьи

  1. Часть первая. Общая настройка
  2. Часть вторая. Установка и настройка Doсker

Оглавление статьи:

  1. Настройка репозитория
  2. Установка Docker Community Edition
  3. Управление Docker'ом в качестве не root пользователя
  4. Настройка Docker'a для запуска при загрузке
  5. Работа с контейнером
  6. Установка Nodejs
  7. Установка текстового редактора и IDE Conda
  8. Установка Postman
  9. Установка Ngrok
  10. Установка Google Chrome
  11. Установка клиента OpenConnect

Настройка репозитория

В первой части статьи мы уже проделали первые два шага по настройке репозитория. Продублирую их здесь:

  1. Обновляем индекс пакета apt:
  $ sudo apt-get update

2. Устанавливаем необходимые пакеты для того, чтобы разрешить apt использовать репозиторий через HTTPS:

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

После того, как ввели эти команды, он поинтересуется, готовы ли продолжить установку пакетов:

Набираем Y, если хотим продолжить или n, если хотим прервать. Так как я хочу пойти дальше, я набираю Y и нажимаю Enter.

3. Добавляем официальный GPG-ключ Docker'a:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Проверяем, что у нас теперь есть ключ с идентификатором 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, выполнив поиск последних 8 символов этого идентификатора(0EBF CD88):

$ sudo apt-key fingerprint 0EBFCD88

4. Добавляем репозиторий Docker в apt, чтобы всегда проверять наличие последней стабильной версии:

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Установка Docker Community Edition

  1. Обновляем индекс пакета apt:
  $ sudo apt-get update
  1. Обновляем индекс пакета apt:
  $ sudo apt-get update

2. Устанавливаем последнюю версию Docker Engine Community и containerd:

  $ sudo apt-get install docker-ce docker-ce-cli containerd.io

После соглашения [Y], установка продолжиться.

3. Проверяем, что Docker Engine Community установлен правильно, запустив образ Hello-world. :

  $ sudo docker run hello-world

Эта команда загружает тестовый образ и запускает его в контейнере. Когда контейнер запускается, он выводит информационное сообщение и выходит из него.

Управление Docker'ом в качестве не root пользователя

Демон Docker привязывается к сокету Unix, а не к порту TCP. По умолчанию Unix сокет принадлежит пользователю root, и другие пользователи могут получить к нему доступ только с помощью sudo. Демон Docker всегда работает от имени пользователя root.

Мы не хотим постоянно вводить docker команды с помощью sudo, для этого создадим группу Unix под названием docker и добавим к ней пользователей. Когда демон Docker запуститься, он создаст Unix сокет, доступный для членов группы docker.

Для того, чтобы создать новую группу воспользуемся документацией.

  1. Создаем группу docker:
  $ sudo groupadd docker

Говорит, что уже есть эта группа.

2. Добавляем существующего пользователя, в данном случае gissarsky в группу docker.

  $ sudo usermod -aG docker $USER

3. Выйдем из системы и войдем обратно, чтобы членство в группе было пересмотрено.

4. В Linux вы также можете запустить следующую команду для активации изменений в группах:

  $ newgrp docker 

5. Проверяем, что мы можем выполнять команды Docker'a без sudo.

Все работает.

Настройка Docker'a для запуска при загрузке

В большинстве современных дистрибутивов Linux (RHEL, CentOS, Fedora, Ubuntu 16.04 и выше) используется systemd для управления тем, какие службы запускаются при загрузке системы.

$ sudo systemctl enable docker

Работа с контейнером

Вот мы и подобрались к непосредственной работе с самим контейнером. И как пишется в документации:"Пришло время начать создавать приложения в стиле Docker".

  1. Coздаем директорию Docker и переходим в эту дирекию.
sudo mkdir Devnet
cd Devnet

2. Создаем Dockerfile

Dockerfile определяет, что происходит в среде внутри контейнера. Доступ к таким ресурсам, как сетевые интерфейсы и дисковые накопители, виртуализированы внутри этой среды, изолированной от остальной части системы, поэтому вам нужно отобразить порты во внешний мир и указать, в какие файлы вы хотите "копировать" в эту среду.  Dockerfile создаем через nano:

sudo nano Dockerfile

Прописываем в файле следующие строки:

# Будем использовать официальный Python версии 3.7-stretch в качестве 
# родительского образа
FROM python:3.7-stretch
# Зададим рабочую директорию в /automation
WORKDIR /automation
# Скопируем содержимое текущей директории в контейнер /automation
COPY . /automation
# Устанавливает все необходимые пакеты, указанные в файле 
# requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

3. Создаем файл requirements.txt в той же директории, что и Dockerfile через nano:

sudo nano requirements.txt

В файле requirements.txt перечислены пакеты Python, которые будут помещены в новый образ контейнера. Все они должны быть установлены с помощью pip. В моем случае, содержимое файла выглядит следующим образом:

ansible
netmiko
napalm
nornir
pyang
ncclient
xmltodict


4. Теперь осталось только создать образ. Сначала проверим, что мы находимся в нужной нам директории:

ls


Для создания образа запускаем команду build. Это создаст образ Docker, который мы назовем devnet с помощью опции --tag. Можно использовать более короткий параметр -t:

$ sudo docker build -f ./Dockerfile -t devnet .

Посмотрим, что происходит во время выполнения команды. Часть "-t devnet" задает имя образа. Привязка локального образа к хранилищу в реестре производится через - имя пользователя/репозиторий:тег. Тег является необязательным, но рекомендуемым параметром, так как это механизм, используемый реестрами для выдачи версий для образов Docker.

Точка в конце является обязательной, так как "docker build" предполагает наличие пути. В этом случае команда выполняется непосредственно из директории, содержащей Dockerfile, в нашем случае Devnet. Когда мы выполним эту команду, Docker получит базовый образ Python из Docker Hub. Затем этот образ запуститься как новый контейнер, в котором выполнятся инструкции из Dockerfile. Начнется установка всего, что мы указали в файле requirements.txt. После выполнения этих инструкций контейнер Python будет содержать все изменения и будет сохранен в виде нового контейнера, готового к использованию.

Если все прошло удачно, то ответ будет следующим:

5. Проверяем, где находится наш образ:

$ sudo docker image ls

6. Теперь мы можем запустить новый контейнер, используя наш образ. Запустим его в автономном интерактивном режиме (используя флаг "-dit"), контейнер запуститься и продолжит работать в фоновом режиме:

$ docker run -dit --name automate_net devnet

Проверяем, что получилось:

$ docker ps -a


Контейнер теперь работает в фоновом режиме, но пока ничего не делает.

7. Мы можем подключиться к контейнеру с помощью следующей команды:

$ docker exec -it automate_net /bin/bash

Вышеприведенная команда соединяет нас с bash shell внутри контейнера. В этой среде все инструменты, которые были установлены во время процесса сборки, теперь будут доступны. Проверим, установился ли Nornir:

$ root@690ec45c42b5:/automation# python
>>> import nornir.core

Все работает. Теперь, воспользовавшись статьей о Nornir можно начать с ним работать.






Report Page