что такое докер?
docker 🐳 Как представитель технологии контейнеризации. Поскольку выполнение приложения изолировано в независимой рабочей среде, эта независимая рабочая среда подобна контейнеру, обертывающему приложение, что и является источником названия технологии контейнеров. По сравнению с виртуальными машинами докер имеет несколько характеристик:
-
Быстрый старт
-
легче
внутренности докера
Namespace Пространство имен, обеспечивающее механизм изоляции процессов, таких как процесс, сеть, монтирование и другие ресурсы.
ControlGroups Роль групп управления ресурсами заключается в контроле ресурсов компьютера.В отличие от пространств имен, группы CGroup в основном выполняют изоляцию аппаратных ресурсов..
Union File System Объединенная файловая система, которая поддерживает монтирование каталогов в разных местах в одну и ту же виртуальную файловую систему, формируя многоуровневую модель.
Основной состав докера
В системе докеров необходимо ввести четыре, а именно: Зеркальное отражение ) , Контейнер ( Контейнер ) ,Склад (Реестр) .
зеркало
Образ — это специальная файловая система, которую можно понимать как пакет только для чтения или даже как класс внутри класса и экземпляра. Каждое зеркало может состоять из нескольких зеркал. Это иерархическая структура, и каждый раз, когда изображение изменяется, докер переходит на слой изображения.
контейнер
Контейнеры можно понимать как экземпляры классов и экземпляров, а образы мертвы и неизменны.
Контейнер – это жилое пространство.
Каждый раз, когда контейнер запускается, новый контейнер запускается из образа.
склад
Зеркальный репозиторий на удаленке, например репозиторий npm.
установить докер
Перед установкой docker давайте взглянем на определение версии docker, которое поможет нам выбрать и использовать подходящую версию Docker в будущих разработках. Для докера он делится на две серии:
-
Издание для сообщества (CE)
-
Корпоративная версия (ee)
Разница между Community Edition и Enterprise Edition заключается в том, что Enterprise Edition взимает плату за дополнительные услуги.
sudo yum install yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
Если случайности нет, введите docker -v и появится следующая страница, что означает успех
Запустите докер процесса
Работающий процесс docker можно просто понять как вытягивание соответствующего образа с удаленного хранилища на локальный --> создание контейнера через образ --> запуск контейнера
использовать докер
поиск в докере (для просмотра образов удаленных библиотек)
а также npm search Аналогично используется для просмотра зеркала в пульте, например:
docker search ubuntu
Как показано на рисунке выше, у него есть несколько параметров:
NAME |
имя зеркала |
DESCRIPION
|
описывать |
STARS
|
Количество звезд |
OFFICIAL
|
Это официальная версия |
AUTOMATED
|
Это домашнее |
docker pull (вытягивание изображения)
Перетащите образ из удаленного репозитория в локальный, здесь centos Зеркало как пример
docker pull centos
После успешного извлечения появится следующий рисунок:
Если вы не укажете какие-либо теги, докер будет извлекать последний тег по умолчанию и указывать
:
+ тег
Например
:
docker pull centos:7
.
Каждое изображение состоит из набора 64-битных хеш-кодов, что обеспечивает глобальную уникальность.
образы докеров (просмотреть изображение)
После успешного извлечения образа с удаленного конца мы можем перечислить все локальные образы через образы докеров.
docker images
Как показано ниже:
Идентификатор изображения здесь 12-битный, а длина 64-битного, упомянутого выше, не конфликтует, но официальный должен отображать его на консоли, чтобы он выглядел лучше. Задние цифры опущены.
docker create (создать контейнер)
Если изображение является классом, то нам нужно создать экземпляр для работы с ним. Проходить проходить
docker create centos
Чтобы создать контейнер Centos, после успешного создания будет сгенерировано 64-битное хеш-значение, как показано ниже:
Если у вас нет локального образа Centos, соответствующая версия по умолчанию будет извлечена из удаленного репозитория. Мы также можем пройти --name указать псевдоним для контейнера .
docker ps (просмотр контейнера)
Вы можете просмотреть все запущенные в данный момент контейнеры через docker ps, но так как указанный выше контейнер не запущен, вам нужно добавить -a параметр. Представляет все контейнеры.
docker ps -a
docker start stop reset (запуск/остановка/перезапуск контейнера)
пройти через docker create Созданный контейнер находится в состоянии Created, а его внутреннее приложение не запущено, поэтому нам нужно пройти docker start команду для ее запуска.
docker start 8c784b9b2118
пройти через запуск докера + идентификатор контейнера Чтобы запустить контейнер, если для контейнера настроен псевдоним, вы также можете запустить контейнер через псевдоним. После запуска контейнера через docker ps . Как показано ниже:
Вы найдете его пустым. Зачем это, делай docker ps -a
Вы обнаружите, что контейнер находится в Exited условие. Это связано с тем, что если внутри контейнера не запущен ни один процесс, контейнер start остановится после этого. Если есть контейнеры процессов, такие как nginx, mysql, вы встанете после запуска.
docker run (создать и запустить контейнер)
docker run
Команда
docker create
команда и
docker start
Синтез команд — одна из наиболее часто используемых команд.
Команда docker run имеет много параметров, здесь я приведу несколько примеров часто используемых параметров.
- d
|
Запустите контейнер в фоновом режиме и верните идентификатор контейнера. |
- i | Запустите контейнер в интерактивном режиме, обычно с ключом -t; |
- p
|
Отображение портов, формат: host (хост) порт: порт контейнера |
- t
|
переназначает псевдотерминал ввода для контейнера, обычно используемый с -i |
- v
|
привязать объем данных
|
--name | Дайте контейнеру имя |
--net | Указывает тип сетевого подключения контейнера |
Например
docker run -p 80:80 -v nginx-html:/usr/share/nginx/html -d --name nginx nginx:latest
Используйте зеркало nginx:latest для запуска контейнера в фоновом режиме, сопоставьте порт 80 контейнера с портом 80 хоста и сопоставьте каталог /usr/share/nginx/html контейнера с данными nginx-html в докер в каталоге хоста в томе
.
И назвал его nginx.
Вы можете видеть, что состояние контейнера изменилось на up.
Между каждым докер-контейнером и нашим хостом существуют отношения изоляции. Предположим, что есть служба nginx, а номер порта, отслеживаемый внутренним контейнером, равен 80. В настоящее время, как мы можем получить доступ к службе nginx при доступе к порту хоста с номером 80. снаружи? так Нам нужно сделать отображение через -p Подключите порт 80 на хосте к nginx порт карта . -v Смонтируйте каталог на хосте в каталог в контейнере , что удобно для будущего резервного копирования данных И предотвратите потерю данных после удаления контейнера. Сеть и тома данных будут отдельно упомянуты позже.
docker exec (выполнить команду в работающем контейнере)
Много раз операция, которая нам нужна, состоит не только в том, чтобы запустить контейнер в соответствии с командой, заданной изображением, но мы также хотим узнать больше о контейнере или управлять контейнером, В настоящее время лучший способ - позволить нам войти контейнер. Вот пример вышеприведенного контейнера nginx.docker exec -it nginx bash
Вы обнаружите, что префикс стал хешем контейнера, что указывает на то, что вы успешно вошли в контейнер. Здесь я вхожу в режиме bash, вы, конечно, можете входить и другими интерактивными способами. -it команда и выше docker run Параметры те же, что и в прогоне Представляет создание нового контейнера, а также запуск и вход в контейнер. .
docker rmi? (удалить контейнер или образ)
docker rm 容器id
docker rmi 镜像id
Следует отметить, что если контейнер запущен, вам необходимо остановить контейнер перед его удалением.
docker inspect (получить метаданные контейнера/изображения)
docker inspect [容器id/镜像id]
С помощью приведенной выше команды вы можете получить соответствующую информацию о контейнере или образе, как показано на рисунке.
Включая сопоставление номеров портов, монтирование томов данных, сетевые условия и т. д. В любом случае, если вы хотите увидеть конкретную информацию о контейнере или образе, правильно ввести эту команду.
docker save load (экспорт изображения/импорт изображения)
Экспорт контейнера в виде tar-файла -o Назначается указанному файлу.
docker save -o nginx.tar [镜像id]
импортировать изображение
docker load -i nginx.tar
docker export import (экспортный контейнер/импортный контейнер)
Экспорт контейнера в виде tar-файла
docker export -o nginx.tar [容器id]
Импортируйте контейнер, здесь следует отметить, что используйте
docker import
Вместо того, чтобы импортировать контейнер напрямую, импортируйте содержимое среды выполнения контейнера в виде образа.
Таким образом, результатом импорта является изображение, а не контейнер.
docker import nginx.tar
docker cp (для копирования данных между контейнером и хостом)
Создайте файл abc.txt в каталоге хоста
Переместите файл abc.txt из каталога в каталог /data в контейнере.
docker cp ./abc.txt a175b4a2fd94:/data
в контейнер
docker exec -it a175b4a2fd94 bash
Вы обнаружите, что файл abc.txt существует в каталоге /data.Наоборот, файл или каталог содержимого контейнера также можно скопировать на хост, если порядок этих двух файлов обратный.
docker cp a175b4a2fd94:/data /data/
другие команды
docker logs
|
Получить журналы контейнера |
docker port
|
Просмотр состояния порта сопоставления контейнеров |
docker volume ls | Список созданных в настоящее время томов данных |
docker history
|
Посмотреть историю создания образа |
docker diff
|
Проверить наличие изменений в файловой структуре в контейнере |
docker kill
|
убить работающий контейнер |
docker login
|
Войдите в удаленный зеркальный репозиторий |
docker push
|
Загрузите локальный образ в удаленный репозиторий |
Вы можете пойти и возиться с ним, вводить команды снова и снова, удалять контейнер и удалять изображение, если вы не можете играть.
Зеркальный
Когда зеркала на общественном складе не могут удовлетворить наши потребности или когда зеркала изготавливаются по индивидуальному заказу, нам необходимо разработать собственные зеркала для регулярного использования в будущем.
Сделать образ через коммит докера
Предположим, теперь я создаю новый файл abc.txt в контейнере, созданном образом nginx, как я могу иметь этот файл abc.txt каждый раз, когда я создаю образ nginx. В настоящее время это можно решить, непосредственно превратив контейнер в образ. Конкретные команды следующие
docker commit -m'我的nginx' -a'yalewan' a175b4a2fd94 mynginx:1.0
Результаты, как показано ниже
выполнить докер я возрастов, вы найдете дополнительное зеркало
-m |
Информация о представлении зеркала |
-a
|
Автор, приславший изображение
|
-p
|
При фиксации контейнер приостанавливается. |
Сделать образ с помощью Dockerfile
Dockerfile — это файл конфигурации, используемый в Docker для определения автоматизированного процесса сборки образов, который может четко определить процесс создания данного образа Docker. Предположим, мы возьмем в качестве примера проект node (проект находится в каталоге nodeapp хоста, на основе проекта в koa2 ) как показано на рисунке:
-
написать докерфайл
dockerfile имеет следующие параметры
FROM
|
Унаследованный файл изображения |
COPY
|
скопировать данные |
WORKDIR
|
рабочий путь |
RUN
|
Команда запуска фазы компиляции и упаковки |
EXPOSE
|
открытый номер порта |
CMD
|
Команда этапа запуска контейнера |
Создайте новый файл dockerfile на том же уровне каталога nodeapp без суффикса.
FROM node # 基于node镜像
COPY ./nodeapp /nodeapp # 将nodeapp目录下d的文件移到容器中
WORKDIR /nodeapp # 工作目录nodeapp,类似移到nodeapp目录中
RUN npm install # 安装依赖
EXPOSE 3000 # 因为容器是隔离的,所以需要暴露端口
После того, как новое создание будет завершено, вы можете взглянуть на мою текущую структуру каталогов.
Выполнить в домашнем каталогеРяд
docker build -t nodeapp .
-t Указывает имя зеркала, не забудьте следующее . , относительный путь к файлу dockerfile, . Указывает текущий каталог. Текущий результат выглядит следующим образом
После завершения установки проверьте образ, и вы обнаружите, что есть дополнительный образ nodeapp.
Создайте и запустите контейнер и одновременно войдите в контейнер, наш проект узла уже существует в контейнере.
docker run -p 3000:3000 -it nodeapp bash
npm start Запустите nodeapp и доступ к браузеру
Изменить D ocker file добавить предложение в конце
CMD npm start
Удаляем контейнер и снова перезапускаем, теперь мы даже опускаем шаг запуска. Увидев это, я полагаю, что вы также имеете определенное представление о докере, но поверьте мне, это все еще не лучший выбор, продолжайте вниз читать .
Объемы данных
Поскольку файловая система внутри контейнера создается и удаляется с внутренним жизненным циклом контейнера, а контейнер изолирован, нам сложно получить или манипулировать данными во внутреннем файле контейнера извне. Поэтому для решения этой проблемы docker предлагает три способа монтирования файловой системы, а именно: Bind Mount , Volume а также Tmpfs Mount .
Volume
тома являются частью управления докером файловой системы хоста, в /var/lib/docker/volumes содержание Далее, когда вы создаете том данных, он будет помещен в папку по умолчанию. volumes содержание. создать команду
docker volume create nginx-html
в состоянии пройти docker volume ls Проверить
пройти через docker volume inspect nginx-html для просмотра конкретной информации
Давайте создадим новый контейнер nginx для монтирования тома данных с помощью команды, как показано ниже.
docker run -d --name nginx -v nginx-html:/usr/share/nginx/html nginx
После успешного монтирования входим в хост
cd /var/lib/docker/volumes/nginx-html/_data
Вы найдете еще два файла в каталоге nginx-html на хосте.
При этом входим внутрь контейнера
Вы обнаружите, что файл внутри контейнера совпадает с файлом смонтированного каталога, что указывает на то, что мы успешно смонтировалиdocker exec -it 7454e37763d0 bash
cd /usr/share/nginx/html
Конечно, независимо от того, добавляете ли вы или изменяете файлы во внутренней файловой системе контейнера или в смонтированном каталоге томов докеров, другие связанные файлы изменятся соответствующим образом.
Bind Mount
Единственная разница между привязкой монтирования и томом заключается в том, что каталог в контейнере сопоставляется с любым местом на хосте.
docker run -d -v /mnt:/mnt -name logs centos
Разница лишь в том, что том соответствует имени файла (nginx-html), а bindMount — относительный путь (/mnt)
Tmpfs Mount
Tmpfs Mount временно монтируется в системную память, хранилище не является постоянным и исчезнет при остановке контейнера. Подходит для данных, которые не нужно сохранять. Его необходимо указать с --tmpfs при монтировании.
docker run -d --name webapp --tmpfs /webapp/cache webapp:latest
Интернет
Полный проект может иметь много контейнеров, таких как node, mysql, redis, webapp и т. д., и у них могут быть проблемы со связью друг с другом, например, как контейнеры узлов подключаются к службам mysql. Для этого Docker предоставляет сетевой драйвер. Существует три типа широко используемых сетевых драйверов: Bridge Driver , Host Driver , None Driver
в состоянии пройти docker network ls для просмотра сетевого драйвера
Если вы хотите увидеть конкретную информацию о сетевом драйвере и соответствующем контейнере, используйте docker network inspect [сетевой драйвер]
docker network inspect bridge
Как показано ниже:
Bridge Driver
На хосте будет создан виртуальный мост, и контейнеры Docker, запущенные на этом хосте, будут подключаться к этому виртуальному мосту. Как показано на рисунке выше, IP-адреса мостов отображаются, начиная с 172.17.0.1. Если сеть не указана, по умолчаниюbridgeмодель.
Host Driver
Используйте --net host для использования режима хоста.В режиме хоста хост использует общую сеть и использует IP-адрес и порт хоста.
Создайте новый контейнер nginx3 и укажите сетевой драйвер с параметром --net host
docker run -d --name nginx3 --network host nginx
После завершения запуска зайдите в сведения о хосте, вы обнаружите, что есть дополнительный контейнер и нет IP-адреса, как показано ниже:
None Driver
Не выполняйте настройку сети для контейнеров Docker. пройти через --net none
Создайте пользовательскую сеть
docker network create -d bridge mynetwork
Выполнить видd ocker network ls
связь между контейнерами
Обычно из-за предыдущей изоляции контейнеров сеть между двумя контейнерами не может обмениваться данными.Обычно нам нужно установить соединение между контейнерами через ссылку.
docker run -d --name nodeapp --link mysql node
Другими словами, два контейнера также могут одновременно подключаться к пользовательской сети.
docker run -d --name mysql --network mynetwork mysql
docker run -d --name nodeapp --network mynetwork node
контейнеры для оркестровки docker-compose
Часто полный проект может состоять из множества контейнеров.Смонтировать сеть для каждого контейнера и указать объем данных станет очень хлопотно.К счастью, docker-compose решает эту проблему за нас. Установите докер-композицию.
sudo curl -L
"https://github.com/docker/compose/releases/download
/1.24.0/docker-compose-$(uname -s)-$(uname -m)"
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Ниже я беру в качестве примера контейнер nginx
version: "3"
networks:
my-network:
driver: bridge
services:
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
restart: always
networks:
- my-network
versi
on
|
Версия Нет |
b uild | сборка из файла дока |
image | из какого зеркала построить |
por ts | Номер порта карты |
depends_on | полагаться из запускать заказ |
volumes | устанавливать из данные рулон |
net works | Интернет |
restart | Тяжелый Начало |
пройти черезdocker-compose up -d Запустите контейнер Если есть контейнер с таким же именем, не забудьте сначала удалить его!
Вы обнаружите, что контейнер был создан.Когда контейнеров много, просто продолжайте добавлять его. Конечно, технология оркестровки контейнеров не знает docker-compose, и k8s тоже неплохой выбор, не буду здесь вдаваться в подробности, если интересно, можете изучить..
tips
-
Как ускорить зеркалирование (вытягивание зеркал внутри страны с удаленного конца будет очень медленным)
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
# 找到 /etc/docker/daemon.json文件,添加上述文件
# 如果没有该文件,创建一个即可
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart docker
Спасибо всем
1. Если статья была вам полезна, поставьте мизинец, чтобы поставить лайк 👍, ваш лайк - движущая сила моего творчества.
2. Подпишитесь на официальный аккаунт "Front-end Elite"! Присылайте качественные статьи время от времени.