Docker создает ваш первый проект Node на сервере (полная версия)

Node.js Docker
Docker создает ваш первый проект Node на сервере (полная версия)

Что вы можете узнать из этой статьи

Об авторе: koala, сосредоточив внимание на совместном использовании полного стека технологий Node.js, от JavaScript до Node.js, до серверной базы данных, я желаю вам стать отличным старшим инженером Node.js. [Руководство по развитию программиста] Автор, блог Github с открытым исходным кодомGitHub.com/koala-co Nth…

Что такое докер

Концепции докера

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

  • Docker — ведущая в мире платформа для создания программных контейнеров.
  • Docker использует для разработки и внедрения язык Go, запущенный Google.Основываясь на контрольной группе ядра Linux, пространстве имен, AUFS-подобном UnionFS и других технологиях, он инкапсулирует и изолирует процессы, что представляет собой технологию виртуализации на уровне операционной системы. Поскольку изолированный процесс не зависит от хоста и других изолированных процессов

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

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

Базовая структура Докера

Посмотрите на схему архитектуры Docker

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

  2. Клиент Docker устанавливается на хосте, который взаимодействует с демоном-демоном Docker.Клиент отправляет такие команды, как сборка, извлечение и запуск, демону-демону Docker для выполнения.

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

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

Registry

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

Докер-образ

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

Докер-контейнер

Создайте среду приложения из образа и запустите ее как единый процесс. Государственная служба. является эфемерной и одноразовой средой.

Объем данных докера

Том данных может обеспечить сохранение данных. Том данных — это специальный каталог, который может использоваться одним или несколькими контейнерами. Он обходит UFS и может предоставлять множество полезных функций:

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

Докер-сеть

Сетевое взаимодействие между контейнерами Docker можно использовать端口映射Кстати, другие контейнеры можно реализовать прямо через порт. Кроме этого метода есть еще один.容器连接(linking)系统Взаимодействие контейнеров также может быть достигнуто. (В этой статье узел использует сопоставление портов для подключения к mongodb)

Что касается сетевого модуля Docker, подробности подключения к контейнеру рекомендуют эту статью:Подробное объяснение сетевого режима Docker

Сценарии приложений Docker

Docker развертывает весь процесс проекта Node (практика DockerFile)

  1. использоватьKoa2инициализироватьNodeпроект, черезMongoseпромежуточное ПОMogodbБаза данных, реализует базовый интерфейсMogodbВставьте данные. адрес проекта:GitHub.com/koala-co Nth…

  2. Сначала создайте файл .dockerignore в корневом каталоге проекта, чтобы отфильтровать файлы, которые не нужно упаковывать в образ Docker.

    # /usr/src/nodejs/dockerstudy/.dockerignore
    .git
    node_modules
    
  3. Создается в корневом каталоге проектаDockerfileФайл (здесь основное внимание уделяется Dockerfile)

    развертыватьNode项目, там будетDockerfileконфигурация файла

    # /usr/src/nodejs/hello-docker/Dockerfile
    FROM node:10.0
    
    # 在容器中创建一个目录
    RUN mkdir -p /usr/src/nodejs/
    
    # 定位到容器的工作目录
    WORKDIR /usr/src/nodejs/
    
    # RUN/COPY 是分层的,package.json 提前,只要没修改,就不会重新安装包
    COPY package.json /usr/src/app/package.json
    RUN cd /usr/src/app/
    RUN npm i
    
    # 把当前目录下的所有文件拷贝到 Image 的 /usr/src/nodejs/ 目录下
    COPY . /usr/src/nodejs/
    
    
    EXPOSE 3000
    CMD npm start
    

    Описание параметра конфигурации (обучение DockerFile):

    • FROM: FROM — это базовый исходный образ для создания образа, а файл образа наследует официальный образ узла.

      Подробное описание: FROM — необходимая инструкция в Dockerfile, и она должна быть первой! Он вводит образ в качестве базового уровня, на котором мы хотим построить образ, как будто мы должны сначала установить операционную систему, прежде чем мы сможем установить программное обеспечение в операционной системе.

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

      Детали: каждыйRUNИнструкции создадут новый слой для выполнения этих команд, которые мы часто используемRUNКоманда создает большое количество слоев изображения, однакоUnion FSСуществует максимальное количество слоев, которое не может быть превышено127Слои, и мы должны очистить файлы в каждом слое, например, некоторые бесполезные зависимости, чтобы предотвратить раздувание изображений.

    • WORKDIR: рабочий каталог контейнера.

    • COPY: Скопируйте файлы в рабочий каталог контейнера, файлы, указанные в .dockerignore, не будут скопированы.

    • EXPOSE: Экспорт порта внутри контейнера для внешнего доступа

    • CMD: Dockerfile выполняет и записывает CMD, в противном случае последний будет перезаписан.Команда после CMD — это команда, выполняемая при каждом запуске контейнера.Несколько команд могут быть связаны с помощью &&, например, CMD git pull && npm start

      Подробное описание:CMDКоманда используется для указания команды запуска основного процесса контейнера по умолчанию и параметров при запуске контейнера. бывает двух видов

      CMD echo 1
      CMD ["npm", "run", "test"] 必须是双引号
      

      Первая выполненная команда будет обернута программой,CMD [ "sh", "-c", "echo 1" ] JSONФорма массива, как правило, рекомендуетсяJSONформа массива. Приложения в контейнере должны выполняться на переднем плане, а не запускать фоновую службу.В контейнере нет концепции фоновой службы. Для контейнера его стартовой программой является процесс-приложение контейнера, а контейнер существует для основного процесса.Когда основной процесс завершается, контейнер теряет свое значение. НапримерCMD service nginx startэто эквивалентноCMD [ "sh", "-c", "service nginx start"]Основной процесс на самом делеsh,shвсе кончено,shВышел как основной процесс.

    • ENV (дополнение)

      ENVДирективы используются для установки переменных среды, которые бывают двух видов:

      ENV <key> <value>
      ENV <key1>=<value1> <key2>=<value2>...
      

      Если определена переменная среды, ее можно использовать в последующих инструкциях.

  4. Ссылка на код на данный момент заканчивается, отправьте Dockerfile на github или gitlab и т. д.

    на мой серверcentos7Например, установленDocker.

  5. Сначала проверьте код и клонируйте проект в указанный каталог.

    git clone https://github.com/koala-coding/dockerstudy  
    
  6. войти в сборку каталога

    cd dockerstudy  
    docker build -t dockerstudy .  
    

    buildКоманда используется для создания зеркала,-tэто пометить изображение,-fуказан параметрDockerfileпуть, поскольку мы используем путь по умолчаниюDockerfileимя, поэтому вы можете заполнить этот параметр по-разному. последний.также не опустить, указав, чтоDockerfileКаталог, в котором находится файл, представляющий текущий путь, указывающий контекст, в котором создается изображение. Мы только что сказали, что настоящее зеркальное отображениеdocker server, когда мы выполняемbuildКогда приказали,docker clientВсе содержимое в контекстном пути будет упаковано, а затем загружено вdocker server. Поэтому, когда мы хотим выполнить в Dockerfile, напримерCOPYкомандой, вы можете скопировать файлы в контексте на зеркало.

    Имя целевого объекта сборки dockerstudy — это образ, и все образы могут быть перечислены через образы докеров.

    в целом должно бытьDockerfileПомещается в пустой каталог или в корневой каталог проекта. Если в этом каталоге нет нужного файла, необходимо сделать копию нужного файла. Если в каталоге есть что-то, что вы действительно не хотите передавать в сборкуDockerдвигатель, то вы можете использовать .gitignoreтот же синтаксис для записи.dockerignore.

  7. путем зеркального отображенияdockerstudyСоздайте контейнер и запустите его.

    docker run --name dockerstudycontainer -d -p 3000:3000 dockerstudy  
    

    Описание: имя созданного контейнераdockerstudycontainer, вы можете понять это какpid, это имя уникально, оно будет существовать всегда, если его не удалить после создания.-p 用来指定端口映射,将容器的端口3000映射到主机3000`, чтобы к нему можно было получить доступ извне.

    На данный момент его можно использовать в хостеcurlПроверьте, является ли услуга, предоставляемая сервером, нормальной.

    curl localhost:3000
    

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

    После создания контейнера иногда вам нужно посмотреть на использование ресурсов контейнера, использоватьdocker stats

    docker stats dockerstudycontainer
    

    Если вы приобрели сервер Alibaba Cloud или Tencent Cloud, обратите внимание на сервер centos, который вы приобрели здесь.3000порт открыт в группе безопасности

  8. в контейнер

    docker ls -a 查看所有容器,包括当前容器的id
    docker exec -it <id> bash
    

  9. проверка журнала Проверьте журнал выполнения, «50425b8f2ef3» — это идентификатор контейнера.

    $ docker logs -f 50425b8f2ef3
    

    Но у меня все еще есть проблема: когда я действительно хочу увидеть файл журнала, я не могу зайти в каждый контейнер, чтобы увидеть журнал, что является пустой тратой времени! Есть ли более высокий путь? Я буду в следующей статье»Как элегантно печатать, сохранять и анализировать журналы в онлайн-среде"Написать в.

Docker развертывает среду Mongodb

  1. Получить зеркало MongoDB удаленно
docker pull mongo
  1. Создайте докер-контейнер

    docker run -p 27017:27017 -v /data/db --name docker_mongodb -d mongo
    

    В приведенной выше команде некоторые параметры команды подробно объясняются следующим образом:

    • -p указывает контейнерСопоставление портов(Особое примечание: спереди — локальный порт, сзади — контейнерный порт, добавьте-pПараметр активно предоставляет внутренний порт контейнера, а также внутренний порт сервера.27017Сопоставление порта с контейнером27017порт, так что внешняя сеть может пройти сервер27017Порт для доступа к нашему сервису, порт Mongodb по умолчанию:27017. Окончательный доступ все же порт машины)
    • -v — установить каталог монтирования контейнера, здесь — смонтировать каталог на локальном компьютере в /data/db в контейнере в качестве каталога хранения Mongodb
    • --name установить имя контейнера
    • -d запускает контейнер как демон
  2. Тестовое подключение к MongoDB в контейнере

Визуальное подключение инструмента

Выше приведена информация после создания контейнера MongoDB. Затем мы пытаемся открыть базу данных с помощью программного обеспечения Robo 3T GUI. Откройте RoBo 3T, выберите «Новое подключение», заполните соответствующую информацию базы данных в соответствии с рисунком ниже и сохраните.

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

Элегантное развертывание Docker Compose

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

Благодаря поддержке Compose нам нужно только определить файл конфигурации в формате YAML (docker-compose.yml), чтобы написать несколько конфигураций контейнера и отношений вызова, необходимых для проекта, которые можно запускать или закрывать одновременно с помощью простого командный контейнер. Compose targeting — это приложение, которое определяет и запускает несколько контейнеров Docker. В этой статье конкретно не говорится об использовании DockerCompose, а в основном объясняется применение различных частей базовой архитектуры Docker и больше практики!

Что дает Docker (плюсы)

  • Изоляция от окружающей среды ('изоляция, безопасность')

    Docker реализует изоляцию ресурсов, и одна машина запускает несколько контейнеров, не влияя друг на друга.

  • более эффективное использование ресурсов (сэкономить расходы)

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

  • Более быстрое развертывание доставки (гибкий)

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

  • Проще перенести расширения (портативность)

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

  • Более простое управление обновлениями (эффективный)

    При использовании Dockerfile требуется всего несколько изменений конфигурации, которые могут заменить большую работу по обновлению в прошлом. И все модификации распространяются и обновляются постепенно, что обеспечивает автоматизированное и эффективное управление контейнерами.

Общие команды Docker

Зеркальные общие команды

docker pull [镜像名称:版本] 拉取镜像
docker images  镜像列表
docker rmi [镜像名称:版本] 删除镜像
docker history [镜像名称] 镜像操作记录
docker tag [镜像名称:版本][新镜像名称:新版本]
docker inspect [镜像名称:版本] 查看镜像详细
docker search [关键字] 搜索镜像
docker login 镜像登陆

Общие команды для контейнеров

docker ps -a 容器列表(所有容器)
docker ps  查看所有(运行的)容器
docker exec -ti <id> bash  以 bash 命令进入容器内
docker run -ti --name [容器名称][镜像名称:版本] bash 启动容器并进入
docker logs 查看容器日志
docker top <container_id> 查看容器最近的一个进程
docker run -ti --name [容器名称] -p 8080:80 [镜像名称:版本] bash  端口映射
docker rm <container_id> 删除容器
docker stop <container_id> 停止容器
docker start <container_id> 开启容器
docker restart <container_id> 重启容器
docker inspect <container_id> 查看容器详情
docker commit [容器名称] my_image:v1.0  容器提交为新的镜像	

Общие команды DockerFile

Это было подробно объяснено в реальном бою выше, вы можете вернуться и прочитать его, и я не буду повторяться здесь.

Суммировать

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

Справочная статья

Базовая конфигурация узла Docker

сетевой модуль докера

основные принципы докера

Подписывайтесь на меня

  • Добро пожаловать, чтобы добавить меня в WeChat [coder_qi], пригласить вас в техническую группу, долгосрочный обмен и изучение...
  • Добро пожаловать, чтобы обратить внимание на «Руководство по развитию программиста на севере», общедоступную учетную запись, которая поможет вам расти с душой...

Оригинальные статьи серии Node

Глубокое понимание процессов и потоков в Node.js

Если вы хотите изучить Node.js, сначала необходимо понять поток.

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

В статье об интерпретации исходного кода подробно рассматривается модуль Events.

Node.js расширенное расширенное изучение файлового модуля fs