Docker - это профессиональный инструмент позволяющий делать виртуализацию на уровне операционной системы Linux. Главной особенностью является то, что при использовании Docker вы не используете многочисленные ресурсы вашего сервера(компьютера), как при использовании классических виртуальных машин.
Docker базируется на ядре Linux, и использует ресурсы по необходимости. Если вспомнить VirtualBox, вам надо точно выделить процессор, память, место и т.д., тем самым отрезать от вашей машины ресурсы строго под виртуалку. Каждая виртуальная машина в VirtualBox это отдельный компьютер. В Docker все проще.
Из чего состоит Docker:
1. Установка Docker Engine
Установка Docker на Debian 10:
* Для установки всегда советуем пользоваться первоисточником, в нашем случае официальный сайт Docker
Сначала настраиваем REPOSITORY, делаем апдейт:
sudo apt-get update
Далее ставим пакеты:
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common
Ставим официальный GPG key:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Проверяем по отпечатку, что у нас есть ключ:
sudo apt-key fingerprint 0EBFCD88
Добавляем репозиторий:
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable"
После настройки репозитория, переходим к установке.
Производим установку Docker:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
проверяем работу:
sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
Последняя команда показывает мини пример работы Docker: сначала идет поиск image с именем "hello-world", дальше он его скачивает автоматический "1b930d010525: Pull complete", после чего запускает Container.
Как проверить список Docker Image:
sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 9 months ago 1.84kB
2. Установка Docker-compose
* Для установки Docker-compose обращаемся к официальному сайту Docker
Docker Compose — это инструментальное средство, входящее в состав Docker. Пакетный менеджер, позволяющий описывать необходимую структуру в одном файле (конфиге). С его помощью очень удобно разворачивать сервисы из нескольких связанных контейнеров.
Для запуска стабильной версии выполняем следующую команду:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
* На момент написания была версия "1.24.1". Актуальную версию вы можете посмотреть на github, и поставить в ссылку именно её.
Применим исполняемые права доступа к двоичному файлу:
sudo chmod +x /usr/local/bin/docker-compose
Проверяем работу Docker-compose:
docker-compose --version docker-compose version 1.24.1, build 1110ad01
3. Основные команды Docker
По командам запуска, более подробнее. Образ Images содержит минимальный Linux, настройки, конфиги и саму программу. При запуске из Images стартует Container, который частично закрыт от нас. Чтобы с ним взаимодействовать, зачастую надо:
4. Пример работы с Docker: на примере tomcat
Рассмотрим полный цикл на примере установки программы tomcat при работе с Docker.
Ищем наш tomcat:
sudo docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati… 2540 [OK] tomee Apache TomEE is an all-Apache Java EE certif… 69 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 53 [OK] [... пропуск вывода]
Из примера выше, мы видим, что сборки Images бывают официальные и сборки от пользователей. По умолчанию обычно используют OFFICIAL [OK]. Намного удобнее искать сборки сразу на Docker Hub.
Выбрали "tomcat" и ставим его:
sudo docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 9a0b0ce99936: Downloading [=========================================> ] 37.24MB/45.38MB db3b6004c61a: Download complete f8f075920295: Download complete 6ef14aff1139: Downloading [===========================================> ] 43.26MB/50.07MB 962785d3b7f9: Download complete 631589572f9b: Download complete c55a0c6f4c7b: Downloading [==> ] 4.291MB/104.2MB [... пропуск вывода] Status: Downloaded newer image for tomcat:latest docker.io/library/tomcat:latest
Проверяем наши images:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest 882487b8be1d 2 days ago 507MB hello-world latest fce289e99eb9 9 months ago 1.84kB
Мы скачали Images с tomcat и запустили с ним Container. Внутри Container сам tomcat будет висеть по умолчанию на порту 8080. Но надо понимать, что это внутри контейнера. А у вас порт 8080 занят какой-то программой, что делать? Нужно запустить контейнер с пробросим портов:
Запускаем скаченный images "tomcat":
sudo docker run -it -p 1122:8080 tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/openjdk-8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar 21-Oct-2019 08:32:17.135 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/8.5.47 21-Oct-2019 08:32:17.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Oct 7 2019 13:30:46 UTC 21-Oct-2019 08:32:17.198 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 8.5.47.0 [... пропуск вывода]
Что мы указали:
Как проверить работу?
Проверяем свой IP:
ip a
В нашем случае это 192.168.0.155. Открываем браузер и вводим следующее: 192.168.0.155:1122
Итог:
Вот так просто мы поставили и запустили tomcat. Минус примера выше, мы запустили интерактивно. При этом, если мы захотим забрать консоль "Ctrl+C", у нас произойдет падение tomcat. Это неудобно, лучше запускать как независимый процесс от нашей консоли:
sudo docker run -d -p 1122:8080 tomcat 628d32200c0c3f14423df1eb6915b58e9bf8d3748cfa38827ba36ca95b847b43
Если нам надо запустить еще один tomcat, мы запускаем еще раз с другим портом:
sudo docker run -d -p 1133:8080 tomcat aabf43fc4529e3c771c13c4f064c0d8766fd6f63aa6d6b5d291ecd4eae83bbeb
Проверить работает ли Container, используем:
sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aabf43fc4529 tomcat "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:1133->8080/tcp youthful_fermat 628d32200c0c tomcat "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:1122->8080/tcp eloquent_darwin
* Пояснение: на примере выше, мы видим, что из одного IMAGE можно запустить несколько контейнеров, которые будут работать независимо друг от друга.
Чтобы удалить контейнер, сначала его остановим, и только потом удалим. Удаление контейнера не приводит к удалению IMAGE:
# уникальный ID из команды выше sudo docker stop aabf43fc4529
Просмотрим контейнера с их состоянием:
sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aabf43fc4529 tomcat "catalina.sh run" 9 minutes ago Exited (143) 50 seconds ago youthful_fermat 628d32200c0c tomcat "catalina.sh run" 10 minutes ago Up 10 minutes 0.0.0.0:1122->8080/tcp eloquent_darwin
* один контейнер остановлен, второй до сих пор работает.
Теперь удалим контейнер:
sudo docker rm aabf43fc4529
В итоге один контейнер удален, один работает. Что еще можно сделать?
Можно зайти в bash контейнера:
sudo docker exec -it 628d32200c0c /bin/bash # или sudo docker exec -it 628d32200c0c sh # Просмотрим содержание root@628d32200c0c:/usr/local/tomcat# ls -la total 168 drwxr-sr-x 1 root staff 4096 Oct 19 02:25 . drwxrwsr-x 1 root staff 4096 Oct 19 02:18 .. -rw-r--r-- 1 root root 19318 Oct 7 13:33 BUILDING.txt -rw-r--r-- 1 root root 5407 Oct 7 13:33 CONTRIBUTING.md -rw-r--r-- 1 root root 57011 Oct 7 13:33 LICENSE -rw-r--r-- 1 root root 1726 Oct 7 13:33 NOTICE -rw-r--r-- 1 root root 3255 Oct 7 13:33 README.md -rw-r--r-- 1 root root 7136 Oct 7 13:33 RELEASE-NOTES -rw-r--r-- 1 root root 16262 Oct 7 13:33 RUNNING.txt drwxr-xr-x 2 root root 4096 Oct 19 02:26 bin drwxr-sr-x 1 root root 4096 Oct 21 09:08 conf drwxr-sr-x 2 root staff 4096 Oct 19 02:25 include drwxr-xr-x 2 root root 4096 Oct 19 02:25 lib drwxrwxrwx 1 root root 4096 Oct 21 09:08 logs drwxr-sr-x 3 root staff 4096 Oct 19 02:25 native-jni-lib drwxrwxrwx 2 root root 4096 Oct 19 02:25 temp drwxr-xr-x 7 root root 4096 Oct 7 13:31 webapps drwxrwxrwx 1 root root 4096 Oct 21 09:08 work # Выйти из контейнера: exit
* Обычно в контейнере нет привычных для вас программ, так как там голый Linux, который достаточно в нашем случае для работы tomcat.
Надеюсь все понятно! В статьях дальше будем создавать docker-compose файлы.
Источник: http://linuxsql.ru