Что вы можете узнать из этой статьи
Об авторе: 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
-
Большая коробка слева - наш хост для операций Docker, который запускает демон сердечниками демона Docker, который отвечает за строительство, бегущую и распространение контейнеров докеров.
-
Клиент Docker устанавливается на хосте, который взаимодействует с демоном-демоном Docker.Клиент отправляет такие команды, как сборка, извлечение и запуск, демону-демону Docker для выполнения.
-
Правый кадр — это реестр Docker, в котором хранятся образы Docker, служба, с которой все пользователи Docker совместно используют образы Docker, и демон Docker, с которым взаимодействует демон Docker.
Ниже приводится более подробное описание основных компонентов архитектуры. Концепция - это вещь, просто прочитайте ее, вы не можете ее запомнить, только вещи, которые вы часто используете, будут помнить и думать о том, чтобы запомнить ее.После прочтения этой статьи вы можете применить следующие приложенияупражнятьсяопять таки.
Registry
Зеркальный репозиторий, который хранит большое количество изображений и может извлекать и отправлять изображения из зеркального репозитория.
Докер-образ
Аналогично моментальным снимкам виртуальной машины, извлечению из репозитория или созданию нового образа поверх существующего образа инструмента. Контейнеры можно запускать из образов.
Докер-контейнер
Создайте среду приложения из образа и запустите ее как единый процесс. Государственная служба. является эфемерной и одноразовой средой.
Объем данных докера
Том данных может обеспечить сохранение данных. Том данных — это специальный каталог, который может использоваться одним или несколькими контейнерами. Он обходит UFS и может предоставлять множество полезных функций:
- Объемы данных можно совместно использовать и повторно использовать между контейнерами.
- Изменения объема данных вступают в силу немедленно.
- Обновления томов данных не влияют на зеркальное отображение
- Том будет сохраняться до тех пор, пока его не использует ни один контейнер.
Докер-сеть
Сетевое взаимодействие между контейнерами Docker можно использовать端口映射
Кстати, другие контейнеры можно реализовать прямо через порт. Кроме этого метода есть еще один.容器连接(linking)系统
Взаимодействие контейнеров также может быть достигнуто. (В этой статье узел использует сопоставление портов для подключения к mongodb)
Что касается сетевого модуля Docker, подробности подключения к контейнеру рекомендуют эту статью:Подробное объяснение сетевого режима Docker
Сценарии приложений Docker
Docker развертывает весь процесс проекта Node (практика DockerFile)
-
использовать
Koa2
инициализироватьNode
проект, черезMongose
промежуточное ПОMogodb
База данных, реализует базовый интерфейсMogodb
Вставьте данные. адрес проекта:GitHub.com/koala-co Nth… -
Сначала создайте файл .dockerignore в корневом каталоге проекта, чтобы отфильтровать файлы, которые не нужно упаковывать в образ Docker.
# /usr/src/nodejs/dockerstudy/.dockerignore .git node_modules
-
Создается в корневом каталоге проекта
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>...
Если определена переменная среды, ее можно использовать в последующих инструкциях.
-
-
Ссылка на код на данный момент заканчивается, отправьте Dockerfile на github или gitlab и т. д.
на мой сервер
centos7
Например, установленDocker
. -
Сначала проверьте код и клонируйте проект в указанный каталог.
git clone https://github.com/koala-coding/dockerstudy
-
войти в сборку каталога
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
. -
путем зеркального отображения
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
порт открыт в группе безопасности -
в контейнер
docker ls -a 查看所有容器,包括当前容器的id docker exec -it <id> bash
-
проверка журнала Проверьте журнал выполнения, «50425b8f2ef3» — это идентификатор контейнера.
$ docker logs -f 50425b8f2ef3
Но у меня все еще есть проблема: когда я действительно хочу увидеть файл журнала, я не могу зайти в каждый контейнер, чтобы увидеть журнал, что является пустой тратой времени! Есть ли более высокий путь? Я буду в следующей статье»Как элегантно печатать, сохранять и анализировать журналы в онлайн-среде"Написать в.
Docker развертывает среду Mongodb
- Получить зеркало MongoDB удаленно
docker pull mongo
-
Создайте докер-контейнер
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 запускает контейнер как демон
- -p указывает контейнерСопоставление портов(Особое примечание: спереди — локальный порт, сзади — контейнерный порт, добавьте
-
Тестовое подключение к 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