Статьи

Попасть в докер

Вы когда-нибудь слышали о Докере раньше? Скорее всего. Если нет, не волнуйтесь, я постараюсь обобщить это для вас. Докер , наверное, одна из самых горячих технологий на данный момент. Он может революционизировать способ создания, развертывания и распространения приложений. В то же время, это уже оказывает огромное влияние на процесс разработки. работает-на-мой-машина-240x300

В некоторых случаях среды разработки могут быть настолько сложными, что трудно поддерживать согласованность между различными членами команды. Я почти уверен, что большинство из нас уже страдали от синдрома «Работает на моей машине», верно? Одним из способов решения этой проблемы является создание виртуальных машин (ВМ) со всем, что настроено, чтобы вы могли распространять их через свою команду. Но виртуальные машины медленные, большие, и вы не можете получить к ним доступ, если они не работают.

Что такое Докер?

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

Давайте углубимся в детали:

Docker Image

Docker Image — это шаблон только для чтения, используемый для создания контейнеров Docker . Каждое изображение состоит из серии слоев, составляющих ваше окончательное изображение. Если вам нужно распространять что-то, используя Ubuntu и Apache, вы начинаете с базового образа Ubuntu и добавляете Apache сверху. Если позже вы захотите перейти на экземпляр Tomcat, просто добавьте еще один слой к своему изображению. Вместо того, чтобы распространять весь образ, как с виртуальной машиной, вы просто выпускаете обновление.

Docker Registry

Реестр Docker, также называемый Docker Hub, является хранилищем Docker Image . Это та же концепция репозиториев Maven для библиотек Java. Загрузите или загрузите изображения, и все готово. Docker Hub уже содержит огромное количество готовых к использованию образов, от простых дистрибутивов Unix до полноценных серверов приложений.

Докер Контейнер

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

Как начать?

Конечно, вам нужно установить Docker . Пожалуйста, обратитесь к руководству по установке Docker . Они довольно хороши, и у меня не было проблем с установкой программного обеспечения. Убедитесь, что вы следуете надлежащему руководству по вашей системе.

Наш первый докер-контейнер

После установки Docker вы можете сразу ввести в командной строке:

1
docker run -it -p 8080:8080 tomcat

Вы должны увидеть следующее сообщение:

Невозможно найти изображение ‘tomcat: latest’ локально

И много загрузок начинается. Как и Maven, когда вы создаете приложение, оно загружает необходимые библиотеки для запуска Tomcat, обращаясь к Docker Hub . Загрузка занимает некоторое время. (Отлично, еще одна вещь для загрузки Интернета. К счастью, мы можем использовать ZipRebel , чтобы быстро его скачать).

После того, как все загружено, вы должны увидеть, что экземпляр Tomcat загружается, и вы можете получить к нему доступ, перейдя по http://localhost:8080 в коробках Linux. Для пользователей Windows и Mac это немного сложнее. Поскольку Docker работает только в среде Linux, чтобы иметь возможность использовать его в Windows и Mac, вам нужен boot2docker (который вы должны иметь из руководства по установке). На самом деле это виртуальная машина, которая запускает Docker в Linux полностью из памяти. Чтобы получить доступ к контейнерам Docker, вам нужно обратиться к этому виртуальному IP-адресу. Вы можете получить IP с помощью команды:

1
boot2docker IP

,
Объясняя команду:

docker run Команда для создания и запуска нового контейнера Docker.
-it Для запуска в интерактивном режиме, чтобы вы могли видеть после запуска контейнера.
-p 8080:8080 Это для сопоставления внутреннего порта контейнера с внешним хостом, обычно с вашей машиной. Информация о назначении портов может быть установлена ​​только при создании контейнера. Если вы не указали это, вам нужно проверить, какой порт назначен Docker
tomcat Имя образа для запуска. Это связано с хранилищем Docker Tomcat . В нем содержатся инструкции, поэтому Docker знает, как запустить сервер.

Помните, что если вы остановите и снова запустите ту же команду, вы создадите и запустите новый контейнер.

Несколько контейнеров

Вы можете запустить несколько экземпляров Tomcat, выполнив следующие команды:

1
docker run -d -p 8080:8080 --name tomcat tomcat
1
docker run -d -p 9090:8080 --name web tomcat

Они создают два контейнера Tomcat с именами tomcat и web . Просто не забудьте изменить отображение порта и имя. Добавление имени полезно для управления контейнером. Если нет, Docker сгенерирует случайным образом для вас.

-d указывает Docker запускать контейнер в фоновом режиме. Теперь вы можете управлять своим контейнером с помощью следующих команд:

docker ps Смотрите список всех запущенных контейнеров Docker. Добавьте -a чтобы увидеть все контейнеры.
docker stop web Останавливает контейнер с именем web .
docker start web Запускает контейнер с именем web .
docker rm web Удалите контейнер с именем web .
docker logs web Показывает контейнер с именем веб- журналы.

Подключение к контейнеру

Если вы выполните команду docker exec -it tomcat bash , вы сможете подключиться к оболочке контейнера и исследовать среду. Например, вы можете проверить запущенные процессы с помощью ps -ax .

Tomcat веб-Баш

1
2
3
4
5
6
7
radcortez:~ radcortez$ docker exec -it web bash
root@75cd742dc39e:/usr/local/tomcat# ps -ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl+   0:05 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=
   47 ?        S      0:00 bash
   51 ?        R+     0:00 ps -ax
root@75cd742dc39e:/usr/local/tomcat#

Взаимодействие с контейнером

Давайте добавим файл в контейнер:

1
echo "radcortez" > radcortez

Выйдите из контейнера, но продолжайте работать. Выполнить docker diff web . Вы увидите несколько файлов, связанных с временными файлами tomcat, и файл, который мы только что добавили. Эта команда оценивает различия файловой системы между работающим контейнером и исходным образом.

Вывод

Мы только поцарапали поверхность возможностей Docker . Еще рано говорить, станет ли Docker обязательным инструментом. В настоящее время он получает широкое распространение от крупных игроков, таких как Google, Microsoft или Amazon. Docker может в конечном итоге потерпеть неудачу, но он наверняка открыл старую дискуссию, на которую пока нет четкого ответа.

Ссылка: Войдите в Docker от нашего партнера по JCG Роберто Кортеса в блоге