Рубрики
Без рубрики

Docker 101: Основы и практика

Автор оригинала: FreeCodeCapm Team.

Гильерме Педжон

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

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

Докер

Вот определение докера, по словам Википедия :

Довольно просто, верно? Ну, не совсем. Хорошо, вот мое определение того, что Docker:

Все еще потерян? Не заботятся, это потому, что вы, вероятно, не знаете, что Контейнеры или Изображения находятся.

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

Часть 1. «Привет, мир!» от изображения Python

Допустим, у вас нет Python, установленного на вашей машине – или, по крайней мере, не последняя версия – и вам нужен Python, чтобы распечатать «Привет, мир!» в вашем терминале. Что вы делаете? Вы используете Docker!

Продолжайте и запустите следующую команду:

docker run --rm -it python:3 python

Не волнуйтесь, я объясню эту команду за секунду, но сейчас вы, вероятно, видим что-то вроде этого:

Это означает, что мы в настоящее время внутри Контейнер докеров создан из Python 3 Docker Image, работает Python команда. Чтобы закончить пример, введите Печать («Привет, мир!») И посмотри как волшебство.

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

Сломаться

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

--rm Флаг – это сообщить о демон Docker, чтобы очистить контейнер и удалить файловую систему после выхода контейнера. Это поможет сохранить дисковое пространство после запуска короткоживущих контейнеров, подобных этой, что мы только начали печатать «Привет, мир!».

-t (или --tty) Флаг сообщает Docker, чтобы выделить виртуальный сеанс терминала в контейнере. Это обычно используется с -i (или --interactive) Опция, которая сохраняет stdin открыть даже если он работает в отдельно стоящем режиме (больше об этом позже).

Наконец, Python: 3 это базовое изображение, которое мы использовали для этого контейнера. Прямо сейчас, это изображение поставляется с Python версии 3.7.3, среди прочего. Теперь вам может быть интересно, откуда этот образ появился, и что внутри него внутри. Вы можете найти ответы на оба этих вопроса правильно здесь Наряду со всеми другими изображениями Python мы могли бы использовать для этого примера.

Последнее, но не менее важное, Python Была ли команда, которую мы сказали Docker выполнить внутри наших Python: 3 Image, который начал раковину Python и позволил нашему Печать («Привет, мир!») Призыв к работе.

Еще кое-что

Чтобы выйти из Python и завершить наш контейнер, вы можете использовать Ctrl/CMD + D или Выход () Отказ Продолжай и сделай это прямо сейчас. После этого попробуйте выполнить наши Docker Run Команда снова, и вы увидите что-то немного другое, и намного быстрее.

Это потому, что мы уже скачали Python: 3 Изображение, поэтому наш контейнер сейчас начинается быстрее.

Часть 2. Автоматизировано “Hello World!” от изображения Python

Что лучше, чем писать “Привет, мир!” В вашем терминале один раз? Вы получили это, пишете это дважды!

Так как мы не можем дождаться, чтобы увидеть «Привет, мир!» Напечатаны в нашем терминале снова, и мы не хотим проходить через шуму на открытие Python и набрав Печать Опять же, давайте пойдем вперед и автоматизируем этот процесс немного. Начните с создания Hello.py файл где угодно вы хотели бы.

# hello.py
print("Hello, World!")

Далее идите вперед и запустите следующую команду из этой же папки.

docker run --rm -it -v $(pwd):/src python:3 python /src/hello.py

Это результат, который мы ищем:

Как мы сделали ранее, давайте сделаем шаг назад и понять, как это работает.

Сломаться

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

-v $ (pwd):/src Опция говорит о демон Docker, чтобы начать Объем I n Наш контейнер Отказ Объемы – лучший способ сохранить данные в Docker. В этом примере мы говорим Docker, что мы хотим текущий каталог – извлеченный из $ (PWD) – быть добавленным в наш контейнер в папке /SRC Отказ

Если вы хотите проверить это /src/hello.py На самом деле существует внутри нашего контейнера, вы можете изменить конец нашей команды из Python Hello.py к Bash Отказ Это откроет интерактивную оболочку внутри нашего контейнера, и вы можете использовать его так же, как вы ожидаете.

Последний бит нашей команды – Python/src/hello.py Инструкция. Бегите его, мы говорим нашему контейнеру заглянуть внутрь его /SRC папка и выполнить Hello.py Файл с использованием . Python Отказ

Может быть, вы уже можете увидеть чудеса, которые вы можете сделать с этой державой, но я все равно выделите это для вас. Используя то, что мы только что узнали, мы можем в значительной степени бежать любой код от любой язык внутри любой компьютер без необходимости установки Любые зависимости На хост-машине – кроме докера, конечно. Это много смелый текст Для одного предложения убедитесь, что вы прочитаете это дважды!

Часть 3. Простые “Здравствуйте, мир!” возможно от изображения Python с помощью DockerFile

Вы устали говорить привет до нашей красивой планеты? Это позор, потому что мы собираемся сделать это снова!

Последняя команда, которую мы узнали, было немного многословным, и я уже вижу, устая печатать все этот код каждый раз, когда я хочу сказать “Привет, мир!” Давайте автоматизируем вещи немного дальше сейчас. Создать файл с именем Dockerfile и добавьте следующий контент к нему:

# Dockerfile
FROM python:3
WORKDIR /src/app
COPY . .
CMD [ "python", "./hello.py" ]

Теперь запустите эту команду в той же папке, которую вы создали Dockerfile :

docker build -t hello .

Все, что осталось сделать сейчас, – это сходить с ума, используя этот код:

docker run hello

Вы уже знаете, как это так. Давайте найдя момент, чтобы понять, как работает Dockerfile сейчас.

Сломаться

Начиная с нашего DockerFile, первая линия От Python: 3 говорит докер, чтобы начать все с базового изображения, с которыми мы уже знакомы, Python: 3 Отказ

Вторая строка, Workdir/src/приложение Устанавливает рабочий каталог внутри нашего контейнера. Это для некоторых инструкций, которые мы будем выполнять позже, например CMD или Скопировать Отказ Вы можете увидеть остальные поддерживаемые инструкции для Workdir правильно здесь Отказ

Третья линия, Копировать. Отказ в основном говорит докер скопировать все из нашей текущей папки (первым . ), и вставьте его на /src/app (Второй . ). Расположение вставки было установлено с Workdir команда прямо над ним.

Наконец, последняя линия CMD ["Python", "./hello.py"] предоставляет команду по умолчанию для нашего контейнера. По сути, это говорит, что каждый раз, когда мы Беги Контейнер из этой конфигурации, он должен работать Python ./hello.py Отказ Имейте в виду, что мы неявно работаем /src/app/hello.py вместо только Hello.py , так как это то, где мы указали наш Workdir к.

С нашим докерфилом закончится, мы идем вперед и начнем наш построить процесс. Docker Build -t Hello. Команда читает всю конфигурацию, которую мы добавили в наш DockerFile и создают Docker Image от него. Это верно, как и Python: 3 image Мы использовали для всей всей статьи. Отказ В конце концов рассказывает докер, который мы хотим запустить DockerFile в нашем текущем месте, а Привет Опция дает этому образ имени Привет Итак, мы можем легко ссылаться на его во время выполнения.

Ведь все, что нам нужно сделать, это запускать обычные Docker Run Инструкция, но на этот раз с Привет Имя изображения в конце строки. Это начнет контейнер из изображения, которое мы недавно построили и, наконец, распечатали хорошее ол «Привет, мир!» в нашем терминале.

Расширение нашего базового изображения

Что мы делаем, если нам нужна зависимость для запуска нашего кода, который не приходит предварительно установленным с нашим базовым изображением? Чтобы решить эту проблему, у Docker есть Беги Инструкция Отказ

После нашего примера Python, если нам нужно numpy Библиотека для запуска нашего кода, мы могли бы добавить Беги Инструкция сразу после нашего От команда.

# Dockerfile
FROM python:3
# NEW LINERUN pip3 install numpy
WORKDIR /src/app
COPY . .
CMD [ "python", "./hello.py" ]

Беги Инструкция в основном дает команду выполнять терминалом контейнера. Таким образом, поскольку наше базовое изображение уже приходит с PIP3 Установлено, мы можем использовать PIP3 Установить Numpy Отказ

Часть 4. “Привет, мир!” из изображения Nginx, используя долгоживущий отдельный контейнер

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

Создать index.html Файл в новой папке со следующим контентом.

# index.html

Hello, World!

Теперь давайте создадим новый DockerFile в той же папке.

# Dockerfile
FROM nginx:alpine
WORKDIR /usr/share/nginx/html
COPY . .

Создайте изображение и дайте ему имя Simple_nginx , как мы ранее делали.

docker build -t simple_nginx .

Наконец, давайте запустим наше недавно созданное изображение со следующей командой:

docker run --rm -d -p 8080:80 simple_nginx

Возможно, вы думаете, что ничего не произошло, потому что вы вернулись к вашему терминалу, но давайте посмотрим на Docker PS команда.

Docker PS Команда показывает все беговые контейнеры в вашем компьютере. Как вы можете видеть на изображении выше, у меня есть контейнер с именем Simple_nginx Бег в моей машине прямо сейчас. Давайте откроем веб-браузер и посмотрите, если nginx выполняет свою работу путем доступа к localhost: 8080 Отказ

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

Сломаться

Я собираюсь пропустить объяснение DockerFile, потому что мы уже выучили эти команды в последнем разделе. Единственная «новая» вещь в этой конфигурации является Nginx: Alpine Изображение, которое вы можете прочитать больше об этом здесь Отказ

Помимо того, что новое, эта конфигурация работает, потому что nginx использует USR/Share/Nginx/HTML Папка для поиска index.html Файл и начните служить его, так как мы назвали наш файл index.html и настроил Workdir быть USR/Share/Nginx/HTML Эта настройка будет работать прямо из коробки.

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

Теперь для веселой части, Docker Run --RM -D -P 8080: 80 Simple_nginx Инструкция. Здесь у нас есть два новых флага. Первый – это отдельно ( -D ) флаг, что означает, что мы хотим запустить этот контейнер на заднем плане, и именно поэтому мы вернуемся на наш терминал сразу после использования Docker Run Команда, даже если наш контейнер все еще работает.

Второй новый флаг – это -P 8080: 80 вариант. Как вы, возможно, догадались, это порт Флаг, и это в основном отображает порт 8080 с нашей местной машины к порту 80 внутри нашего контейнера. Вы могли бы использовать любой другой порт вместо 8080 , но вы не можете изменить порт 80 Не добавляя дополнительную настройку в nginx Изображение, так как 80 Стандартный порт nginx Изображение экспозирует.

Часть 5. Конец

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

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

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

Ваше здоровье!