Установка и использование Docker в Ubuntu 16.04

Docker – это программное обеспечение, которое позволит быстро и легко запускать выполнение процесса в контейнере, который больше похож на  виртуальную машину, только более портативную, потребляющую больше ресурсов и с дружелюбным интерфейсом. Если вы хотите более детально ознакомиться с компонентами Docker, то пройдите последующей ссылке: Экосистема Docker: Введение в общие компоненты. Существует 2 способа установки Docker на Ubuntu 16.04. Один из способов заключается в том, что вы устанавливаете Docker на уже установленную операционную систему. Другой же способ – это установка на сервер при помощи Docker Machine, которую автоматически устанавливает Docker.

В этом мануале вы узнаете как установить и использовать Docker на Ubuntu 16.04.

Необходимые условия

Для дальнейшей работы с этим мануалом вам понадобится:

• 64-разрядная версия Ubuntu 16.04 Droplet

• Non-root пользователь с правами sudo Руководство по установке Ubuntu 16.04 объясняет как это сделать.)

Все команды данного руководства  должны выполняться не суперпользователем. Начальное руководство по установке для Ubuntu 16.04 объясняет, как добавить пользователей и предоставить им доступ sudo.

Шаг первый-установка Docker

Установка пакета Docker доступна на официальном сайте Ubuntu 16.04, но в репозитории может не быть последней версии. Чтобы получить самую свежую и наилучшую версию Docker лучше устанавливать его с официального сайта Docker. В этом разделе показано как это сделать.

Но во-первых, давайте обновить базу данных пакетов:

$ sudo apt-get update

Теперь давайте установим сам Docker. Добавьте ключ GPG  официального  репозитория Docker  в свою систему:

$ sudo apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Добавьте репозиторий Docker к APT источникам:

$ echo “deb https://apt.dockerproject.org/repo ubuntu-xenial main” | sudo tee /etc/apt/sources.list.d/docker.list

Обновление базы данных пакетов с пакетом Docker, который мы только что добавили из репозиториев:

$ sudo apt-get update

Убедитесь, что вы собираетесь устанавливать из репозитория Docker, а не из стандартного репозитория Ubuntu 16.04 :

$ apt-cache policy docker-engines

Вы должны увидеть следующий результат:

Output of apt-cache policy docker-engine

docker-engine:
Installed: (none)
Candidate: 1.11.1-0~xenial
Version table:
1.11.1-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
1.11.0-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

Обратите внимание, что подсистема Docker Engine не установлена, но она кандидат на установку из  репозиториев Docker для Ubuntu 16.04. Номер версии Docker Engine может отличаться.

И, наконец, установим сам Docker:

$ sudo apt-get install -y docker-engine

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 Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)

Установка Docker предоставляет вам не только демон Docker, но и клиент Docker в виде утилиты командной строки. Как пользоваться командной строкой в этом мануале будет рассматриваться немного позже.

Шаг второй-выполнение команд Docker без Sudo(необязательный)

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

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See ‘docker run –help’.

Если вы не хотите каждый раз печатать sudo, то добавьте свое имя в группу пользователей Docker:

$ sudo usermod -aG docker $(whoami)

Вы должны будете выйти из системы и зайти обратно, чтобы активировать изменения. Если вам нужно добавить пользователя к Docker группе,то сделайте это с помощью команды:

$ sudo usermod -aG docker username

Оставшаяся часть статьи предполагает, что все команды вы запускаете как пользователь группы Docker. В противном случае, в начале каждой команды добавляйте sudo.

Шаг 3 – Использование Docker Command

Docker установлен и работает,  теперь самое время, чтобы познакомиться с утилитой командной строки. Использование docker заключается в передаче опций и команд, с последующими аргументами. Синтаксис имеет вид:

$ docker [option] [command] [arguments]

Для просмотра всех доступных опций, введите:

$ docker

Полный список доступных подкоманд Docker версии 1.11.1 имеет вид:

Output
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container’s changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container’s filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container’s filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
network Manage Docker networks
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code

Чтобы посмотреть все доступные переключатели для конкретной команды, наберите:

$ docker docker-subcommand –help

Для просмотра общей информации о системе docker используйте команду:

$ docker info

Шаг 4 – Работа с Docker Images

Контейнеры Docker выполняются из образа Docker. По умолчанию, образы вытаскиваются из облачного хранилища Docker Hub. Любой может создавать и размещать свои Docker изображения на Docker Hub, поэтому для большинства приложений и дистрибутивов Linux вам нужно запустить Docker контейнеры, которые размещены на Docker Hub.

Для того, чтобы проверить, можно ли получить доступ и загрузить изображения с Докер Hub, наберите:

$ docker run hello-world

Выходные данные, которые будут означать, что в Docker работает правильно:

Output
Hello from Docker.
This message shows that your installation appears to be working correctly.

Вы можете осуществлять поиск изображений, доступных на Docker Hub с помощью команды Docker с  подкомандой search:

$ docker search ubuntu

Скрипт будет “ползать” по Docker Hub и возвращать список изображений, чье имя будет соответствовать имени в строке поиска. В этом случае, результат должен быть похож на этот:

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s… 3808 [OK]
ubuntu-upstart Upstart is an event-based replacement for … 61 [OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag… 25 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of… 24 [OK]
ubuntu-debootstrap debootstrap –variant=minbase –components… 23 [OK]
nickistre/ubuntu-lamp LAMP server on Ubuntu 6 [OK]
nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 5 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images… 4 [OK]
nimmis/ubuntu This is a docker images different LTS vers… 4 [OK]
maxexcloo/ubuntu Docker base image built on Ubuntu with Sup… 2 [OK]
admiringworm/ubuntu Base ubuntu images based on the official u… 1 [OK]

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

$ docker pull ubuntu

После того, как изображение было загружено, вы можете запустить контейнер, используя при этом загруженный файл и  подкоманду run. Если же изображение не было загружено, то при выполнение подкоманды run, клиент Docker сначала загрузит изображение, а затем запустит контейнер:

$ docker run ubuntu

Для просмотра изображений, которые были загружены на ваш компьютер, наберите:

$ docker images

Результат должен выглядеть примерно следующим образом:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

Позже вы увидите, что изображения, которые вы используете для запуска контейнера могут быть модифицированы и использованы для создания новых изображений, которые затем могут быть загружены в Docker Hub.

Шаг 5 – запуск Docker контейнеров

Контейнер hello-world, который мы запускали в предыдущем примере работает и завершает работу после вывода текстового сообщения. Однако, контейнеры могут быть намного полезнее,чем этот примитив, В конце концов, они похожи на виртуальные машины, только более ресурсосберегающие и дружелюбные.

В качестве примера, давайте запустим контейнер, который использует последнюю версию Ubuntu. Сочетание клавиш -i и -t  предоставляет вам интерактивный доступ к оболочке  контейнера:

$ docker run -it ubuntu

Ваша командная строка должна измениться, чтобы  показать вам, что вы в настоящее время работает внутри контейнера:

Output
[email protected]:/#

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

$ apt-get update

Затем попробуем установить любое приложение в нем. Например, давайте установим Node JS:

$ apt-get install -y nodejs

Шаг 6 – фиксирование изменений контейнера в  Docker Image

Файловые системы Docker являются временными. Если вы запускаете Docker , то вы можете создавать, изменять и удалять файлы, подобно виртуальной машине. Однако, если вы остановите работу контейнера, то все изменения будут обнулены, а   файлы, которые вы создали-будут удалены. Это связано с тем, что образы  Docker в виртуальном мире больше похожи на шаблоны, нежели на изображения.

Чтобы сохранить изменения внутри контейнера вам нужно использовать  Docker Data Volumes. Если вы хотите узнать как работать с  Docker Data Volumes в Ubuntu 14.04 обратитесь к мануалу.

В этом разделе показано, как сохранить состояние контейнера в качестве нового Docker изображения.

Для того, чтобы сохранить состояние контейнера в качестве нового образа, первое что нужно сделать, так это выйти:

$ exit

Затем, необходимо зафиксировать изменения в новый экземпляр Docker изображения с помощью следующей команды. Ключ -m необходим для сообщения об изменениях. Он поможет вам и другим пользователям узнать какие изменения были сделаны. Ключ -a используется для указания автора. Если вы не создали дополнительные репозитории на Docker Hub, то хранилище, как правило, использует имя пользователя Docker Hub:

$ docker commit -m “What did you do to the image” -a “Author Name” container-id repository/new_image_name

К примеру:

$ docker commit -m “added node.js” -a “Sunday Ogwu-Chinuwa” d9b100f2f636 finid/ubuntu-nodejs

После того как операция будет завершена, список Docker изображений должен пополниться новым изображением:

$ docker images

Результат должен быть примерно таким:

Output
finid/ubuntu-nodejs latest 62359544c9ba 50 seconds ago 206.6 MB
ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

Шаг 7 – составление списка контейнеров

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

$ docker ps

Получится нечто подобное:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd ubuntu “/bin/bash” 3 hours ago Up 3 hours silly_spence

Для просмотра всех контейнеров – активных и неактивных, передайте команде ключ -a:

$ docker ps -a

Для просмотра последнего контейнера который вы создали, передайте ключ -l:

$ docker ps -l

Чтобы остановить активный контейнер, наберите:

$ docker stop container-id

Контейнер-ID можно найти в выводе команды docker ps.

Шаг 8 – продвигаем docker image в репозиторий docker

Следующий логический шаг, после создания новых изображений, -это поделится ими со своими друзьями. Для того чтобы начать  продвигать изображение в Docker Hub вы должны иметь аккаунт.

В этом разделе показано, как продвигать свое  Docker изображение  в  Docker Hub . Чтобы узнать, как создать свой собственный реестр Docker, просмотрите Как создать частный Docker реестр на Ubuntu 14.04.

Чтобы создать учетную запись на   Docker Hub, зарегистрируйтесь на  Docker Hub. После этого  необходимо войти в  Docker Hub. Сначала вам предложат проверку:

$ docker login -u docker-registry-username

Если вы указали правильный пароль, то аутентификация должна пройти успешно. Затем вы можете начать продвигать свое собственное изображение с помощью:

$ docker push docker-registry-username/docker-image-name

Это займет некоторое время, и после завершения, на выходе будет примерно следующее:

Output
The push refers to a repository [docker.io/finid/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

После внесения вашего изображения в реестр, приборная панель вашего акrаунта должна выглядеть следующим образом:

7

Заключение

Тема про Docker намного больше, чем могло здесь поместиться, но этого вполне достаточно, чтобы начать работать с ним на Ubuntu 16.04. Как и большинство проектов с открытым исходным кодом, Docker построен на быстроразвивающейся базе кода, поэтому  выработайте у себя привычку посещать страницу блога проекта для получения всей последней информации.

Также посетите другие обучающие ресурсы Docker.