Установка и использование Docker в CentOS 7

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

Существует 2 способа установки Docker на CentOS 7. Один из способов заключается в том, что вы устанавливаете Docker на уже установленную операционную систему. Другой же способ – это установка на сервер при помощи Docker Machine, которую автоматически устанавливает Docker.

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

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

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

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

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

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

$ sudo yum check-update

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

$ curl -fsSL https://get.docker.com/ | sh

После завершения установки, запустите демон Docker:

$ sudo systemctl start 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)

И наконец, убедитесь, что он будет стартовать после каждой перезагрузки сервера:

$ sudo systemctl enable 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 centos

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

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 2224 [OK]
jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8… 22 [OK]
jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M… 17 [OK]
million12/centos-supervisor Base CentOS-7 with supervisord launcher, h… 11 [OK]
nimmis/java-centos This is docker images of CentOS 7 with dif… 10 [OK]
torusware/speedus-centos Always updated official CentOS docker imag… 8 [OK]
nickistre/centos-lamp LAMP on centos setup 3 [OK]


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

$ docker pull centos

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

$ docker run centos

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

$ docker images

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

[secondary_lable Output]
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

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

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

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

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

$ docker run -it centos

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

Output
[[email protected] /]#

Теперь вы можете выполнить любую команду внутри контейнера. Например, давайте установим сервер MariaDB в рабочем контейнере:

$ yum install mariadb-server

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

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

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

После установки сервера MariaDB внутри контейнера CentOS, теперь у вас есть контейнер, который отличается от того образа, который вы использовали для его создания.

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

$ 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 mariadb-server” -a “Sunday Ogwu-Chinuwa” 59839a1b7de2 finid/centos-mariadb

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

$ docker images

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

Output
REPOSITORY TAG IMAGE ID CREATED SIZE
finid/centos-mariadb latest 23390430ec73 6 seconds ago 424.6 MB
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

В приведенном выше примере, CentOS-MariaDB – это новый образ, который был получен из существующего CentOS образа  из Docker Hub.  Разница в размерах отражает изменения, которые были сделаны. В данном примере, изменением было то, что был установлен MariaDB сервер. Так что в следующий раз вам нужно запустить контейнер с помощью CentOS с предварительно установленным сервером MariaDB , и вы можете просто использовать новый образ.  Образ могут быть  построен  из так называемого DockerfileНо это очень сложный процесс, который также выходит за рамки данной статьи.

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

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

$ docker ps

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

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd centos “/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 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/centos-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/centos
6a6c96337be1: Mounted from library/centos

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

Заключение

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