Учебник. Создание приложения Docker и предоставление к нему общего доступа с помощью Visual Studio Code

Этот учебник является первым в серии из трех частей, посвященной использованию Docker с помощью Visual Studio Code (VS Code). Вы узнаете, как создавать и запускать контейнеры, сохранять данные и развертывать контейнерные приложения в Azure.

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

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

Служба Docker Desktop запускается на компьютере и используется для управления локальными контейнерами. Средства разработки, такие как Visual Studio и VS Code, предлагают расширения, позволяющие работать с локальной службой Docker Desktop. Вы можете создавать контейнерные приложения, развертывать приложения в контейнеры и отлаживать приложения, выполняющиеся в контейнерах.

В этом руководстве описано следующее:

  • Создайте контейнер.
  • Сборка образа контейнера.
  • Запуск контейнера приложения.
  • Обновление кода и замена контейнера.
  • Предоставление общего доступа к образу.
  • Запуск образа в новом экземпляре.

Предварительные требования

Это руководство работает с Windows 10 или более поздней версии и Docker Desktop, настроенными для использования контейнеров Linux.

Создание контейнера

Контейнер — это процесс на компьютере. Он изолирован от всех других процессов на главном компьютере. Для такой изоляции используются пространства имен ядра и группы управления.

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

Установив расширение Docker для VS Code, можно приступить к работе с контейнерами в VS Code. Помимо использования контекстных меню в области Docker, можно выбрать Терминал>Новый терминал, чтобы открыть окно командной строки. Кроме того, команды можно выполнять в окне Bash. Если не указано иное, в окне Bash или в терминале VS Code можно выполнять любую команду, помеченную как Bash.

  1. Установите для Docker режим контейнера Linux. Чтобы переключиться на контейнеры Linux, щелкните правой кнопкой мыши значок Docker на панели задач и выберите Переключиться на контейнеры Linux.

  2. В VS Code выберите Терминал>Новый терминал.

  3. Выполните эту команду в окне терминала или в окне Bash.

    docker run -d -p 80:80 docker/getting-started
    

    Эта команда содержит следующие параметры:

    • -d — запуск контейнера в отключенном режиме (в фоновом окне).
    • -p 80:80 — сопоставление порта 80 узла с портом 80 в контейнере.
    • docker/getting-started — указывает образ, который будет использоваться.

    Совет

    Для сокращения полной команды можно использовать однозначные флаги. Например, приведенная выше команда может быть написана следующим образом:

    docker run -dp 80:80 docker/getting-started
    
  4. В VS Code щелкните значок Docker слева, чтобы просмотреть расширение Docker.

    Снимок экрана: расширение DOCKER с запущенным учебником docker/getting-started.

    Расширение Docker для VS Code отображает контейнеры, запущенные на компьютере. Вы можете получить доступ к журналам контейнеров и управлять жизненным циклом контейнеров, например останавливать или удалять их.

    Имя контейнера (в этом примере modest_schockly) создано случайным образом. У вашего контейнера будет другое имя.

  5. Щелкните правой кнопкой мыши docker/getting-started, чтобы открыть контекстное меню. Выберите Открыть в браузере.

    Или откройте браузер и введите http://localhost/tutorial/.

    Вы увидите размещенную локально страницу о DockerLabs.

  6. Щелкните правой кнопкой мыши docker/getting-started, чтобы открыть контекстное меню. Выберите Удалить, чтобы удалить этот контейнер.

    Чтобы удалить контейнер с помощью командной строки, выполните следующую команду для получения идентификатора контейнера:

    docker ps
    

    Затем остановите и удалите контейнер:

    docker stop <container-id>
    docker rm <container-id>
    
  7. Обновите свой браузер. Страница "Начало работы", которую вы видели недавно, больше не отображается.

Создание образа контейнера для приложения

В этом учебнике используется простое приложение Todo.

Снимок экрана: пример приложения с несколькими добавленными элементами и текстовым полем и кнопкой для добавления новых элементов.

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

Чтобы создать приложение, создайте Dockerfile. Dockerfile — это текстовый сценарий инструкций, который используется для создания образа контейнера.

  1. Перейдите в репозиторий Учебник по началу работы с Docker, а затем выберите Код>Скачать ZIP-файл. Извлеките содержимое в локальную папку.

    Снимок экрана: часть сайта GitHub с выделенной зеленой кнопкой

  2. В VS Code выберите Файл>Открыть папку. Перейдите в папку app в извлеченном проекте и откройте ее. Вы увидите файл с именем package.json и две папки с именами src и spec.

    Снимок экрана: Visual Studio Code с открытым файлом package.json с загруженным приложением.

  3. Создайте файл с именем Dockerfile в той же папке, где находится файл package.json со следующим содержимым.

    FROM node:12-alpine
    RUN apk add --no-cache python2 g++ make
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "/app/src/index.js"]
    

    Примечание

    Убедитесь, что файл не имеет расширения файла, например .txt.

  4. В проводнике в левой части в VS Code щелкните правой кнопкой мыши Dockerfile и выберите пункт Собрать образ. В поле ввода текста введите getting-started в качестве тега для образа.

    Тег — это понятное имя для образа.

    Чтобы создать образ контейнера из командной строки, используйте следующую команду.

    docker build -t getting-started .
    

    Примечание

    Чтобы выполнить эту команду, во внешнем окне Bash перейдите в папку app с параметром Dockerfile.

Вы создали образ контейнера с помощью Dockerfile. Возможно, вы заметили, что было скачано много слоев. Dockerfile начинается с образа node:12-alpine. Если его еще нет на компьютере, скачайте его.

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

. в конце команды docker build указывает, что Docker должен искать Dockerfile в текущем каталоге.

Запуск контейнера приложения

Теперь, когда у вас есть образ, можно запустить приложение.

  1. Чтобы запустить контейнер, используйте следующую команду.

    docker run -dp 3000:3000 getting-started
    

    Параметр -d указывает, что вы запускаете контейнер в отключенном режиме в фоне. Значение -p создает сопоставление между портом узла 3000 и портом контейнера 3000. Без сопоставления портов вы не сможете получить доступ к приложению.

  2. Через несколько секунд в VS Code в области Docker в разделе КОНТЕЙНЕРЫ щелкните правой кнопкой мыши getting-started и выберите команду Открыть в браузере. Или перейдите в веб-браузере по адресу http://localhost:3000.

    Вы должны увидеть выполняющееся приложение.

    Снимок экрана: пример приложения без элементов и текст

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

Обновление кода и замена контейнера

На этом этапе у вас есть работающий диспетчер списка задач с несколькими элементами. Теперь сделаем несколько изменений и изучим управление контейнерами.

  1. В файле src/static/js/app.js обновите строку 56 для использования новой текстовой метки:

    - <p className="text-center">No items yet! Add one above!</p>
    + <p className="text-center">You have no todo items yet! Add one above!</p>
    

    Сохраните изменения.

  2. Остановите и удалите текущую версию контейнера. Несколько контейнеров не могут использовать один и тот же порт.

    Щелкните правой кнопкой мыши контейнер getting-started и выберите команду Удалить.

    Снимок экрана: расширение Docker с выбранным контейнером; контекстное меню с выбранной командой

    Или в командной строке выполните следующую команду, чтобы получить идентификатор контейнера.

    docker ps
    

    Затем остановите и удалите контейнер:

    docker stop <container-id>
    docker rm <container-id>
    
  3. Создайте обновленную версию образа. В проводнике щелкните правой кнопкой мыши Dockerfileи выберите команду Собрать образ.

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

    docker build -t getting-started .
    
  4. Запустите новый контейнер с обновленным кодом.

    docker run -dp 3000:3000 getting-started
    
  5. Обновите страницу http://localhost:3000 в браузере, и вы увидите новый текст справки.

    Снимок экрана: пример приложения с измененным текстом, описанным выше.

Предоставление общего доступа к образу

Теперь, когда вы создали образ, к нему можно предоставить общий доступ. Для предоставления общего доступа к образам Docker используется реестр Docker. Реестр по умолчанию — это Docker Hub, откуда берутся все используемые нами образы.

Чтобы отправить образ, необходимо сначала создать репозиторий в Docker Hub.

  1. Перейдите в Docker Hub и войдите в свою учетную запись.

  2. Щелкните Создать репозиторий.

  3. В качестве имени репозитория введите getting-started. Убедитесь, что параметру Видимость задано значение Общедоступная.

  4. Нажмите кнопку создания.

    С правой стороны страницы вы увидите раздел с названием Команды Docker. В нем приводится пример команды для отправки в репозиторий.

    Снимок экрана: страница Docker Hub с предложенной командой Docker.

  5. В представлении Docker в VS Code в разделе ОБРАЗЫ щелкните тег образа правой кнопкой мыши и выберите команду Отправить. Выберите Подключить реестр, а затем — Docker Hub.

    Вам потребуется ввести учетную запись Docker Hub, пароль и пространство имен.

Чтобы выполнить отправку в Docker Hub с помощью командной строки, выполните следующую процедуру.

  1. Войдите в Docker Hub:

    docker login -u <username>
    
  2. Используйте следующую команду, чтобы присвоить образу getting-started новое имя.

    docker tag getting-started <username>/getting-started
    
  3. Используйте следующую команду, чтобы отправить контейнер.

    docker push <username>/getting-started
    

Запуск образа в новом экземпляре

Теперь, когда образ создан и отправлен в реестр, попробуйте запустить приложение в совершенно новом экземпляре, которому незнаком этот образ контейнера. Чтобы запустить приложение, используйте сайт Play with Docker.

  1. Откройте Play with Docker в браузере.

  2. Войдите со своей учетной записью Docker Hub.

  3. Нажмите кнопку Пуск, а затем щелкните ссылку + Добавить новый экземпляр в левой части. Через несколько секунд в браузере откроется окно терминала.

    Снимок экрана: сайт Play with Docker с ссылкой для добавления нового экземпляра.

  4. Запустите приложение в окне терминала.

    docker run -dp 3000:3000 <username>/getting-started
    

    Play with Docker извлекает образ и запускает его.

  5. Щелкните значок 3000 рядом с пунктом ОТКРЫТЬ ПОРТ. Вы должны увидеть приложение с внесенными изменениями.

    Если значок 3000 не отображается, выберите ОТКРЫТЬ ПОРТ и введите "3000".

Очистка ресурсов

Чтобы продолжить работу с этой серией учебников, оставьте все настройки, сделанные на данный момент.

Дальнейшие действия

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

Ниже приведены некоторые ресурсы, которые могут быть полезны:

Далее выполните инструкции из следующего учебника в этой серии: