Как установить и использовать Docker в Ubuntu
Шаг 1. Подготовка
Поддержка swap
1) Войдите на хост Ubuntu как пользователь с привилегиями sudo.
2) Отредактируйте /etc/default/grub файл. Добавьте или измените GRUB_CMDLINE_LINUX строку
$ cat /etc/default/grub |grep GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1" GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
3) Обновление GRUB.
$ sudo update-grub
The changes take effect when the system is rebooted!!!
Шаг 2 — Установка Docker
Установка Docker коротко
Install Docker Engine on Ubuntu https://docs.docker.com/engine/install/ubuntu/
$ sudo apt-get update $ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" $ sudo apt-get update $ sudo apt-get install -y docker-ce docker-ce-cli containerd.io $ sudo systemctl status docker $ sudo usermod -aG docker agis $ sudo usermod -aG docker work
$ sudo chown root:docker /var/run/docker.sock
!!! Изменить dockerroot. Обязательно
$ sudo -i
# docker info
# sudo nano /etc/docker/daemon.json # cat /etc/docker/daemon.json { "storage-driver": "overlay2", "data-root": "/data/root_docker" }
# systemctl stop docker.service # systemctl start docker.service # docker info ... Docker Root Dir: /data/root_docker ... $ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
ПО умолчанию docker работает с /var/lib/docker. Там сохраняются образы, тома и контейнеры. Поэтому важно, чтобы эта папка распологалась в разделе, который может бакапиться с помощью snapshot и он не пропадал во время переустановки операционной системы.
Установить внутренню сеть docker
$ sudo docker network create --driver bridge --subnet 129.200.100.0/24 --ip-range 129.200.100.0/24 agis-net
Установка Docker. Подробно
Дистрибутив Docker, доступный в официальном репозитории Ubuntu, не всегда является последней версией программы. Лучше установить последнюю версию Docker, загрузив ее из официального репозитория Docker. Для этого добавляем новый источник дистрибутива, вводим ключ GPG из репозитория Docker, чтобы убедиться, действительна ли загруженная версия, а затем устанавливаем дистрибутив. Сначала обновляем существующий перечень пакетов:
$ sudo apt-get update
Затем устанавливаем необходимые пакеты, которые позволяют apt использовать пакеты по HTTPS:
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
Затем добавляем в свою систему ключ GPG официального репозитория Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Добавляем репозиторий Docker в список источников пакетов APT:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Затем обновим базу данных пакетов информацией о пакетах Docker из вновь добавленного репозитория:
$ sudo apt-get update
Следует убедиться, что мы устанавливаем Docker из репозитория Docker, а не из репозитория по умолчанию Ubuntu:
$ sudo apt-cache policy docker-ce
Вывод получится приблизительно следующий. Номер версии Docker может быть иным:
Output of apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 18.03.1~ce~3-0~ubuntu
Version table:
18.03.1~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Обратите внимание, что docker-ce не устанавливается, но для установки будет использован репозиторий Docker для Ubuntu 18.04 (bionic).
Актуальная версия docker – https://docs.docker.com/engine/release-notes/
Далее устанавливаем Docker:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Теперь Docker установлен, демон запущен, и процесс будет запускаться при загрузке системы. Убедимся, что процесс запущен:
$ sudo systemctl status docker
Вывод должен быть похож на представленный ниже, сервис должен быть запущен и активен:
Output
● docker.service – Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
Docs: https://docs.docker.com
Main PID: 10096 (dockerd)
Tasks: 16
CGroup: /system.slice/docker.service
├─10096 /usr/bin/dockerd -H fd://
└─10113 docker-containerd –config /var/run/docker/containerd/containerd.toml
При установке Docker мы получаем не только сервис (демон) Docker, но и утилиту командной строки docker или клиент Docker. Использование утилиты командной строки docker рассмотрено ниже.
!!! Изменить dockerroot. Обязательно
$ docker info $ cat /etc/docker/daemon.json { "storage-driver": "overlay2", "data-root": "/data/root_docker" }
Необходимо установить раздел LVM и примонтировать к /data
# systemctl stop docker.service # systemctl start docker.service # docker info ... Docker Root Dir: /data/root_docker ...
ПО умолчанию docker работает с /var/lib/docker. Там сохраняются образы, тома и контейнеры. Поэтому важно, чтобы эта папка распологалась в разделе, который может бакапиться с помощью snapshot и он не пропадал во время переустановки операционной системы
Шаг 3 — Использование команды Docker без sudo
По умолчанию, запуск команды docker требует привилегий пользователя root или пользователя группы docker, которая автоматически создается при установке Docker. При попытке запуска команды docker пользователем без привилегий sudo или пользователем, не входящим в группу docker, выводные данные будут выглядеть следующим образом:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See ‘docker run –help’.
Чтобы не вводить sudo каждый раз при запуске команды docker, добавьте имя своего пользователя в группу docker:
$ sudo usermod -aG docker ${USER} $ sudo usermod -aG docker agis
Для применения этих изменений в составе группы необходимо разлогиниться и снова залогиниться на сервере или задать следующую команду:
su – ${USER}
Для продолжения работы необходимо ввести пароль пользователя.
Убедиться, что пользователь добавлен в группу docker можно следующим образом:
$ id -nG Output sammy sudo docker
Если вы хотите добавить произвольного пользователя в группу docker, можно указать конкретное имя пользователя:
sudo usermod -aG docker username
Далее предполагается, что вы используете команду docker как пользователь, находящийся в группе docker. Если вы не хотите добавлять своего пользователя в группу docker, в начало команд необходимо добавлять sudo.
Шаг 4. Установка docker-compose
Install (https://docs.docker.com/compose/install/). Последнию версию проверять на сайте https://docs.docker.com/compose/release-notes/
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
Проверять установленную версию
$ docker-compose --version docker-compose version 1.26.2, build eefe0d31
Uninstall
sudo rm /usr/local/bin/docker-compose
Шаг 5 — Использование команды Docker
Команда docker позволяет использовать различные опции, команды с аргументами. Синтаксис выглядит следующим образом:
docker [option] [command] [arguments]
Для просмотра всех доступных подкоманд введите:
Полный список подкоманд Docker 18:
docker
Для просмотра опций использования определенной команды введите:
docker docker-subcommand –help
Для просмотра всей информации о Docker используется следующая команда:
docker info
Рассмотрим некоторые команды подробнее. Расскажем сначала о работе с образами.
Шаг 4 — Работа с образами Docker
Контейнеры Docker запускаются из образов Docker. По умолчанию Docker получает образы из хаба Docker Hub, представляющего собой реестр образов, который поддерживается компанией Docker. Кто угодно может создать и загрузить свои образы Docker в Docker Hub, поэтому для большинства приложений и дистрибутивов Linux, которые могут потребоваться вам для работы, уже есть соответствующие образы в Docker Hub.
Чтобы проверить, можете ли вы осуществлять доступ и загружать образы из Docker Hub, введите следующую команду:
docker run hello-world
Корректный результат работы этой команды, который означает, что Docker работает правильно, представлен ниже:
Output
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
…
Изначально Docker не мог находить образ hello-world локально, поэтому загружал образ из Docker Hub, который является репозиторием по умолчанию. После загрузки образа Docker создавал из образа контейнер и запускал приложение в контейнере, отображая сообщение.
Образы, доступные в Docker Hub, можно искать с помощью команды docker и подкоманды search. Например, для поиска образа Ubuntu вводим:
docker search ubuntu
Скрипт просматривает Docker Hub и возвращает список всех образов, имена которых подходят под заданный поиск. В данном случае мы получим примерно следующий результат:
Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 7917 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 193 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK]
neurodebian NeuroDebian provides neuroscience research s… 50 [OK]
ubuntu-debootstrap debootstrap –variant=minbase –components=m… 38 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 36 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 18
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 13
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 10 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 6 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK]
darksheer/ubuntu Base Ubuntu Image — Updated hourly 4 [OK]
1and1internet/ubuntu-16-apache ubuntu-16-apache 3 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK]
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 1
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
smartentry/ubuntu ubuntu with smartentry 0 [OK]
ossobv/ubuntu
…
В столбце OFFICIAL строка OK показывает, что образ построен и поддерживается компанией, которая занимается разработкой этого проекта. Когда нужный образ выбран, можно загрузить его на ваш компьютер с помощью подкоманды pull.
Чтобы загрузить официальный образ ubuntu на свой компьютер, запускается следующая команда:
docker pull ubuntu
Результат будет выглядеть следующим образом:
Output
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
После загрузки образа можно запустить контейнер с загруженным образом с помощью подкоманды run. Как видно из примера hello-world, если при выполнении docker с помощью подкоманды run образ еще не загружен, клиент Docker сначала загрузит образ, а затем запустит контейнер с этим образом.
Для просмотра загруженных на компьютер образов нужно ввести:
docker images
Вывод должен быть похож на представленный ниже:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 113a43faa138 4 weeks ago 81.2MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
Далее в инструкции показано, что образы, используемые для запуска контейнеров, можно изменять и применять для создания новых образов, которые, в свою очередь, могут быть загружены (технический термин push) в Docker Hub или другой Docker-реестр.
Рассмотрим более подробно, как запускать контейнеры.
Шаг 5 — Запуск контейнера Docker
Контейнер hello-world, запущенный на предыдущем этапе, является примером контейнера, который за
пускается и завершает работу после вывода тестового сообщения. Контейнеры могут выполнять и более полезные действия, а также могут быть интерактивными. Контейнеры похожи на виртуальные машины, но являются менее требовательными к ресурсам.
В качестве примера запустим контейнер с помощью последней версии образа Ubuntu. Комбинация параметров -i и -t обеспечивает интерактивный доступ к командному процессору контейнера:
docker run -it ubuntu
Командная строка должна измениться, показывая, что мы теперь работаем в контейнере. Она будет иметь следующий вид:
Output
root@d9b100f2f636:/#
Обратите внимание, что в командной строке отображается идентификатор контейнера. В данном примере это d9b100f2f636. Идентификатор контейнера потребуется нам позднее, чтобы указать, какой контейнер необходимо удалить.
Теперь можно запускать любые команды внутри контейнера. Попробуем, например, обновить базу данных пакета внутри контейнера. Здесь перед командами не нужно использовать sudo, поскольку вы работаете внутри контейнера как пользователь с привилегиями root:
apt update
Теперь в нем можно установить любое приложение. Попробуем установить Node.js:
apt install nodejs
Данная команда устанавливает Node.js в контейнер из официального репозитория Ubuntu. Когда установка завершена, убедимся, что Node.js установлен:
node -v
В терминале появится номер версии:
Output
v8.10.0
Все изменения, которые вы производите внутри контейнера, применяются только для этого контейнера.
Чтобы выйти из контейнера, вводим команду exit.
Далее рассмотрим, как управлять контейнерами в своей системе.
Шаг 6 — Управление контейнерами Docker
Через некоторое время после начала использования Docker на вашей машине будет множество активных (запущенных) и неактивных контейнеров. Просмотр ** активных контейнеров **:
docker ps
Результат получится примерно следующим:
Output
CONTAINER ID IMAGE COMMAND CREATED
По нашей инструкции вы запустили два контейнера: один из образа hello-world, второй из образа ubuntu. Оба контейнера уже не запущены, но существуют в системе.
Чтобы увидеть и активные, и неактивные контейнеры, запускаем docker ps с помощью параметра -a:
docker ps -a
Результат получится примерно следующим:
d9b100f2f636 ubuntu “/bin/bash” About an hour ago Exited (0) 8 minutes ago sharp_volhard
01c950718166 hello-world “/hello” About an hour ago Exited (0) About an hour ago festive_williams
Чтобы увидеть последние из созданных контейнеров, задаем параметр -l:
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9b100f2f636 ubuntu “/bin/bash” About an hour ago Exited (0) 10 minutes ago sharp_volhard
Для запуска остановленного контейнера используем команду docker start, затем указываем идентификатор контейнера или его имя. Запустим загруженный из Ubuntu контейнер с идентификатором d9b100f2f636:
docker start d9b100f2f636
Контейнер запускается. Теперь для просмотра его статуса можно использовать docker ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9b100f2f636 ubuntu “/bin/bash” About an hour ago Up 8 seconds sharp_volhard
Для остановки запущенного контейнера используем команду docker stop, затем указываем идентификатор контейнера или его имя. В этот раз мы используем имя, которое назначил контейнеру Docker, то есть sharp_volhard:
docker stop sharp_volhard
Если вам контейнер больше не нужен, удаляем его командой docker rm с указанием либо идентификатора, либо имени контейнера. Чтобы найти идентификатор или имя контейнера, связанного с образом hello-world, используйте команду docker ps -a. Затем контейнер можно удалить.
docker rm festive_williams
Запустить новый контейнер и задать ему имя можно с помощью параметра –name. Параметр –rm позволяет создать контейнер, который самостоятельно удалится после остановки. Для более подробной информации о данных и других опциях используйте команду docker run help.
Контейнеры можно превратить в образы для построения новых контейнеров. Рассмотрим, как это сделать.
Вывод
С помощью данной инструкции вы научились устанавливать Docker, работать с образами и контейнерами
Uninstall Docker Engine
Uninstall the Docker Engine, CLI, and Containerd packages:
$ sudo apt-get purge docker-ce docker-ce-cli containerd.io
Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:
$ sudo rm -rf /data/root_docker
$ sudo rm -rf /var/lib/docker
You must delete any edited configuration files manually.
Uninstall old versions
Older versions of Docker were called docker, docker.io, or docker-engine. If these are installed, uninstall them:
$ sudo apt-get remove docker docker-engine docker.io containerd runc