Как установить и использовать Docker на CentOS 7
Введение
Docker — это приложение, которое упрощает и упрощает запуск процессов приложений в контейнере, которые похожи на виртуальные машины, только более портативные, более ресурсоемкие и более зависимые от операционной системы хоста. Подробное знакомство с различными компонентами контейнера Docker см. в статье Экосистема Docker: введение в общие компоненты.
Существует два метода установки Docker в CentOS 7. Один метод включает его установку в существующей установке операционной системы. Другой включает запуск сервера с помощью инструмента Docker Machine, который автоматически устанавливает на него Docker.
В этом руководстве вы узнаете, как установить и использовать его в существующей установке CentOS 7.
Предпосылки
- Дроплет CentOS 7 для 64-разрядной версии
- Пользователь без полномочий root с привилегиями sudo. Сервер CentOS 7, настроенный с помощью руководства по начальной настройке CentOS 7, объясняет, как это настроить.
Примечание. Для Docker требуется 64-разрядная версия CentOS 7, а также версия ядра не ниже 3.10. 64-разрядная капля CentOS 7 по умолчанию соответствует этим требованиям.
Все команды в этом руководстве должны выполняться от имени пользователя без полномочий root. Если для команды требуется root-доступ, ей будет предшествовать sudo
. Руководство по начальной настройке CentOS 7 объясняет, как добавить пользователей и предоставить им доступ к sudo.
Шаг 1 — Установка Докера
Установочный пакет 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. Позже в этом руководстве мы рассмотрим, как использовать команду docker
.
Шаг 2 — Выполнение команды Docker без Sudo (необязательно)
По умолчанию для запуска команды docker
требуются привилегии root, то есть вы должны добавить к команде префикс sudo
. Его также может запустить пользователь из группы docker, которая автоматически создается при установке Docker. Если вы попытаетесь запустить команду docker
без префикса sudo
или не находясь в группе docker, вы получите такой вывод:
Outputdocker: 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 $(whoami)
Вам нужно будет выйти из Droplet и снова войти в систему как тот же пользователь, чтобы включить это изменение.
Если вам нужно добавить пользователя в группу docker
, под которым вы не вошли в систему, объявите это имя пользователя явно, используя:
- sudo usermod -aG docker username
В оставшейся части этой статьи предполагается, что вы запускаете команду docker
от имени пользователя в группе пользователей docker. Если вы решите этого не делать, добавьте перед командами sudo
.
Шаг 3 — Использование команды Docker
Теперь, когда 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 info
Шаг 4 — Работа с образами Docker
Контейнеры Docker запускаются из образов Docker. По умолчанию он извлекает эти образы из Docker Hub, реестра Docker, которым управляет Docker, компания, стоящая за проектом Docker. Любой может создавать и размещать свои образы Docker в Docker Hub, поэтому большинство приложений и дистрибутивов Linux, которые вам понадобятся для запуска контейнеров Docker, имеют образы, размещенные в Docker Hub.
Чтобы проверить, можете ли вы получить доступ и загрузить образы из Docker Hub, введите:
- docker run hello-world
Вывод, который должен включать следующее, должен указывать на то, что Docker работает правильно:
OutputHello from Docker.
This message shows that your installation appears to be working correctly.
...
Вы можете искать изображения, доступные в Docker Hub, с помощью команды docker
с подкомандой search
. Например, чтобы найти образ CentOS, введите:
- docker search centos
Скрипт просканирует Docker Hub и вернет список всех изображений, имя которых соответствует строке поиска. В этом случае вывод будет примерно таким:
OutputNAME 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]
...
В ОФИЦИАЛЬНОМ столбце OK указывает на образ, созданный и поддерживаемый компанией, стоящей за проектом. После того, как вы определили изображение, которое хотели бы использовать, вы можете загрузить его на свой компьютер с помощью подкоманды pull
, например:
- docker pull centos
После загрузки образа вы можете запустить контейнер, используя загруженный образ с помощью подкоманды run
. Если образ не был загружен при выполнении docker
с подкомандой 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 или другие реестры Docker.
Шаг 5 — Запуск контейнера Docker
Контейнер hello-world
, который вы запустили на предыдущем шаге, является примером контейнера, который запускается и завершается после отправки тестового сообщения. Однако контейнеры могут быть гораздо полезнее, и они могут быть интерактивными. Ведь они похожи на виртуальные машины, только более ресурсоемкие.
В качестве примера запустим контейнер, используя последний образ CentOS. Комбинация ключей -i и -t обеспечивает интерактивный доступ оболочки к контейнеру:
- docker run -it centos
Ваша командная строка должна измениться, чтобы отразить тот факт, что вы сейчас работаете внутри контейнера, и должна принять следующую форму:
Output[root@59839a1b7de2 /]#
Важно: обратите внимание на идентификатор контейнера в командной строке. В приведенном выше примере это 59839a1b7de2
.
Теперь вы можете запустить любую команду внутри контейнера. Например, давайте установим сервер MariaDB в работающий контейнер. Нет необходимости ставить перед любой командой префикс sudo
, потому что вы работаете внутри контейнера с привилегиями root:
- yum install mariadb-server
Шаг 6 — Передача изменений в контейнере в образ Docker
Когда вы запускаете образ Docker, вы можете создавать, изменять и удалять файлы так же, как на виртуальной машине. Вносимые вами изменения будут применяться только к этому контейнеру. Вы можете запускать и останавливать его, но как только вы уничтожите его с помощью команды docker rm
, изменения будут потеряны навсегда.
В этом разделе показано, как сохранить состояние контейнера в виде нового образа Docker.
После установки сервера MariaDB внутри контейнера CentOS теперь у вас есть контейнер, работающий на основе образа, но контейнер отличается от образа, который вы использовали для его создания.
Чтобы сохранить состояние контейнера как новый образ, сначала выйдите из него:
- exit
Затем зафиксируйте изменения в новом экземпляре образа Docker с помощью следующей команды. Переключатель -m предназначен для сообщения фиксации, которое помогает вам и другим узнать, какие изменения вы внесли, а -a используется для указания автора. Идентификатор контейнера — это тот, который вы отметили ранее в руководстве, когда запускали интерактивный сеанс Docker. Если вы не создали дополнительные репозитории в 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 Hub, чтобы его могли оценить и использовать вы и другие лица.
После завершения этой операции в списке образов Docker, которые сейчас находятся на вашем компьютере, должен отображаться новый образ, а также старый, из которого он был получен:
- docker images
Вывод должен быть такого вида:
OutputREPOSITORY 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 у вас на компьютере будет много активных (работающих) и неактивных контейнеров. Для просмотра активных используйте:
- docker ps
Вы увидите вывод, подобный следующему:
OutputCONTAINER 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
container-id
можно найти в выводе команды docker ps
.
Шаг 8 — Отправка образов Docker в репозиторий Docker
Следующий логический шаг после создания нового образа из существующего — поделиться им с несколькими избранными друзьями, со всем миром в Docker Hub или в другом реестре Docker, к которому у вас есть доступ. Чтобы отправить образ в Docker Hub или любой другой реестр Docker, у вас должна быть там учетная запись.
В этом разделе показано, как отправить образ Docker в Docker Hub.
Чтобы создать учетную запись в Docker Hub, зарегистрируйтесь в Docker Hub. После этого, чтобы отправить образ, сначала войдите в Docker Hub. Вам будет предложено пройти аутентификацию:
- docker login -u docker-registry-username
Если вы указали правильный пароль, аутентификация должна пройти успешно. Затем вы можете нажать свое собственное изображение, используя:
- docker push docker-registry-username/docker-image-name
Это займет некоторое время, и по завершении вывод будет такого рода:
OutputThe push refers to a repository [docker.io/finid/centos-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/centos
6a6c96337be1: Mounted from library/centos
...
После отправки изображения в реестр оно должно быть указано на панели управления вашей учетной записи, как показано на изображении ниже.
Если попытка отправки приводит к ошибке такого рода, то вы, вероятно, не вошли в систему:
OutputThe push refers to a repository [docker.io/finid/centos-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
Войдите в систему, затем повторите попытку отправки.
Заключение
Docker — это гораздо больше, чем было дано в этой статье, но этого должно быть достаточно, чтобы вы начали работать с ним в CentOS 7. Как и большинство проектов с открытым исходным кодом, Docker построен на основе быстро развивающейся кодовой базы, поэтому сделайте привычка посещать страницу блога проекта для получения последней информации.
Также ознакомьтесь с другими руководствами по Docker в сообществе DO.