Docker и Dockerfile

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

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

Как докеризировать приложение?

Для докеризации приложений сначала создается чертеж или снимок того, что должно быть в контейнере. Этот чертеж называется docker image. Образ указывается в Dockerfile, а затем мы запускаем этот образ, чтобы создать контейнер с этим конкретным снимком.

Создание Dockerfile

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

В качестве примера возьмем простой express API, работающий на node.

1_ Указание родительского образа в Dockerfile

FROM node:17-alpine
Вход в полноэкранный режим Выход из полноэкранного режима

Это первый уровень Dockerfile. Он извлекает этот образ из node и устанавливает его в контейнер. Тег после двоеточия называется тегом, он указывает версию node, которую нужно извлечь.

2_ Указание директории, в которой мы хотим работать в контейнере.

FROM node:17-alpine
WORKDIR /app
Вход в полноэкранный режим Выход из полноэкранного режима

3_ Копирование package.json и установка всех зависимостей в контейнер.

FROM node:17-alpine
WORKDIR /app
COPY package.json .  
RUN npm install     
Вход в полноэкранный режим Выход из полноэкранного режима

4_ Копирование всего исходного кода и вставка его в контейнер.

FROM node:17-alpine
WORKDIR /app
COPY package.json .  
RUN npm install   
COPY . . 
Вход в полноэкранный режим Выход из полноэкранного режима

Первая точка рядом с копией означает получение всей директории. Вторая точка — это место вставки каталога в контейнер. Причина, по которой это точка, а не /app, заключается в том, что после указания WORKDIR /app, все пути в контейнере будут относительными к /app.

5_ Наконец, запустите приложение.

FROM node:17-alpine
WORKDIR /app
COPY package.json .  
RUN npm install   
COPY . . 
CMD ['node' , 'start']

Вход в полноэкранный режим Выход из полноэкранного режима

Сборка изображения:

Docker build -t [IMAGE_NAME] -p [HOST_PORT]:[EXPOSED_PORT] .

Запуск образа внутри контейнера:

Docker run —name [CONTAINER_NAME] [IMAGE_NAME]

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

  • Создайте docker-compose.yaml рядом с каталогом проекта.
version: '3.8'
services: 
  api: 
    build: ./api
    container_name: api_container
    ports: 
      - '3000:3000'
    volumes: 
      - ./api:/app
      - ./app/node_modules

Вход в полноэкранный режим Выход из полноэкранного режима

Запустите команду docker-compose up.

Что такое тома?

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

Некоторые полезные команды docker

- Docker ps
    - List all running containers.
- Docker ps -a
    - List all containers
- Docker images
    - List all images

- Docker build -t [IMAGE_NAME] -p [HOST_PORT]:[EXPOSED_PORT] .
    - Build the image

- Docker run name [CONTAINER_NAME] [IMAGE_NAME]
        - Run the image inside a container. 
Войти в полноэкранный режим Выйти из полноэкранного режима

Ресурсы:

Docker docs

Оцените статью
Procodings.ru
Добавить комментарий