- 1. Знакомство с окружающей средой
- 1.1. Знакомство с системой
- 1.1.1. Введение в Docker
- 1.1.2. Компоненты платформы Docker
- 1.2. Описание предустановленной среды
- 1.2.1. Описание версии программного обеспечения
- 1.2.2. Базовая конфигурация среды
- 2. установка сервиса
- 2.1. Установка служб Docker
- 2.1.1. Установка Docker на CentOS
- 2.1.2、Установка Docker в Ubuntu
- 3, Зеркало
- 3.1. Настройка зеркального ускорения (Aliyun)
- 3.2, зеркало для вытягивания (вытягивание)
- 3.3. Список зеркал (изображений)
- 3.4. Создание образа (commit/import/Dockerfile)
- 3.4.1. Создание зеркала с помощью фиксации
- 3.4.2. Использование Dockerfile для создания зеркала
- 3.4.3. Dockerfile в деталях
- 3.4.3.1. ОТ
- 3.4.3.2, СОПРОВОЖДАЮЩИЙ
- 3.4.3.3. RUN
- 3.4.3.4. _COPY
- 3.4.3.5, ADD
- 3.4.3.6, WORKDIR
- 3.4.3.7. ПОЛЬЗОВАТЕЛЬ
- 3.4.3.8. ОБЪЕМ
- 3.4.3.9, EXPOSE
- 3.4.3.10. ENV
- 3.4.3.11. CMD
- 3.4.3.12, ТОЧКА ВХОДА
- 3.4.4. Демонстрация Dockerfile
- 3.4.4.1. Создание образа контейнера с функциональностью openssh-сервера
- 3.5. тег
- 3.6, загрузить изображение (push)
- 3.7, экспорт/импорт (сохранение/загрузка)
- 3.8. Построение изображения с помощью supermin5
- 3.9. Удаление изображения (rmi)
- 4、Контейнер
- 4.1. Просмотр контейнера
- 4.2. Запуск/остановка контейнера
- 4.2.1. Создание и запуск нового контейнера
- 4.2.2. Запуск остановленного контейнера
- 4.2.3. Остановка работающего контейнера
- 4.3. Удалить контейнер
- 4.4. Подключение контейнера
- 4.4.1. Команда прикрепления
- 4.4.2. команда exec
- 4.5. Импорт и экспорт контейнеров
- 4.5.1. Экспорт контейнеров
- 4.5.2. Импорт контейнеров
- 5. репозитории
- 5.1.1, создать зеркальный репозиторий Aliyun
- 5.1.2. Вход в удаленный репозиторий
- 5.2. Местное частное хранилище
- 5.2.1. Установка и запуск локального репозитория реестра
- 5.2.2. Просмотр зеркал в хранилище
- 6. управление данными
- 6.1. Объемы данных
- 6.1.1. Создание тома данных
- 6.1.2. Смонтируйте том данных
- 6.1.3. Удаление тома данных
- 6.2. Монтирование каталога хоста
- 6.2.1. Монтирование каталога хоста в качестве тома данных
- 6.2.2. Монтирование файла хоста в качестве тома данных
- 6.3. Совместное использование томов между контейнерами
- 7. управление сетью
- 7.1. Составление карты сети
- 7.2. Использование сети хоста
- 7.3. Взаимосвязанные контейнеры
- 7.3.1. Создание новой сети
- 7.3.2. Соединительные контейнеры
- 7.3.3. Ping-тест
- 7.4. Настройка сети docker0
- 7.4.1. Удалите оригинальную сеть
- 7.4.1.1, Установите команду btctl
- 7.4.1.2. Запрос информации о мосте
- 7.4.1.3. Выключите службу docker
- 7.4.1.4. Остановите мост docker0
- 7.4.1.5. Удалить мост docker0
- 7.4.1.6. Запрос всей информации о мосте
- 7.4.2. Настройка новой сети
- 7.4.2.1. Создание нового моста bridge0
- 7.4.2.2. Запрос созданного моста0
- 7.4.2.3. Установите адрес сетевого сегмента нового моста
- 7.4.2.4. Запуск моста bridge0
- 7.4.2.5. Запрос информации о мосте0
- 7.4.2.6. Добавление нового моста в файл конфигурации
- 7.4.2.7. Загрузите файл конфигурации и перезапустите службу docker
- 7.4.3. Развертывание приложения с использованием новой сети
- 7.4.3.1. Создание контейнера nginx
- 7.4.3.2、查看容器的状态
- 7.4.3.3、查看容器的bridge
- 8、Nginx负载均衡(轮询)
- 8.1、创建测试网页
- 8.2、创建测试容器 nginx1 nginx2
- 8.3、创建nginx.conf配置文件
- 8.4、创建nginx负载均衡容器
- 8.5、负载测试
1. Знакомство с окружающей средой
1.1. Знакомство с системой
1.1.1. Введение в Docker
:::info
💡 Docker — это контейнерный движок приложений с открытым исходным кодом, который позволяет разработчикам упаковывать свои приложения, а также пакеты зависимостей в переносимый контейнер и затем распространять его на любой популярной Linux-машине, а также виртуализировать его. Контейнеры полностью изолированы с помощью механизма песочницы и не имеют интерфейсов друг с другом.
:::
Полный Docker состоит из следующих компонентов.
- клиент dockerClient
- Демон докеров
- Изображение Docker Image
- Контейнер DockerContainer
Docker Engine Docker Engine представляет собой архитектуру C/S и состоит из следующих основных компонентов.
Сервер (демон Docker): процесс демона Docker, запущенный в фоновом режиме, который используется для управления объектами Docker, включая образы, контейнеры, сети и тома данных.
REST-интерфейс: интерфейс REST API для взаимодействия с демоном.
Клиент Docker: интерактивный клиент командной строки (CLI). Архитектура службы Docker показана на рисунке 1-1.
Рисунок 1-1 Архитектура службы Docker
1.1.2. Компоненты платформы Docker
Рисунок 1-2 Диаграмма состава сервисов Docker
Для запуска службы Docker в состав входят сервер-демон Docker, клиент Docker Client, образ Docker Image, библиотека Docker Registry и контейнер Docker Contrainer, как показано на рисунке 1-2.
(1) Образ Docker.
Это шаблон, доступный только для чтения, используемый для создания контейнера Docker, содержимое образа которого описывается текстом Dockerfile. Определение изображения похоже на «класс объектов, обращенных к объектам» и начинается с Базового изображения. Образ Docker — это фактически процесс установки, настройки и запуска образа Docker, а образы Docker хранятся в слоях на основе UnionFS, так что обновления образа могут обновлять только те слои, которые изменились.
FROM : Определяет базовое изображение.
MAINTAINER : Автор или сопровождающий.
RUN : Выполняет команды linux.
ADD : Добавить файл или каталог.
EVN: определяет переменные среды.
CMD: запускает процесс.
(2) Контейнер Docker.
Является работающим экземпляром изображения. Контейнер имеет образ для создания и запуска процесса, например.
Запустите образ ОС ubuntu, -i модель взаимодействия на переднем плане, выполните команду /bin/bash
$ docker run -i -t ubuntu /bin/bash
Извлечение образа, Docker Engine проверяет, существует ли образ ubuntu, если он уже существует локально, используйте образ для создания контейнера, если нет, Docker Engine извлекает образ из хранилища образов.
Используйте образ для создания нового контейнера.
Выделите файловую систему, смонтируйте слой чтения/записи и загрузите образ в ведомое устройство чтения/записи.
Назначьте интерфейс сети/моста и создайте сетевой интерфейс для связи контейнера с хостом.
Выберите IP-адреса из пула доступных IP-адресов и назначьте их контейнеру.
Выполните команду /bin/bash.
Фиксировать и предоставлять результаты выполнения.
(3) Репозиторий Docker.
Репозиторий Docker — это хранилище образов Docker. Реестр Docker — это также контейнер. Docker Hub — это публичное хранилище образов в Интернете, предоставляемое компанией Docker Inc. Вы можете создать свой собственный локальный зеркальный репозиторий, а некоторые компании в Китае также создали зеркальные репозитории. Docker Cluster Service: Docker Cluster Service запускает арендованные узлы Docker, работающие совместно. В настоящее время поддерживается режим роя.
Узел реестра Docker может содержать несколько репозиториев (Repository); каждый репозиторий может содержать несколько тегов (Tag); каждый тег соответствует зеркалу.
Как правило, хранилище содержит изображения различных версий одного и того же программного обеспечения, и для соответствия различным версиям программного обеспечения используются теги.
Конкретная версия зеркала может быть указана в формате <имя репозитория>:<tag>. Если метка не указана, то по умолчанию будет использоваться последняя метка.
В случае зеркал Ubuntu, например, ubuntu — это имя репозитория, которое содержит различные теги версий, например, 14.04, 16.04. Вы можете указать, какая версия зеркала требуется, используя ubuntu:14.04 или ubuntu:16.04. Если тег игнорируется, например, ubuntu, он будет рассматриваться как ubuntu:latest.
docker pull ubuntu:16:04
docker pull ubuntu:14:04
docker pull ubuntu #这里指代 ubuntu:latest
1.2. Описание предустановленной среды
1.2.1. Описание версии программного обеспечения
Хост-система: CentOS 7.9
Версия Docker: 1.13.1
1.2.2. Базовая конфигурация среды
:::info
💡 В этой экспериментальной среде используется следующая базовая среда 1-4 шага для базовой настройки, пожалуйста, не пропустите
:::
1. выключите selinux
# vi /etc/sysconfig/selinux
SELINUX=disabled # 修改enforcing为disabled
# getenforce
Disabled
2. Отключите брандмауэр
systemctl stop firewalld
3. Удалите правило брандмауэра iptables
iptables –F
iptables –X
iptables –Z
/usr/sbin/iptables-save
4. Изменение ядра системы
打开内核转发功能。
vi /etc/sysctl.conf
编辑配置文件/etc/sysctl.conf,将以下内容添加,添加完后在命令模式下 :wq 保存退出:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
#修改完成后使用命令生效。
sysctl –p
2. установка сервиса
2.1. Установка служб Docker
2.1.1. Установка Docker на CentOS
yum install -y docker #安装docker服务
systemctl restart docker #启动docker服务
systemctl enable docker #设置开机启动
2.1.2、Установка Docker в Ubuntu
sudo apt-get update
sudo apt-get install -y docker.io
3, Зеркало
:::info
Из предыдущего введения мы знаем, что образы являются одним из трех основных компонентов Docker. Если зеркало не существует локально, Docker загрузит его из зеркального репозитория (по умолчанию это репозиторий в публичном реестре Docker Hub). В этой главе рассказывается о зеркалах, включая: получение зеркал из репозитория; управление зеркалами на локальном узле; и введение основ реализации зеркал.
:::
В этом разделе мы расскажем больше о зеркалировании, включая
- Получение зеркал из репозиториев.
- Управление зеркалами на локальном хосте.
- Введение в основы реализации зеркалирования.
3.1. Настройка зеркального ускорения (Aliyun)
Нажмите здесь, чтобы настроить службу ускорения зеркала AliCloud:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors.
модифицированный для ускорения зеркала облака Али
3.2, зеркало для вытягивания (вытягивание)
Вы можете использовать команду docker pull для получения необходимых зеркал из репозитория.
Вот изображение nginx в качестве демонстрации
# 以nginx为例
docker pull nginx
3.3. Список зеркал (изображений)
# 列出本地所有镜像
docker images
В информации о списке вы можете увидеть несколько полей информации
Из какого хранилища (REPOSITORY)—> docker.io/nginx
Например, тег изображения nginx (TAG), такой как latest
Его идентификационный номер (уникальный) —> b692a91e4e15
Время создания —> 2 дня назад
Размер зеркала —> 142 МБ
3.4. Создание образа (commit/import/Dockerfile)
3.4.1. Создание зеркала с помощью фиксации
:::info
💡 где -m указывает описание коммита, то же самое, что и используемый нами инструмент контроля версий; -a указывает обновлённую информацию о пользователе; затем ID контейнера, используемого для создания зеркала; и, наконец, имя репозитория и информацию о тегах целевого зеркала. Идентификатор зеркала будет возвращен после успешного создания.
:::
# 运行一个名为nginx的容器 映射宿主机 8081到80端口
docker run -dit --name nginx -p 8081:80 nginx
# 查看所有容器
docker ps -a
# 使用exec 命令进入 nginx容器内
docker exec -it nginx bash
# 使用echo 替换 index.html页面显示内容
echo "this is v2 website" > /usr/share/nginx/html/index.html
# 此处的 ee9d263ea0f7 为之前创建的 nginx 容器 id
docker commit -m "this is v2 web" -a "UniStars" ee9d263ea0f7 nginx:v2
# 使用新构建的镜像运行容器
docker run -dit --name nginx2 nginx:v2
3.4.2. Использование Dockerfile для создания зеркала
Dockerfile — это текстовый файл, который содержит команды, используемые для сборки образа. Любая команда может быть вызвана из командной строки. Docker автоматически генерирует образ, считывая команды в Dockerfile.
# 使用mkdir 命令在当前目录下创建一个dockerfile目录
mkdir dockerfile
# 使用vi命令 创建并编写 Dockerfile 文件
vi Dockerfile
# 添加如下内容
FROM centos:7
RUN yum -y install httpd
RUN echo "Build By Dockerfile" > /var/www/html/index.html
RUN echo "ServerName localhost:80" >> /etc/httpd/conf/httpd.conf
EXPOSE 80
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
# 运行docker build 命令来构建该镜像,这里的-t 后面跟的是这个镜像的TAG
docker build -t httpd:v1 .
# 运行 docker images 查看构建成功的镜像
docker images
# 使用docker run 来运行刚刚构建的镜像
docker run -dit --name http -p 8088:80 httpd:v1
3.4.3. Dockerfile в деталях
Dockerfile состоит из одной строки командных операторов и поддерживает строки комментариев, начинающиеся с #.
Основной синтаксис Dockerfile выглядит следующим образом
- Используйте # для комментария
- Информация об авторе изображения MAINTAINER
- Директива FROM указывает Docker, какой образ использовать в качестве базового
- Директива RUN будет запущена при создании, например, для установки пакета, в данном случае yum для установки некоторого программного обеспечения
- COPY копирует файлы из хоста Docker в созданный файл нового образа
- ADD аналогична команде COPY, но ADD поддерживает tar-файлы и URL-пути.
- WORKDIR для установки рабочего каталога для всех команд RUN, CMD, ENTRYPOINT, COPY, ADD в Dockerfile
- том данных VOLUME, используется для создания каталога точки монтирования в образе для монтирования томов на хосте Docker или в других контейнерах
- EXPOSE открывает указанный порт прослушивания для связи контейнера с внешним миром
- ENV используется для определения необходимых переменных окружения для образа, которые могут быть вызваны другими командами в файле Dockerfile (ENV, ADD, COPY, RUN, CMD).
- CMD указывает программу или команду по умолчанию, которая будет выполняться при запуске контейнера, по умолчанию это «/bin/sh -c».
- Тип ENTRYPOINT Функция команды CMD для указания программы или команды по умолчанию для запуска контейнера
- USER Указывает текущего пользователя
3.4.3.1. ОТ
Формат FROM или FROM :TAG.
Первой командой должна быть команда FROM. Кроме того, если в одном Dockerfile создано несколько образов, можно использовать несколько команд FROM (по одной на образ).
FROM centos:7
3.4.3.2, СОПРОВОЖДАЮЩИЙ
Укажите информацию о сопровождающем в формате MAINTAINER.
MAINTAINER FengLei
3.4.3.3. RUN
Формат: :
- RUN
- RUN [«executable», «param1», «param2»].
RUN yum -y install httpd
Первый запустит команду в терминале shell, т.е. /bin/sh -c; второй будет выполнен с помощью exec. Указание другого терминала может быть сделано вторым способом, например, RUN [«/bin/bash», «-c», «echo Build_Dockerfile»].
Каждая команда RUN выполнит указанную команду поверх текущего образа и зафиксирует его как новый образ. Вы можете использовать для перевода строки, если команда длинная.
RUN yum clean all;
yum install -y httpd;
mkdir -p /var/www/html/;
3.4.3.4. _COPY
Формат.
- КОПИРОВАТЬ …
- COPY [«»,… «»]
Как и команда RUN, существует два формата: один похож на командную строку, а другой — на вызов функции.
Скопируйте файл локального узла . (который является относительным путем к директории, где находится Dockerfile) к контейнеру.
COPY рекомендуется использовать при использовании локального каталога в качестве исходного каталога.
Команда COPY копирует файлы/директории из <исходного пути> в каталоге контекста построения в <конечный путь> в новый слой изображения. Например
COPY index /usr/share/nginx/html
<исходный путь> может быть множественным, или даже подстановочным, с правилами подстановки, которые удовлетворяют правилу Go filepath.Match, например.
COPY /root/* /mnt/
COPY /root/.html /usr/share/nginx/html/
<целевой путь>* может быть либо абсолютным путем внутри контейнера, либо относительным путем к рабочему каталогу (рабочий каталог может быть указан с помощью команды WORKDIR). Путь назначения не нужно создавать заранее, если каталог не существует, то недостающий каталог будет создан перед копированием файла. Также важно отметить, что при использовании команды COPY все метаданные об исходном файле сохраняются. Например, разрешения на чтение, запись, выполнение, время изменения файлов и т.д. Эта функция полезна для настройки изображения. Особенно если файлы, связанные со сборкой, управляются с помощью Git.
3.4.3.5, ADD
Формат — ADD.
Эта команда скопирует указанное в контейнер в формате .
Это может быть относительный путь к каталогу, в котором находится Dockerfile; это может быть URL; или это может быть tar-файл (который автоматически распаковывается в каталог).
FROM centos:7
ADD httpd-2.4.tar.gz /
3.4.3.6, WORKDIR
Формат WORKDIR
Настраивает рабочий каталог для последующих команд RUN, CMD и ENTRYPOINT.
Можно использовать несколько команд WORKDIR, и последующие команды с относительными путями будут основываться на путях, указанных в предыдущих командах. Например
WORKDIR /mnt/
WORKDIR dir1
WORKDIR dir2
Окончательный путь — /mnt/dir1/dir2
3.4.3.7. ПОЛЬЗОВАТЕЛЬ
Формат: USER <username>
Команда USER похожа на WORKDIR в том, что она изменяет состояние среды и влияет на последующие слои. WORKDIR изменяет рабочий каталог, а USER изменяет идентификатор последующих уровней, выполняющих такие команды, как RUN, CMD и ENTRYPOINT.
Примечание: USER переключает только пользователя, который должен существовать заранее.
RUN groupadd -r ug && useradd -r -g ug user1
USER user1
3.4.3.8. ОБЪЕМ
Формат — VOLUME [«/data»].
Создает точку монтирования, которая может быть смонтирована с локального хоста или другого контейнера, обычно для хранения баз данных, данных, которые необходимо поддерживать, и т.д.
3.4.3.9, EXPOSE
Формат — EXPOSE […]. .
сообщает серверному контейнеру Docker номер порта, открытый для использования взаимосвязанной системой.
Это только декларация, и приложение не будет открывать службы на этом порту во время выполнения только из-за этой декларации. Запись такого объявления в Dockerfile имеет два преимущества, одно из которых заключается в том, чтобы помочь пользователям образа понять порт демона службы образа для облегчения отображения конфигурации, а другое — в том, что когда случайное отображение порта используется во время выполнения, т.е. когда docker run -P, порт EXPOSE автоматически отображается случайным образом.
FROM centos:7
EXPOSE 80,22
3.4.3.10. ENV
Существует два формата.
- ENV
- ENV =
Эта директива устанавливает переменную среды, которая может быть использована непосредственно другими директивами, например RUN, или приложениями времени выполнения. После определения переменной среды ее можно использовать в последующих инструкциях.
Вот пример определения пользователя и пароля для MYSQL
ENV MYSQL_USER docker_user
ENV MYSQL_PASS docker_password
3.4.3.11. CMD
Поддерживаются три формата, а именно:
- CMD [«executable», «param1», «param2»] выполняется с помощью exec (рекомендуется).
- CMD-команда param1 param2, выполняемая в /bin/sh, предоставляется приложениям, которым необходимо взаимодействие.
- CMD [«param1», «param2»] параметры по умолчанию, передаваемые в ENTRYPOINT.
Указывает команду, которая будет выполняться при запуске контейнера; в каждом Dockerfile может быть только одна команда CMD.
Если указано несколько команд, будет выполнена только последняя из них.
Если пользователь укажет команду для выполнения при запуске контейнера, она перезапишет команду, указанную CMD.
Например, CMD по умолчанию для образа centos — /bin/bash, если мы docker run -it centos, мы перейдем непосредственно к bash.
Это заменит стандартную команду /bin/bash на команду cat /etc/redhat-release.
Что касается формата команд, то обычно рекомендуется использовать формат ** exec **, который разбирается как массив JSON, поэтому обязательно используйте двойные кавычки «, а не одинарные.
Если вы используете формат shell, фактическая команда будет обернута в аргументы sh -c и выполнена. Например.
CMD echo $USERNAME будет изменен при фактическом выполнении на: CMD [ «sh», «-c», «echo $USERNAME» ].
CMD [ "sh", "-c", "echo $USERNAME" ]
Именно поэтому мы можем использовать переменные окружения, поскольку они анализируются оболочкой. Когда речь заходит о CMD, важно упомянуть о проблеме фонового и нефонового выполнения приложений в контейнерах. Это частый источник путаницы для новичков.
3.4.3.12, ТОЧКА ВХОДА
ENTRYPOINT становится точкой входа
Формат ENTRYPOINT такой же, как и у команды RUN, которая делится на формат exec и формат shell.
Существует два формата.
- ENTRYPOINT [«executable», «param1», «param2»].
- ENTRYPOINT команда param1 param2 (выполняется в оболочке).
Настраивает команду, которая будет выполняться при запуске контейнера, и не может быть переопределена параметрами, предоставляемыми docker run. В каждом Dockerfile может быть только один ENTRYPOINT, и если указано более одного, в силу вступает только последний.
Назначение ENTRYPOINT, как и CMD, заключается в определении процедуры и параметров запуска контейнера. ENTRYPOINT также может быть заменен во время выполнения, хотя это немного более громоздко, чем CMD, и должно быть указано через аргумент —entrypoint в docker run. Когда указывается ENTRYPOINT, значение CMD меняется, и вместо того, чтобы выполнять его команду напрямую, содержимое CMD передается в качестве аргумента команде ENTRYPOINT, другими словами, когда она фактически выполняется, она становится
«CMD»
3.4.4. Демонстрация Dockerfile
3.4.4.1. Создание образа контейнера с функциональностью openssh-сервера
Образ centos-7 является базовым, установите службу openssh-server, откройте порт 22, загрузите контейнер и запустите sshd
FROM centos:7
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#RUN useradd admin
#RUN echo "admin:admin" | chpasswd
RUN echo "root:123456" | chpasswd
#RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
После записи Dockerfile вы можете использовать docker build для генерации образа.
Метка -t используется для добавления метки, определяющей информацию о пользователе для нового изображения.
«.» путь к Dockerfile (текущий каталог), который может быть заменен путем к конкретному Dockerfile
3.5. тег
:::info
В качестве примера можно привести Aliyun, который будет подробно описан в разделе репозитария позже
:::
docker tag 镜像id 远程/本地仓库/镜像名称:版本号
例如:
docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
37bb9c63c8b2 为镜像id
registry-vpc.cn-hangzhou.aliyuncs.com/acs/ 为仓库地址
agent 为镜像名称
0.7-dfb6816 为版本号
3.6, загрузить изображение (push)
:::info
В качестве примера возьмем Aliyun, мы подробно опишем его в разделе репозитория позже
:::
3.7, экспорт/импорт (сохранение/загрузка)
Если вы хотите экспортировать образ в локальный файл, вы можете использовать команду docker save.
Вы можете использовать docker load для импорта из экспортированного локального файла в локальное хранилище изображений
# 列出镜像,找出要导出
docker images
# 导出镜像
docker save -o nginx_sv2.tar nginx:v2
# 查看
ls -l
# 查看准备导入的镜像包
ls -l
# 先删除已存在的 nginx:v2
docker rmi 2ee0ee0dc960
# 导入镜像,2种语法
docker load --input nginx_v2.tar
docker load < nginx_v2.tar
3.8. Построение изображения с помощью supermin5
Используйте команду supermin5 для создания docker-образа системы centos7 с именем centos-7, с предустановленными командами yum, net-tools, initscripts и vi
# 安装supermin
yum -y install supermin*
# supermin5 添加预装工具 yum net-tools initscripts vi
supermin5 -v --prepare bash coreutils yum net-tools initscripts vim-minial -o supermin.d
# supermin5 构建
supermin5 -v --build --format chroot supermin.d -o appliance.d
echo 7 > appliance.d/etc/yum/vars/releasever
# 镜像打包
tar --numeric-owner -cpf centos-7.tar -C appliance.d .
# 导入镜像
cat centos-7.tar | docker import - centos-7
# 运行
docker run -dit --name centos7 centos-7 /bin/bash
cat /etc/redhat-release
3.9. Удаление изображения (rmi)
docker rmi 镜像iD
例:
docker rmi b692a91e4e15
docker rmi b6
b692a91e4e15 代表nginx镜像的id 也可以只写 前两位
4、Контейнер
:::info
Контейнеры — это еще одна основная концепция Docker.
Проще говоря, контейнер — это отдельное приложение или группа приложений, а также их среда выполнения. В отличие от этого, виртуальную машину можно понимать как набор операционных систем (обеспечивающих среду выполнения и другие системные среды) и приложений, которые работают на них.
В этом разделе описывается управление контейнером, включая его создание, запуск и остановку.
:::
4.1. Просмотр контейнера
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
4.2. Запуск/остановка контейнера
4.2.1. Создание и запуск нового контейнера
Общие дополнительные параметры:
-d запускает контейнер в фоновом режиме и печатает идентификатор контейнера
Опция -t позволяет Docker назначить псевдотерминал (pseudo-tty) и связать его со стандартным вводом контейнера
-i держит открытым стандартный ввод контейнера.
-p mapping port порт хоста:порт контейнера
-P произвольный сопоставленный порт
-v связать тома
-w установить рабочий каталог
—rm exit container auto-delete
—restart условие перезапуска, если хост требует, чтобы контейнер был запущен при загрузке, то установите —restart=always
—name Установите имя контейнера
# 启动一个随宿主机启动,并映射宿主机80端口到容器80端口 的 nginx 容器
docker run -dit --name nginx -p 80:80 --restart=always nginx
4.2.2. Запуск остановленного контейнера
docker start 容器名称/容器id
4.2.3. Остановка работающего контейнера
docker stop 容器名称/容器id
4.3. Удалить контейнер
# 删除已停止的容器
docker rm 容器名称/容器id
# 删除正在运行的容器 -f 代表 强制
docker rm -f 容器名称/容器id
# 删除所有停止的容器
docker container prune
4.4. Подключение контейнера
При использовании параметра -d контейнер при запуске перейдет в фоновый режим. Бывают случаи, когда необходимо войти в контейнер для выполнения операций, в том числе с помощью команды docker attach или команды docker exec, причем команда docker exec рекомендуется
4.4.1. Команда прикрепления
Использование команды attach иногда может быть неудобным. Когда несколько окон одновременно прикреплены к одному контейнеру, все окна отображаются одновременно. Когда окно блокируется командой, другие окна не могут быть выполнены.
При использовании прикрепления для выхода контейнер также выходит из системы
docker attach centos7
4.4.2. команда exec
За docker exec может следовать несколько аргументов, обычно с помощью аргумента -i -t. Когда используется только аргумент -i, интерфейс не имеет привычной командной строки Linux, поскольку не назначается псевдотерминал, но результаты выполнения команды могут быть возвращены. При совместном использовании параметров -i -t отображается привычная командная строка Linux.
docker exec -it centos7 bash
4.5. Импорт и экспорт контейнеров
4.5.1. Экспорт контейнеров
docker export 容器id > tar包名
例如
docker export 82be49d3c283 > nginx.tar
4.5.2. Импорт контейнеров
# cat tar包 | docker import - 仓库/镜像名:tag
# 例:
cat nginx.tar | docker import - unistars/nginx:v1
5. репозитории
Репозиторий — это место, где изображения хранятся централизованно.
Запутанное понятие — это реестр. Сервер реестра — это фактически специальный сервер, который управляет репозиториями, и каждый сервер может иметь несколько репозиториев, а каждый репозиторий может иметь несколько зеркал под ним. В этом отношении репозиторий можно рассматривать как определенный проект или каталог.
Например, для адреса репозитория registry.cn-hangzhou.aliyuncs.com/fl_test/docker_demo
- registry.cn-hangzhou.aliyuncs.com — адрес сервера реестра
- fl_test — имя хранилища
- docker_demo — имя образа## 5.1. Удаленные репозитории::info В настоящее время Docker поддерживает официальный публичный репозиторий, Docker Hub, который уже содержит более 15 000 образов. Большинство требований можно выполнить, загрузив образы непосредственно из Docker Hub. Ниже приведена демонстрация работы службы образов контейнеров Aliyun:::
5.1.1, создать зеркальный репозиторий Aliyun
Нажмите для создания облачного зеркального хранилища Ali (станция Ханчжоу): https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard.
- Информация о складе — набор пространства имен имя склада тип и описание склада
- Установите источник кода —- локальный репозиторий.
5.1.2. Вход в удаленный репозиторий
Вы можете зарегистрироваться и войти в систему, выполнив команду docker login и введя свое имя пользователя, пароль и адрес электронной почты. После успешной регистрации аутентификационная информация пользователя будет сохранена в .dockercfg в локальном каталоге пользователя.
5.2. Местное частное хранилище
Иногда, по соображениям безопасности и сетевым причинам, неудобно иметь хранилище в облаке, поэтому пользователи могут создать локальное хранилище для частного использования. В этом разделе описано, как использовать локальный репозиторий. docker-registry — это официальный инструмент, который можно использовать для создания частного хранилища образов.
5.2.1. Установка и запуск локального репозитория реестра
# 运行本地仓库容器
docker run -dit --name registry --restart=always -p 5000:5000 registry
# 修改docker配置文件
vi /etc/sysconfig/docker
# 添加
# 172.31.36.113 为宿主机局域网IP地址,请自行更改为自己的IP地址
ADD_REGISTRY='--add-registry 172.31.36.113:5000'
INSECURE_REGISTRY='--insecure-registry 172.31.36.113:5000'
vi /etc/docker/daemon.json
# 添加
# 注意上一行后面需增加 ,
"insecure-registries":["172.31.36.113:5000"]
5.2.2. Просмотр зеркал в хранилище
curl 172.31.36.113:5000/v2/_catalog
6. управление данными
6.1. Объемы данных
Том данных — это специальный каталог, который может использоваться одним или несколькими контейнерами в обход UFS и может предоставлять множество полезных функций.
- Тома можно использовать совместно и повторно между контейнерами
- Изменения в томе данных вступают в силу немедленно
- Обновления томов данных не влияют на зеркала
- Объемы остаются на месте, пока не используются контейнеры
Использование тома аналогично монтированию каталога или файла в Linux.
6.1.1. Создание тома данных
# 创建一个名为 new-volume 的数据卷
docker volume create new-volume
# 列出
docker volume ls
# 查看卷信息
docker volume inspect new-volume
6.1.2. Смонтируйте том данных
# 启动一个挂载新卷的nginx容器
docker run -dit --name nginx -v new-volume:/mnt nginx
# 查看容器的详细信息 grep -a 这里显示具体前后行数
docker inspect nginx|grep Mounts -a5
6.1.3. Удаление тома данных
Тома данных предназначены для хранения данных и имеют независимый от контейнера жизненный цикл. Docker не удаляет тома данных автоматически при удалении контейнера, и не существует механизма сбора мусора для работы с томами данных, на которые не ссылается ни один контейнер. Если необходимо удалить том при удалении контейнера. При удалении контейнера можно использовать команду docker rm -v.
docker volume rm new-volume
Неразмещенные тома могут занимать много места, чтобы очистить их, используйте следующую команду
docker volume prune
6.2. Монтирование каталога хоста
6.2.1. Монтирование каталога хоста в качестве тома данных
Флаг -v также может быть использован для указания каталога локального хоста, который будет смонтирован в контейнер.
# 在root目录下创建web目录,并创建index.html文件
mkdir /root/web
echo "This is mount root dir" > /root/web/index.html
# 运行挂载主机目录 /root/web/ 到 容器/usr/share/nginx/html
docker run -dit --name nginxweb -p 8088:80 -v /root/web/:/usr/share/nginx/html/ nginx
# curl查看内容
curl localhost:8088
Приведенная выше команда монтирует каталог /root/web хоста в каталог ** /usr/share/nginx/html контейнера.
Это удобно для целей тестирования, например, вы можете поместить некоторые программы в локальный каталог, чтобы проверить, правильно ли работает контейнер. Путь к локальному каталогу должен быть абсолютным, если каталог не существует, Docker автоматически создаст его для вас.
Примечание: Это использование не поддерживается в Dockerfile*, потому что Dockerfile предназначен для переноса и совместного использования. Однако формат пути различается в разных операционных системах, поэтому в настоящее время он не поддерживается.
Разрешения по умолчанию для смонтированных томов данных Docker — чтение и запись, но пользователи также могут указать только чтение с помощью :ro.
docker run -dit --name nginxweb -p 8088:80 -v /root/web/:/usr/share/nginx/html/:ro nginx
6.2.2. Монтирование файла хоста в качестве тома данных
Опять же, используйте -v для монтирования одного файла с хоста в контейнер
# 创建演示文件
echo "This is mount single file" > /root/index.html
# 创建挂载单个主机文件的容器
docker run -dit --name nginxweb -p 8088:80 -v /root/index.html:/usr/share/nginx/html/index.html nginx
6.3. Совместное использование томов между контейнерами
В данном примере для демонстрации будут использоваться три контейнера nginx: nginxweb1, nginxweb2 и nginxweb3
# 启动nginxweb1 创建共享卷
docker run -dit --name nginxweb1 -p 8081:80 -v /usr/share/nginx/html nginx
# 启动nginxweb2、nginxweb3 并指定共享卷为 nginxweb1
docker run -dit --name nginxweb2 --volumes-from nginxweb1 -p 8082:80 nginx
docker run -dit --name nginxweb3 --volumes-from nginxweb1 -p 8083:80 nginx
# curl测试
curl localhost:8081
curl localhost:8082
curl localhost:8083
# 进入nginxweb1 进行修改index.html文件,并测试
docker exec -it nginxweb1 bash
容器内操作
echo "This is nginxweb1 website" > /usr/share/nginx/html/index.html
# 退出容器测试 exit
curl localhost:8081
curl localhost:8082
curl localhost:8083
7. управление сетью
7.1. Составление карты сети
Существует ряд сетевых приложений, которые могут быть запущены в контейнере. Чтобы сделать эти приложения доступными извне, вы можете указать сопоставление портов с помощью параметра -P или -p.
При использовании флага -P Docker сопоставит случайный порт от 49000 до 49900 с открытым сетевым портом внутреннего контейнера.
Используя docker ps, можно увидеть, что порт 49153 локального хоста сопоставлен с портом 80 контейнера. На данном этапе вы можете получить доступ к интерфейсу, предоставляемому веб-приложением внутри контейнера, обратившись к порту 49153 на локальной машине.
# 指定映射
docker run -dit --name nginxweb1 -p 8081:80 nginx
# 随机映射
docker run -dit --name nginxweb4 -P nginx
# 查看所有容器
docker ps -a
7.2. Использование сети хоста
Вы можете использовать параметр —network=host, чтобы использовать сеть хоста напрямую
docker run -dit --network=host --name nginx-host nginx
7.3. Взаимосвязанные контейнеры
7.3.1. Создание новой сети
Параметр -d определяет тип сети Docker, который является bridge overlay. Тип оверлейной сети используется в режиме Swarm, и вы можете игнорировать его в этом разделе.
docker network create -d bridge new-net
7.3.2. Соединительные контейнеры
docker run -dit --name box1 --network new-net busybox
docker run -dit --name box2 --network new-net busybox
7.3.3. Ping-тест
# 进入box1容器
docker exec -it box1 sh
# ping测试
ping box2
7.4. Настройка сети docker0
7.4.1. Удалите оригинальную сеть
7.4.1.1, Установите команду btctl
yum install -y bridge-utils
7.4.1.2. Запрос информации о мосте
brctl show
7.4.1.3. Выключите службу docker
systemctl stop docker
7.4.1.4. Остановите мост docker0
ip link set dev docker0 down
7.4.1.5. Удалить мост docker0
brctl delbr docker0
7.4.1.6. Запрос всей информации о мосте
brctl show
7.4.2. Настройка новой сети
7.4.2.1. Создание нового моста bridge0
brctl addbr bridge0
7.4.2.2. Запрос созданного моста0
brctl show
7.4.2.3. Установите адрес сетевого сегмента нового моста
ip addr add 192.168.0.1/24 dev bridge0
7.4.2.4. Запуск моста bridge0
ip link set dev bridge0 up
7.4.2.5. Запрос информации о мосте0
ifconfig bridge0
7.4.2.6. Добавление нового моста в файл конфигурации
vi /etc/sysconfig/docker
# 添加 -b=bridge0 到 OPTIONS 中
OPTIONS='-b=bridge0'
7.4.2.7. Загрузите файл конфигурации и перезапустите службу docker
systemctl daemon-reload
systemctl restart docker
7.4.3. Развертывание приложения с использованием новой сети
7.4.3.1. Создание контейнера nginx
docker run -dit --name nginx-net nginx
7.4.3.2、查看容器的状态
docker ps -a
7.4.3.3、查看容器的bridge
docker inspect -f {{.NetworkSettings.Networks.bridge}} nginx-net
8、Nginx负载均衡(轮询)
8.1、创建测试网页
# 创建web1文件夹 以及页面
mkdir /root/web1
echo "This is website 1 Page 11111111111111111" > /root/web1/index.html
# 创建web2文件夹 以及页面
mkdir /root/web2
echo "This is website 2 Page 22222222222222222" > /root/web2/index.html
8.2、创建测试容器 nginx1 nginx2
# 创建nginx1容器挂载 web1页面
docker run -dit --name nginx1 -v /root/web1/index.html:/usr/share/nginx/html/index.html -p 8091:80 nginx
# 创建nginx2容器挂载 web2页面
docker run -dit --name nginx2 -v /root/web2/index.html:/usr/share/nginx/html/index.html -p 8092:80 nginx
8.3、创建nginx.conf配置文件
:::info
配置文件中的 172.31.36.113 为宿主机的内网IP地址,请按实际情况修改
:::
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
# 定义Tomcat服务的负载均衡
upstream tomcat_alb {
server 172.31.36.113:8091;
server 172.31.36.113:8092;
}
server {
listen 80;
server_name 172.31.36.113;#宿主机的内网IP
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
# 这个是调用Tomcat服务的负载均衡
location / {
proxy_pass http://tomcat_alb;
}
}
}
8.4、创建nginx负载均衡容器
# -v 标记挂载本地的 /root/nginx.conf 文件
docker run -dit --name nginx-alb -v /root/nginx.conf:/etc/nginx/nginx.conf -p 80:80 nginx
8.5、负载测试
# 循环测试
for i in `seq 1 6`;do curl 172.31.36.113;done