Заметки об исследовании Docker Луочжу

внешний интерфейс Docker DevOps
Заметки об исследовании Docker Луочжу

Docker — это эпохальный проект с открытым исходным кодом, который полностью раскрывает возможности виртуализации вычислений, значительно повышает эффективность обслуживания приложений и снижает стоимость разработки приложений для облачных вычислений! С Docker развертывание, тестирование и распространение приложений никогда не было более эффективным и простым!

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

Эта статья — заметки автора в процессе изучения Docker с точки зрения фронтенд-инженера, и если она вам поможет, для меня это будет честью.

Введение в Докер

DockerиспользоватьGoogleкомпания запустилаПерейти на языкразработка и реализация на основеLinuxядроcgroup,namespace,так же какOverlayFSКатегорияUnion FSи другие технологии для инкапсуляции и изоляции процесса, который принадлежитТехнология виртуализации на уровне операционной системы. Поскольку изолированный процесс не зависит от хоста и других изолированных процессов, его также называют контейнером. Первоначальная реализация была основана наLXC, удалено с версии 0.7LXC, перейти на использование собственной разработкиlibcontainer, начиная с версии 1.11, он был доработан для использованияrunCа такжеcontainerd.

Основные концепции Docker

Изображение

Все мы знаем, что операционная система разделена на ядро ​​и пространство пользователя. Для Linux после запуска ядра оно смонтируетсяrootФайловая система обеспечивает для него поддержку пользовательского пространства. Образ Docker (Image) эквивалентенrootФайловая система. такие как официальные зеркалаubuntu:18.04Он содержит полный набор минимальной системы Ubuntu 18.04.rootФайловая система.

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

Контейнер

зеркало (Image) и контейнер (Container) отношения, как и в объектно-ориентированном программированииа также实例Точно так же образ является статическим определением, а контейнер — сущностью при запуске образа. Контейнеры можно создавать, запускать, останавливать, удалять, приостанавливать и т. д.

Суть контейнера — это процесс, но в отличие от процесса, выполняемого непосредственно на хосте, процесс-контейнер работает в своей собственной независимой системе.Пространства имен. Таким образом, контейнер может иметь свой собственныйrootФайловая система, собственная сетевая конфигурация, собственное пространство процессов и даже собственное пространство идентификаторов пользователей. Процесс в контейнере выполняется в изолированной среде и используется так, как если бы он работал в системе, независимой от хоста. Эта функция делает упакованные в контейнер приложения более безопасными, чем работающие непосредственно на хосте. Из-за этой изоляции многие люди часто путают контейнеры и виртуальные машины, когда они плохо знакомы с Docker.

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

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

Согласно требованиям лучших практик Docker, контейнеры не должны записывать данные на свой уровень хранения, а уровень хранения контейнера должен оставаться без состояния. Все операции записи файлов должны использоватьОбъем данных (объем), или привязать каталог хоста. Чтение и запись в этих расположениях будет пропускать слой контейнерного хранилища и напрямую читать и записывать на хост (или сетевое хранилище), которое имеет более высокую производительность и стабильность.

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

Сервер реестра хранилища (Registry)

ОдинDocker Registryможет содержать несколькосклад(Repository); каждый репозиторий может содержать несколькоЭтикетка(Tag); каждая метка соответствует зеркалу.

Обычно репозиторий содержит образы разных версий одного и того же программного обеспечения, и теги часто используются для каждой версии программного обеспечения. мы можем пройти<仓库名>:<标签>формат, чтобы указать, какая версия программного обеспечения является зеркальным отображением. Если метка не указана, она будет начинаться сlatestв качестве метки по умолчанию.

кЗеркало UbuntuНапример,ubuntu— это имя репозитория, которое содержит различные теги версий, например,16.04, 18.04. мы можем пройтиubuntu:16.04,илиubuntu:18.04чтобы указать, какая версия образа требуется. Если теги опущены, напримерubuntu, это будет рассматриваться какubuntu:latest.

Названия складов часто начинаются сдвухэтапный путьформа, напримерjwilder/nginx-proxy, первое часто означает имя пользователя в многопользовательской среде Docker Registry, а второе часто является соответствующим именем программного обеспечения. Но это не абсолютно и зависит от конкретного используемого программного обеспечения или службы Docker Registry.

Публичный реестр докеров:

Частный реестр Docker:

Конфигурация установки

удалить старую версию

$ apt remove docker docker-engine docker.io containerd runc

Установить через пакет

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent pass software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

Установить через скрипт

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

После успешной установки служба Docker будет автоматически запущена. пользователь может использоватьsystemctl is-enabled dockerЧтобы убедиться, что служба Docker автоматически запускается при загрузке.

Необязательный

решитьWARNING: Your kernel does not support cgroup swap limit capabilities:

1. Изменить/etc/default/grubдокумент

$ nano /etc/default/grub

2. найтиGRUB_CMDLINE_LINUX=элементы конфигурации и добавитьcgroup_enable=memory swapaccount=1.

3. После сохранения файла выполните следующую команду:sudo update-grub

4. Перезапустите сервер:reboot

Проверьте правильность установки Docker

$ docker run hello-world
Выполните приведенную выше команду, если информация может быть выведена нормально, установка прошла успешно.
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Конфигурация демона Docker

воплощать в жизньnano /etc/docker/daemon.jsonНапишите следующее в:

{
  "experimental": false,
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://mirror.ccs.tencentyun.com",
    "http://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ]
}

Перезапустите службу:

$ systemctl daemon-reload
$ systemctl restart docker.service

Использование образов Docker

получить зеркало

docker pull [选项] [Docker Registry 地址[:端口号]/][用户名]<仓库名>[:TAG]

  • Опция по умолчанию
    • -a,--all-tags=true|false: Получать ли все изображения на складе, по умолчанию нет
    • --disable-content-trust: отменить проверку содержимого зеркала, по умолчанию верно
  • Реестр Docker по умолчанию:registry.hub.docker.com
  • Имя пользователя по умолчанию:library, которое является официальным зеркалом
  • ТЕГ по умолчанию:latest

Посмотреть информацию о зеркале

Список существующих зеркал на локальном хосте

docker image ls | docker images

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

Используйте команду tag для добавления тегов изображения

docker tag ubuntu:latest myubuntu:latest

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

Используйте команду проверки для просмотра деталей

docker inspect <仓库>

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

Используйте команду history для просмотра истории изображений.

docker history <REPOSITORY>[:TAG]илиdocker history <IMAGE ID>

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

удалить зеркало

1. Используйте теги для удаления изображений

docker rmi <IMAGE> [IMAGE...]илиdocker image rm <IMAGE> [IMAGE...]

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

docker rmi <IMAGE ID>

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

Обратите внимание, что при создании контейнера на основе этого образа файл образа не может быть удален по умолчанию. мы можем использоватьdocker ps -aКоманда может просматривать все контейнеры, существующие на этом компьютере.

Лучшая практика: используйте в первую очередьdocker rm <Container ID>Удалите все контейнеры, которые зависят от образа, затем выполнитеdocker rmi <IMAGE ID>Затем удалите зеркало.

очистить изображения

docker image prune [options]

  • -a,--all: удалить все бесполезные изображения, а не только временные изображения
  • -f,--force: Принудительно удалить зеркало без запроса подтверждения

После использования Docker в течение определенного периода времени в системе могут остаться некоторые временные файлы изображений и неиспользуемые изображения.docker image pruneКоманда на уборку.

Мы можем комбинировать crontab для регулярной очистки, выполненияcrontab -e, напишите конфигурацию:

# 一定要记得在后面按 Enter 输入换行符,否则不会生效的
59 23 * * * docker image prune -f

Создать образ

1. Создан на основе существующего контейнера

docker commit [OPTIONS] <CONTAINER> <REPOSITORY>[:TAG]

  • -a,--author=:Информация об авторе
  • -m,--message="":Отправить информацию
  • -p,--pause=true: приостановить выполнение контейнера при фиксации

Сначала запустите образ alpine, установите в него nano, а затем опубликуйте новый образ:

$ docker run -it alpine bash
$ docker commit -m "install nano" -a "杨俊宁" ff3034d2ffa7 my-alpine:0.1

2. Создан на основе Dockerfile

docker build -t <IMAGE NAME> <上下文路径/URL/->

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

Простой пример DockerFile приведен ниже, установите среду узла на основе альпийского зеркала, составляют новыйyoungjuning/alpineЗеркало:

FROM alpine

LABEL version="1.0" maintainer="youngjuning<youngjuning@aliyun.com>"

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

Конструкция:

$ docker build -t youngjuning/alpine:latest .

образ хранения

Если вы хотите экспортировать изображение в локальный файл, вы можете использоватьdocker saveЗаказ. Эта команда поддерживает-o <string>или--output <string>параметра экспортировать изображение в указанный файл.

Например, экспортируйте локальный образ alpine в файл alpine.tar следующим образом:

$ docker save -o alpine.tar alpine

После этого пользователи могут поделиться образом с другими, скопировав файл alpine.tar.

Загрузка изображения

можно использоватьdocker loadИмпортируйте экспортированный tar-файл в локальный зеркальный репозиторий. служба поддержки-i <string>или-input <string>возможность чтения содержимого изображения из указанного файла.

Например, импортируйте образ из файла alpine.tar в локальный список образов следующим образом:

$ docker load -i alpine.tar

загрузить изображение

docker push [选项] [Docker Registry 地址[:端口号]/][用户名]<仓库名>[:TAG]

Процесс выпуска новой версии:

  • Выпустить последнюю версию:docker push youngjuning/alpine:latest
  • Добавьте новые теги:docker tag youngjuning/alpine:latest youngjuning/alpine:1.0.0
  • Версия релиза 1.0.0:docker push youngjuning/alpine:1.0.0

может просматриватьyoungjuning/alpineProject Просмотр образа Aplpine Docker на основе образа aliyun, который я выпустил

Управление контейнерами Docker

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

запустить контейнер

1. Создайте и запустите

$ docker run -it ubuntu:18.04 /bin/bash

в,-toption указывает Docker выделить псевдотерминал (псевдотерминал) и привязать его к стандартному вводу контейнера,-iзатем оставляет стандартный ввод контейнера открытым.

когда используешьdocker runДля создания контейнера стандартные операции, выполняемые Docker в фоновом режиме, включают:

  1. Проверьте, существует ли указанное зеркало локально, и загрузите его из общедоступного репозитория, если оно не существует.
  2. Создание и запуск контейнера из образа
  3. Выделите файловую систему и смонтируйте слой для чтения и записи вне зеркального слоя, доступного только для чтения.
  4. Мост виртуального интерфейса от интерфейса моста, настроенного на хост-узле, к контейнеру.
  5. Настройте IP-адрес из пула адресов в контейнер
  6. Выполнение указанного пользователем приложения
  7. Контейнер завершается после выполнения

Некоторые распространенные варианты:

  • -d,--detach=true|false: следует ли запускать контейнер в фоновом режиме, по умолчаниюfalse
  • -i,--interactive=true|false: оставить стандартный ввод открытым, по умолчаниюfalse
  • -p,--publish=[]: указывает, как сопоставить порт локального хоста, например.-p 9000:9000
  • --restart="no": политика перезапуска контейнера, включаяno,on-failure[:max-retry],always,unless-stoppedЖдать
  • --rm=true|false: Удалять ли автоматически после выхода из контейнера, не может следовать-dиспользовать одновременно
  • -t,--tty=true|false: следует ли выделять псевдотерминал, по умолчаниюfalse
  • -v [HOST-DIR:]<CONTAINER-DIR>[:OPTIONS],--volume=[HOST-DIR:]<CONTAINER-DIR>[:OPTIONS]: Файл, висящий на хосте, скатывается в контейнер
  • --name="": указывает псевдоним контейнера

2. Запустите завершенный контейнер

годный к употреблениюdocker start <CONTAINER ID>команда для прямого запуска и запуска завершенного контейнера.

3. Просмотр вывода контейнера

Чтобы получить выходную информацию о контейнере, вы можете передатьdocker <CONTAINER ID> logsЗаказ.

Завершить контейнер

можно использоватьdocker stop <CONTAINER ID>для завершения работающего контейнера.

Контейнер в завершенном состоянии, к которому можно получить доступ черезdocker container startкоманда для перезагрузки.

также,docker container restartКоманда завершит работающий контейнер, а затем перезапустит его.

execв контейнер

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

Иногда необходимо ввести контейнер для работы, рекомендуется использовать егоdocker execЗаказ:

$ docker run -dit alpine
$ docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                      NAMES
3d95dabef801        alpine                "/bin/sh"           21 seconds ago      Up 19 seconds                                  recursing_aryabhata
$ docker exec -it <CONTAINER ID>

Выход из этого стандартного ввода не приведет к остановке контейнера.

удалить контейнер

можно использоватьdocker container rmдля удаления контейнера, находящегося в остановленном состоянии. Например

$ docker rm  <CONTAINER ID>
# 删除运行中的容器,并删除容器挂载的数据卷
$ docker rm -vf

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

Очистить все завершенные контейнеры

$ docker container prune

Экспорт и импорт контейнеров

$ docker export 7691a814370e > ubuntu.tar
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
$ docker import http://example.com/exampleimage.tgz example/imagerepo

Посмотреть контейнеры

Просмотр сведений о контейнере

$ docker inspect [OPTIONS] <CONTAINER ID>

Посмотреть процесс в контейнере

$ docker top [OPTIONS] <CONTAINER ID>

Посмотреть статистику

$ docker stats [OPTIONS] <CONTAINER ID>

Обновить конфигурацию

$ docker update --restart=always <CONTAINER ID>

переименовать контейнер

$ docker rename <old name> <new name>

Просмотр журналов контейнера

$ docker logs -f <CONTAINER ID>

Инструмент управления контейнерами Portainer

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 \
		-v /var/run/docker.sock:/var/run/docker.sock \
		-v portainer_data:/data \
		--name portainer \
		--restart always \
		portainer/portainer

настроить/etc/nginx/sites-enabled/dafulatдокумент:

upstream portainer {
    server 127.0.0.1:9000;
}

server {
  listen 80;

  location /portainer/ {
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      proxy_pass http://portainer/;
  }
  location /portainer/ws/ {
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_http_version 1.1;
      proxy_pass http://portainer/ws/;
  }
}

Сохранение данных Docker

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

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

Создать том данных

$ docker volume create my-vol

КромеcreateВ дополнение к подкомандам, объем докера также поддерживаетinspect(проверьте подробную информацию),ls(перечислите существующие объемы данных),prune(очистить бесполезные объемы данных),rm(удалить том данных)

привязать объем данных

--mount

$ docker run -d -P \
    --name web \
    --mount source=my-vol,target=/webapp \
    training/webapp \
    python app.py

-v,--volume

$ docker run -d -P \
    --name web \
    -v my-vol:/wepapp \
    training/webapp \
    python app.py

source также может быть абсолютным путем к любому местоположению в системе.

При монтировании файла непосредственно в контейнер используйте инструменты редактирования файлов, включая vi илиsed --in-placeможет привести к изменению индекса файла, начиная с Docker 1.1, это приведет к появлению сообщения об ошибке. Поэтому рекомендуемый способ — напрямую смонтировать каталог, в котором находится файл, в контейнер.

Dockerfile

Подробные инструкции см.:Подробные инструкции Dockerfile

Установка приложения

GitLab и его официальные зеркала

docker-compose.yml

web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'gitlab.yangjunning.pro'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://gitlab.yangjunning.pro:8929'
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
  ports:
    - '8929:8929'
    - '2224:22'
  volumes:
    - 'gitlab_config:/etc/gitlab'
    - 'gitlab_logs:/var/log/gitlab'
    - 'gitlab_data:/var/opt/gitlab'

запустить контейнер

$ docker-compose up -d

обновить gitlab

$ docker-compose pull
$ docker-compose up -d

Задачи синхронизации, связанные с Docker

# crontab -e
# 每天凌晨强制删除无用镜像,不光是临时镜像;每天凌晨清理无用的数据卷
00 00 * * * docker image prune -af && docker volume prune -f && rsync -arv /var/lib/docker/volumes /backups/docker

Для настройки файла синхронизации qshell с облаком Qiniu см.Резервное копирование в облако Qiniu

концепция

DevOps

DevOps (Devбегство иOpВыборы) — это культура, движение или практика, которые ценят общение и сотрудничество между разработчиками программного обеспечения (Dev) и техническими специалистами по ИТ-операциям (Ops). Автоматизируя процесс «доставки программного обеспечения» и «архитектурных изменений», он делает создание, тестирование и выпуск программного обеспечения более быстрым, частым и надежным.

Внедрение DevOps может сделать поставку продукта,тестовое задание, разработка функций иподдерживать(включая некогда редкие, а ныне распространенные"горячее пятно"") имеют далеко идущие последствия. В организациях, которым не хватает возможностей DevOps, существует информационный "разрыв" между разработкой и эксплуатацией. Например, операционисты требуют большей надежности и безопасности, в то время как разработчики хотятинфраструктураРеагирование быстрее, и бизнес-пользователи требуют более быстрого выпуска большего количества функций для конечных пользователей. Именно из-за этого информационного пробела возникают наиболее распространенные проблемы.

Виртуализация

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

контейнер

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

Многоуровневое хранилище

Поскольку образ содержит полную операционную системуrootФайловая система часто имеет огромный размер, поэтому при разработке Docker она используется полностью.Union FSтехнология, разработанная как многоуровневая архитектура хранения. Строго говоря, образ — это не упакованный файл, такой как ISO, образ — это всего лишь виртуальная концепция, и его фактическое воплощение состоит не из файла, а из набора файловых систем или комбинации многоуровневых файловых систем. , состав.

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

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

демон

В многозадачной компьютерной операционной системе демон — это компьютерная программа, работающая в фоновом режиме. Такие программы инициализируются как процессы. Имена программ-демонов обычно заканчиваются на букву "d": например,syslogdЭто относится к процессу демона, который управляет системным журналом.

Как правило, у демона нет родительского процесса (т. е. PPID=1), и он находится непосредственно под init в иерархии системных процессов UNIX. Программа-демон обычно сама становится демоном, разветвляя дочерний процесс, а затем вызывая немедленное завершение своего родителя, позволяя дочернему процессу работать под управлением init. Этот метод часто называют «распаковкой».

Система обычно загружает демонов вместе при запуске. Демоны обеспечивают поддержку ответа на сетевые запросы, активность оборудования и т. д. или на запросы других приложений какой-либо другой задачей. Демон также может настраивать оборудование (например, devfsd в некоторых системах Linux), запускать запланированные задачи (например, cron) и выполнять другие задачи.

В среде DOS такие приложения называются резидентными программами (TSR). В системах Windows приложения, называемые службами Windows, выполняют обязанности демона.

В исходной системе Mac OS такие приложения назывались «расширениями». А в Mac OS X, похожей на Unux, есть демоны.

Докер против виртуальных машин

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

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

Расширенное чтение

практиковаться

  • SonarQube
  • Nexus Repository Manager
  • ShowDoc
  • Verdaccio
  • EasyMock
  • Sentry
  • Ansible
  • code-push-server
  • BugOut

Эта статья была впервые опубликована вБлог Ян Цзюньнина, Творить непросто, лайк 👍 - моя мотивация продолжать! ! !