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:
Конфигурация установки
- ОС: Linux ubuntu18 4.15.0-91-универсальная, через
uname -a
Проверить - образ докера:developer.aliyun.com/mirror/dock…
удалить старую версию
$ 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
в,-t
option указывает Docker выделить псевдотерминал (псевдотерминал) и привязать его к стандартному вводу контейнера,-i
затем оставляет стандартный ввод контейнера открытым.
когда используешьdocker run
Для создания контейнера стандартные операции, выполняемые Docker в фоновом режиме, включают:
- Проверьте, существует ли указанное зеркало локально, и загрузите его из общедоступного репозитория, если оно не существует.
- Создание и запуск контейнера из образа
- Выделите файловую систему и смонтируйте слой для чтения и записи вне зеркального слоя, доступного только для чтения.
- Мост виртуального интерфейса от интерфейса моста, настроенного на хост-узле, к контейнеру.
- Настройте IP-адрес из пула адресов в контейнер
- Выполнение указанного пользователем приложения
- Контейнер завершается после выполнения
Некоторые распространенные варианты:
-
-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
Эта статья была впервые опубликована вБлог Ян Цзюньнина, Творить непросто, лайк 👍 - моя мотивация продолжать! ! !