Вступление
Docker - это приложение, которое позволяет легко и просто запускать процессы приложений в контейнере, которые похожи на виртуальные машины, только более переносимы, более дружественны к ресурсам и в большей степени зависят от операционной системы хоста. Чтобы получить подробное представление о различных компонентах контейнера Docker, посмотритеThe Docker Ecosystem: An Introduction to Common Components.
Существует два способа установки Docker на CentOS 7. Один из способов заключается в установке его в существующей установке операционной системы. Другой включает в себя запуск сервера с помощью инструмента под названиемDocker Machine, который автоматически устанавливает на нем Docker.
В этом руководстве вы узнаете, как установить и использовать его в существующей установке CentOS 7.
Предпосылки
-
64-битная CentOS 7 Droplet
-
Пользователь без полномочий root с привилегиями sudo. Сервер CentOS 7, настроенный с использованиемInitial Setup Guide for CentOS 7, объясняет, как это настроить.
[.note] #Note: Docker требует 64-битной версии CentOS 7, а также ядра версии 3.10 или выше. По умолчанию 64-битная капля CentOS 7 соответствует этим требованиям.
#
Все команды в этом руководстве должны выполняться от имени пользователя без полномочий root. Если для команды требуется root-доступ, ему будет предшествоватьsudo
. Initial Setup Guide for CentOS 7 объясняет, как добавлять пользователей и предоставлять им доступ к sudo.
[[step-1 -—- install-docker]] == Шаг 1. Установка 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. Позже в этом руководстве мы рассмотрим, как использовать командуdocker
.
[[step-2 -—- execute-docker-command-without-sudo-optional]] == Шаг 2 - Выполнение команды Docker без Sudo (необязательно)
По умолчанию для выполнения командыdocker
требуются привилегии суперпользователя, то есть вы должны добавить к команде префиксsudo
. Он также может быть запущен пользователем из группыdocker, которая автоматически создается во время установки Docker. Если вы попытаетесь запустить командуdocker
без префиксаsudo
или не входя в группу докеров, вы получите следующий результат:
Outputdocker: 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)
Вам нужно будет выйти из Droplet и снова войти под тем же пользователем, чтобы активировать это изменение.
Если вам нужно добавить в группуdocker
пользователя, под которым вы не вошли в систему, явно объявите это имя пользователя, используя:
sudo usermod -aG docker username
В остальной части статьи предполагается, что вы запускаете командуdocker
как пользователь в группе пользователей docker. Если вы решите не делать этого, добавьте к командамsudo
.
[[step-3 -—- using-the-docker-command]] == Шаг 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
[[step-4 -—- working-with-docker-images]] == Шаг 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]
...
В столбцеOFFICIALOK указывает изображение, созданное и поддерживаемое компанией, стоящей за проектом. После того, как вы определили изображение, которое хотели бы использовать, вы можете загрузить его на свой компьютер с помощью подкоманды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
Как вы увидите далее в этом руководстве, образы, которые вы используете для запуска контейнеров, можно изменять и использовать для создания новых образов, которые затем могут быть загружены (pushed - технический термин) в Docker Hub или другие реестры Docker. .
[[step-5 -—- running-a-docker-container]] == Шаг 5. Запуск контейнера Docker
Контейнерhello-world
, который вы запустили на предыдущем шаге, является примером контейнера, который запускается и завершает работу после отправки тестового сообщения. Контейнеры, однако, могут быть гораздо полезнее, и они могут быть интерактивными. В конце концов, они похожи на виртуальные машины, только более дружественные к ресурсам.
В качестве примера, давайте запустим контейнер, используя последний образ CentOS. Комбинация переключателей-i и-t дает вам интерактивный доступ оболочки к контейнеру:
docker run -it centos
Ваша командная строка должна измениться, чтобы отразить тот факт, что вы сейчас работаете внутри контейнера, и должна принять следующую форму:
Output[root@59839a1b7de2 /]#
Important: Обратите внимание на идентификатор контейнера в командной строке. В приведенном выше примере это59839a1b7de2
.
Теперь вы можете запустить любую команду внутри контейнера. Например, давайте установим сервер MariaDB в работающий контейнер. Не нужно ставить перед какой-либо командой префиксsudo
, потому что вы работаете внутри контейнера с правами root:
yum install mariadb-server
[[step-6 -—- committing-changes-in-a-container-to-a-docker-image]] == Шаг 6. Фиксация изменений в контейнере в образе Docker
Когда вы запускаете образ Docker, вы можете создавать, изменять и удалять файлы так же, как и на виртуальной машине. Внесенные вами изменения будут применяться только к этому контейнеру. Вы можете запускать и останавливать его, но как только вы уничтожите его с помощью командыdocker rm
, изменения будут потеряны навсегда.
В этом разделе показано, как сохранить состояние контейнера в качестве нового образа 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
[.note] #Note: Когда выcommit изображение, новое изображение сохраняется локально, то есть на вашем компьютере. Позже в этом руководстве вы узнаете, как отправить образ в реестр 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. Но это очень сложный процесс, который выходит за рамки этой статьи. Мы рассмотрим это в следующей статье.
[[step-7 -—- листинг-докер-контейнеров]] == Шаг 7. Составление списка контейнеров докера
После некоторого использования 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
.
[[step-8 -—- pushing-docker-images-to-a-docker-repository]] == Шаг 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 основан на быстро развивающейся кодовой базе, поэтому возьмите за привычку посещатьblog page проекта для получения последней информации.
Также проверьтеother Docker tutorials в сообществе DO.