Этой статьи достаточно, чтобы Xiaobai выучил докер (рекомендуемая коллекция)

Эксплуатация и обслуживание


что такое докер?

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"! Присылайте качественные статьи время от времени.