Понять Docker шаг за шагом — Марстел

ПерезвонимВам

Попробовать бесплатно
Нажимая ОТПРАВИТЬ я соглашаюсь с обработкой персональных данных
Заявка в МАРС Телеком - заполните форму данными
Вы также можете связаться с нашими специалистами по телефону 8 800 333-65-40 (звонок бесплатный по всей территории России).
Скачать МАРС Коннектор
МАРС Коннектор

Программа МАРС Коннектор служит для подключения к услуге «Аренда виртуального сервера» и «Аренда 1С».

СКАЧАТЬ
Понять Docker шаг за шагом

Понять Docker шаг за шагом


Это просто простая демонстрация, чтобы получить общее представление о том, как докер работает, шаг за шагом. Я изучил Docker таким образом и хочу поделиться некоторыми проблемами, с которыми я столкнулся в процессе обучения, для того чтобы помочь другим новичкам.

Получить консультацию
Листайте ниже

Это просто простая демонстрация, чтобы получить общее представление о том, как докер работает, шаг за шагом. Я изучил Docker таким образом и хочу поделиться некоторыми проблемами, с которыми я столкнулся в процессе обучения, для того чтобы помочь другим новичкам.

Это просто простая демонстрация, чтобы получить общее представление о том, как докер работает, шаг за шагом. Я изучил Docker таким образом и хочу поделиться некоторыми проблемами, с которыми я столкнулся в процессе обучения, для того чтобы помочь другим новичкам.

Требования

  • Вам нужно установить Docker для вашей ОС.
  • Вам нужно установить Docker Compose для вашей ОС.

Докер

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

Википедия определяет Docker как

Представляет собой набор продуктов платформа как услуга (PaaS), которые используют виртуализацию на уровне ОС для доставки программного обеспечения в пакетах, называемых контейнерами. Контейнеры изолированы друг от друга и включают в себя собственное программное обеспечение, библиотеки и файлы конфигурации; они могут общаться друг с другом через четко определенные каналы. Все контейнеры выполняются одним ядром операционной системы и поэтому используют меньше ресурсов, чем виртуальные машины.

Черт, довольно громкие слова! На непрофессиональном языке Docker помогает вам проще развернуть ваши приложения в «песочнице» (называемые контейнерами) для запуска в операционной системе хоста. Основное преимущество Docker заключается в том, что он позволяет упаковывать программное обеспечение со всеми его зависимостями в единый стандартизированный модуль.

Что такое контейнер?

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

Зачем использовать контейнеры?

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

Начинаем

Настройка вашей машины

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

docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Написание вашего первого Dockerfile

1. Dockerfile - это текстовый документ, который содержит все команды, которые вы можете вызывать в командной строке для создания изображения. Создайте файл hello.js и скопируйте в него этот код. Здесь мы в основном написали простой код JS для отображения Hello World по адресу localhost:8888.

var http = require("http");

http.createServer(function (request, response) {
	response.writeHead(200, {'Content-Type': 'text/plain'});
	response.end('Hello World\n');
}).listen(8888);

// Console will print the message
console.log('Server running at http://127.0.0.1:8888/');

2. Создайте файл с именем Dockerfile и скопируйте в него этот код.

FROM node:8

LABEL maintainer="championshuttler@gmail.com"

RUN npm install

ADD hello.js /hello.js

EXPOSE 8888

ENTRYPOINT [ "node", "hello.js" ]

Даже если это первый Dockerfile, который вы когда-либо видели, я бы сказал, что вы можете догадаться, что здесь происходит.

Dockerfile дает такие инструкции: Начните с образа узла, добавьте его «championshuttler@gmail.com» в качестве сопровождающего, запустите npm install для установки зависимостей, скопируйте файл в код приложения, задокументируйте сетевой порт приложения и установите hello.js в качестве приложения для запуска по умолчанию.

Создание ваших Docker Images

Теперь мы создадим образ докера на нашей локальной машине. Откройте свой терминал в папке текущего проекта и запустите

docker build -t helloworld .

Здесь вы говорите Docker создать образ, который называется helloworld на основе содержимого текущего каталога (обратите внимание на точку (.) В конце команды build). Docker будет искать Dockerfile в каталоге и создавать образ на основе инструкций в файле.

Запуск образа докера

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

docker run -p 8888:8888 helloworld

Команда, которую мы только что запустили, использовала порт 8888 для сервера внутри контейнера и выставила его внешне на порт 8888. Перейдите к URL-адресу с портом 8888:

Поздравляем! Вы успешно создали свой первый образ докера.

Понимание образов Docker и слоев изображений

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

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

docker image history helloworld
IMAGE               CREATED             CREATED BY                                      COMMENT
cb84eb33ca20        58 seconds ago      /bin/sh -c #(nop)  ENTRYPOINT ["node" "hello…
7d652a817a9f        58 seconds ago      /bin/sh -c #(nop)  EXPOSE 8888
334575e947c9        59 seconds ago      /bin/sh -c #(nop) ADD file:b9606ef53b832e66e…

Эти CREATED BY команды инструкции Dockerfile - есть отношения один к одному, так что каждая строка в Dockerfile создает слой изображения.

Отправка ваших собственных изображений в Docker Hub

Сначала вам необходимо войти в систему с помощью учетной записи dockerhub.

docker login --username $dockerId

Теперь, когда вы вошли в систему, вы можете отправлять изображения в свою учетную запись или в любые организации, к которым у вас есть доступ. Если вы не являетесь членом какой-либо организации, вы можете передавать изображения только в репозитории своей учетной записи.

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

docker image tag helloworld $dockerId/helloworld:v1

Теперь у нас есть ссылка на изображение с нашим идентификатором Docker в имени учетной записи, и мы вошли в Docker Hub, поэтому мы готовы поделиться своим изображением! Команда docker image push является аналогом команды pull, она загружает наши локальные слои изображений в реестр:

docker image push championshuttler/helloworld:v1

The push refers to repository [docker.io/championshuttler/helloworld]
9519a21ac374: Pushed

Эффективное использование тегов изображений

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

Многие программные проекты используют цифровую схему управления версиями с десятичными точками, чтобы указать, насколько велика разница между версиями, и вы можете следить за этим с помощью тегов изображений. Основная идея - что-то вроде [major]. [Minor]. [Patch], которая имеет некоторые неявные гарантии. Релиз, который только увеличивает номер патча, может содержать исправления ошибок, но должен иметь те же функции, что и предыдущая версия; выпуск, который увеличивает младшую версию, может добавить функции, но не должен удалять их; основной выпуск может иметь совершенно разные функции.

Развертывание мультиконтейнерных приложений с помощью Docker Compose

Что такое Docker Compose

Большинство приложений не работают в одном компоненте. Даже большие старые приложения обычно создаются как внешние и внутренние компоненты, которые представляют собой отдельные логические уровни, работающие в физически распределенных компонентах. Docker идеально подходит для запуска распределенных приложений - от n-уровневых монолитов до современных микросервисов. Каждый компонент работает в своем собственном облегченном контейнере, и Docker подключает их вместе, используя стандартные сетевые протоколы. Вы определяете и управляете такими мультиконтейнерными приложениями, используя Docker Compose. Docker Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker. С Compose вы используете YAML файл для настройки служб вашего приложения. Затем с помощью одной команды мы создаем и запускаем все службы из вашей конфигурации.

Файл Docker Compose описывает желаемое состояние вашего приложения - как оно должно выглядеть, когда все работает. Это простой формат файла, в котором вы записываете все параметры, которые вы помещаете в команды запуска контейнера Docker, в файл Compose. Затем вы используете инструмент Docker Compose для запуска приложения. Он определяет, какие ресурсы Docker ему необходимы - это могут быть контейнеры, сети или тома - и отправляет запросы в API Docker для их создания. Имя по умолчанию для файла Compose YAML docker-compose.yml. Однако мы можем использовать флаг -f для указания пользовательских имен файлов.

Давайте начнем.

Ниже код показывает очень простой Docker Compose файл, который определяет небольшое приложение Flask с двумя службами (веб-интерфейс и Redis). Приложение представляет собой простой веб-сервер, который подсчитывает количество посещений и сохраняет значение в Redis.

version: "3.5"
services:
	web-frontend:
		build: .
		command: python app.py
		ports:
			- target: 8888
			published: 8888
		networks:
			- counter-net
		volumes:
			- type: volume
			source: counter-vol
			target: /code
	redis:
		image: "redis:alpine"
		networks:
			counter-net:

networks:
	counter-net:

volumes:
	counter-vol:
  • version - ключ необходим, и он должен всегда быть первой строкой файла. Это объясняет версию Compose fileформата (в основном API).
  • services - ключ верхнего уровня - это место, где мы определяем различные сервисы приложений. Пример, который мы используем, определяет два сервиса; веб-интерфейс называется web-frontend и база данных в памяти называется Redis. Compose будет развертывать каждый из этих сервисов как свой собственный контейнер.
  • networks - ключ верхнего уровня сообщает Docker о создании новых сетей. По умолчанию Compose создаст мостовые сети. Это сети с одним хостом, которые могут подключать контейнеры только на одном хосте.

В рамках определения службы веб-интерфейса мы даем Docker следующие инструкции:

  • build: Это говорит Docker о создании нового образа, используя инструкции в Dockerfile в текущем каталоге (.). Вновь созданный образ будет использоваться для создания контейнера для этого сервиса.
  • command: python app.py Это говорит Docker запустить приложение Python с именем app.py в качестве основного приложения в контейнере. Файл app.py должен существовать в образе, и изображение должно содержать Python. Dockerfile выполняет оба эти требования.
  • ports: Говорит Docker для сопоставления порта 8888 внутри контейнера (-target) с портом 8888 на хосте (опубликовано). Это означает, что трафик, отправляемый на хост Docker через порт 8888, будет направлен на порт 8888 контейнера. Приложение внутри контейнера прослушивает порт 8888.
  • networks: Сообщает Docker, к какой сети подключить контейнер службы. Сеть уже должна существовать или быть определена в ключе верхнего уровня сети. Если это оверлейная сеть, ей нужно иметь флаг присоединения, чтобы к ней можно было присоединять автономные контейнеры (Compose развертывает автономные контейнеры вместо Docker Services).
  • volumes: Говорит Docker о монтировании тома counter-vol (source :) в / code ('target:') внутри контейнера. Том противодействия должен уже существовать или быть определен в ключе верхнего уровня томов внизу файла.

Развертывание приложения с помощью Docker Compose

Мы развернем приложение, определенное в файле Compose из предыдущего раздела. Для этого вам понадобятся следующие 4 файла из https://github.com/championshuttler/counter-app:

  • Dockerfile
  • app.py
  • requirements.txt
  • docker-compose.yml

Клонируйте репозиторий Git локально.

git clone https://github.com/championshuttler/counter-app.git

Давайте быстро опишем каждый файл:

  • app.py код приложения (приложение Python Flask)
  • docker-compose.yml это файл Docker Compose, который описывает, как Docker должен развернуть приложение.
  • Dockerfile описывает, как создать образ для сервиса веб-интерфейса.
  • requirements.txt перечисляет пакеты Python, необходимые для приложения.

Давайте использовать Compose, чтобы запустить приложение. Вы должны выполнить все эти следующие команды из counter-app каталога:

docker-compose up &

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

После успешного развертывания приложения вы можете указать веб-браузер на хосте Docker port 8888 и увидеть приложение во всей красе.


https://marstel.ru/prosto

Уже уходите?

Хотите, перезвоним Вам за 30 секунд?

Сейчас на линии несколько свободных специалистов готовых перезвонить Вам для консультации!

Жду звонка
Идёт отправка!

Звонок для Вас бесплатный