Установите Docker на CentOS
Установите Docker на CentOS

Докер-контейнер

Установите Docker на CentOS

Docker разделен на две основные версии: CE и EE. CE — это версия для сообщества (бесплатная, период поддержки 7 месяцев), EE — это корпоративная версия, в которой особое внимание уделяется безопасности, она платная за использование и имеет период поддержки 24 месяца.

Docker CE разделен на stable test и nightly Три канала обновления.

На официальном сайте есть различные среды. Руководство по установке,Здесь мы в основном представляем Docker CE существовать Установка на CentOS.

Docker CE поддерживать 64 битовая версия CentOS 7, а версия ядра должна быть не ниже 3.10, CentOS 7 Соответствуем минимальным требованиям ядра, чтобы существовала CentOS 7. Установите Докер.

① Удаление (необязательно)

Если вы ранее устанавливали более старую версию Docker, вы можете удалить ее с помощью следующей команды:

Язык кода:javascript
копировать
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

②Установить докер

Во-первых, каждому необходимо подключить виртуальную машину к Интернету и установить инструмент yum.

Язык кода:javascript
копировать
yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

Затем обновите источник локального зеркала:

Язык кода:javascript
копировать
# Настройка источника зеркала Docker
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

Затем введите команду:

Язык кода:javascript
копировать
yum install -y docker-ce

docker-ce — бесплатная версия, распространяемая сообществом. Подождите немного, и докер будет успешно установлен.

③ Запустить докер

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

Перед запуском докера обязательно отключите брандмауэр! !

Перед запуском докера обязательно отключите брандмауэр! !

Перед запуском докера обязательно отключите брандмауэр! !

Язык кода:javascript
копировать
# закрытие
systemctl stop firewalld
# Отключить запуск брандмауэра при загрузке
systemctl disable firewalld
# Проверьте, заблокирован ли статус брандмауэра закрытием
systemctl status firewalld

Запустите докер с помощью команды:

Язык кода:javascript
копировать
systemctl start docker  # Запустить докер Сервис

systemctl stop docker  # Остановить службу докера

systemctl restart docker  # Перезапустить докер Сервис

Затем введите команду для просмотра версии докера:

Язык кода:javascript
копировать
docker -v

Как показано на рисунке:

Предыстория

Хотя микросервисы удобны, они также создают некоторые проблемы: 1. Между программным обеспечением слишком много зависимостей, и могут возникать проблемы совместимости. 2. Существуют различия в средах производства, тестирования и разработки.

Например: в проекте развертывание должно зависеть от node.js, Redis, RabbitMQ, MySQL и т. д. Библиотеки функций и зависимости, необходимые для развертывания этих сервисов, различаются и могут даже конфликтовать. Это создает большие трудности при развертывании.

Как Docker решает проблемы совместимости сложных зависимостей и зависимостей от разных компонентов в больших проектах?

  • Docker позволяет разрабатывать приложения、полагаться、библиотека функций、Конфигурация ВместеПакет,сделать портативное зеркало
  • DockerПриложение работаетсуществоватьконтейнерсередина,Использовать механизм песочницы,взаимныйизоляция

Как Docker решает проблему различий между средами разработки, тестирования и производства?

  • Dockerзеркалосередина Сумка Содержит полныйбегатьсреда,Включает библиотеку системных функций.,толькоЗависит от ядра Linux системы,Таким образом, он может работать в любой операционной системе Linux.

Docker — это технология быстрой доставки и запуска приложений. Она имеет следующие преимущества:

  • Программы и ихполагаться、бегатьсреда Вместе Пакетза одногозеркало,Возможен перенос на любую операционную систему Linux.
  • Механизм песочницы используется во время выполнения для формирования изоляцииконтейнера, и каждое приложение не мешает друг другу.
  • Запуск и удаление можно выполнить одной строкой команд, что удобно и быстро.

Расширение: разница между Docker и виртуальной машиной.

виртуальная машина(virtual machine)дасуществовать Операционная системасерединамоделированиеАппаратное оборудование,Затем запустите другую операционную систему,напримерсуществовать Windows Запуск в системе Ubuntu системы, чтобы вы могли запускать любое приложение Ubuntu.

Dockerтолькотолькода Инкапсуляциябиблиотека функций,Полноценной модели операционной системы не существует.,Как показано на рисунке:

Для сравнения:

краткое содержание:

Dockerивиртуальная Отличия машины:

  • Docker — системный виртуальный процесс; машина — операционная система в существовании операционной системы
  • Docker имеет небольшой размер, быструю скорость запуска и хорошую виртуальную производительность; Машина большого размера, медленно запускается и имеет среднюю производительность.

Докер-архитектура

Зеркало:

  • Разместите приложение и егополагаться、среда、Конфигурация Пакетсуществовать Вместе

контейнер:

  • зеркало работает как контейнер, а одно зеркало может запускать несколько контейнеров

Структура докера:

  • Сервер: получать команды или удаленные запросы, управлять зеркалом или контейнером.
  • Клиент: отправка команд или запросов на сервер Docker.

DockerHub:

  • Сервер, размещенный на зеркале,Похоже на: Сервис зеркало Tencent Cloud,В совокупности называется DockerRegistry.

1. Изображения и контейнеры

В Docker есть несколько важных концепций:

Изображение:DockerРазместите приложение и егонеобходимыйизполагаться、библиотека функций、среда、Конфигурацияждатьдокумент Пакетсуществовать Вместе,Называется зеркало.

Контейнер:зеркалосерединаизприложениебегатьназадсформированный Этот процессдаконтейнер,Просто Docker сделает изоляцию процесса контейнера.,Невидимый для внешнего мира.

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

изеркало,Сразуда Подать заявкусуществоватьна жестком дискедокумент、ибегатьсреда、Частичная системабиблиотека функцийдокумент Вместе Пакетсформированныйдокумент Сумка。этотдокумент Сумкадатолько чтениеиз。

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

Например, вы создали QQ,если мы будемQQсуществоватьна дискеизбегатьдокументибегатьиз Операционная системаполагаться Пакет,Форма QQзеркало. Затем вы можете начать несколько раз,Двойное или даже тройное открытие QQ,Общайтесь с несколькими девушками.

2. DockerHub

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

  • DockerHub: DockerHub — официальная платформа хостинга Docker. Такая платформа называется Docker. Registry。
  • В Китае также есть государственные сервисы, подобные DockerHub.

С одной стороны, мы можем публиковать собственные изображения в DockerHub, а с другой стороны, мы также можем извлекать изображения из DockerHub:

3. Докер-архитектура

Если мы хотим использовать Docker для работы с изображениями и контейнерами, мы должны установить Docker.

Docker — это программа на базе CS, состоящая из двух частей:

  • Сервер: демон Docker, отвечающий за обработку инструкций Docker, управление зеркалом, контейнером и т. д.
  • Клиент: отправляйте инструкции на сервер Docker с помощью команд или RestAPI. Вы можете отправлять инструкции на сервер локально или удаленно.

Как показано на рисунке:

Основные операции Docker

1. Операция зеркала

1.1 Название изображения

Название изображения состоит из:

  • Имена зеркал обычно состоят из двух частей: [репозиторий]:[тег].
  • существовать Когда не указан тег,По умолчанию используется последний,Представляет последнюю версию зеркала.

Как показано на рисунке:

Mysql здесь — это репозиторий, 5.7 — это тег, и вместе они представляют собой имя образа, которое представляет версию 5.7 образа MySQL.

1.2 Команда «Зеркало»

Общие команды управления зеркалом. Как показано на рисунке:

1.3 Случай работы с зеркалом
Случай 1. Потяните и просмотрите изображение.

Требование: извлеките образ nginx из DockerHub и просмотрите его.

1) Сначала зайдите на склад зеркал и найдите зеркало nginx.,напримерDockerHub:

2) По названию просмотренного образа вытягиваем нужный вам образ через команду: docker pull nginx

3) Просмотрите полученное изображение с помощью команды: docker images.

Вариант 2. Сохранение и импорт изображения.

Требование: используйте docker save, чтобы экспортировать образ nginx на диск, а затем загрузить его обратно через загрузку.

1) Используйте докер xx --help команда для просмотра докера saveиdocker Синтаксис загрузки

Например, чтобы просмотреть использование команды сохранения, вы можете ввести команду:

Язык кода:javascript
копировать
docker save --help

результат:

Формат команды:

Язык кода:javascript
копировать
docker save -o [Название сохраненного целевого документа] [зеркалоимя]

2) Используйте сохранение Docker, чтобы экспортировать изображение на диск.

Запустить команду:

Язык кода:javascript
копировать
docker save -o nginx.tar nginx:latest

результат Как показано на рисунке:

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

Сначала удалите локальный образ nginx:

Язык кода:javascript
копировать
docker rmi nginx:latest

Затем запустите команду для загрузки локального файла:

Язык кода:javascript
копировать
docker load -i nginx.tar

результат:

1.4 Упражнение «Зеркало»

Требование: перейдите в DockerHub, чтобы найти и получить образ Redis.

Цель:

1) Перейдите в DockerHub для поиска образа Redis.

2) Проверьте имя и версию зеркала Redis.

3) Используйте команду docker pull, чтобы вытащить образ.

4) Используйте команду docker save, чтобы упаковать redis:latest в пакет redis.tar.

5) Используйте docker rmi для удаления локального redis:latest.

6) Используйте загрузку Docker, чтобы перезагрузить файл redis.tar.

2. Контейнерные операции

2.1 Инструкции для контейнера

контейнер Операционная команда Как показано на рисунке:

Контейнеры защищают три состояния:

  • Выполняется: процесс работает нормально.
  • Пауза: процесс приостанавливается, процессор больше не работает, а память не освобождается.
  • Остановить: процесс завершается, а память, процессор и другие ресурсы, занятые процессом, перерабатываются.

в:

  • systemctl start docker:Запустить докерконтейнер
  • docker run: создать и запустить контейнер в работающем состоянии.
  • docker пауза: приостановить работающий контейнер.
  • docker unpause: возобновить работу контейнера из приостановленного состояния.
  • docker stop: остановить работающий контейнер.
  • docker start: снова запустить остановленный контейнер
  • docker rm: удалить контейнер

Каковы общие параметры команды запуска Docker?

  • --name:обозначениеконтейнеримя
  • -p: указать сопоставление портов
  • -d: позволить контейнеру работать в фоновом режиме

Команда для просмотра логов контейнера:

  • docker logs
  • Добавьте параметр -f для непрерывного просмотра журнала.

Посмотреть статус контейнера:

  • docker ps
  • docker ps -a Просмотреть все контейнеры, включая остановленные
2.2 Случаи работы с контейнерами
2.2.1. Кейс — Создание и запуск контейнера.

Команда для создания и запуска контейнера nginx:

Язык кода:javascript
копировать
docker run --name containerName -p 80:80 -d nginx

Интерпретация команды:

  • docker run: создать и запустить контейнер
  • --name: дать контейнеру имя, например mn
  • -p: сопоставить порт хоста с портом контейнера,Левая часть двоеточия — это хост-порт.,Справа портовый контейнер
  • -d: запуск в фоновом контейнере
  • nginx:зеркалоимя,например нгинкс

Вот-pпараметр,Это значит сопоставить порт контейнера с портом хоста.

По умолчанию контейнер представляет собой изолированную среду. Если мы напрямую обратимся к порту 80 хоста, мы точно не сможем получить доступ к nginx в контейнере.

сейчассуществовать,Свяжите 80 контейнера с 80 хост-машины.,Когда мы получаем доступ к порту 80 хост-машины,будет сопоставлен с 80 контейнерами,Таким образом вы можете получить доступ к nginx:

2.2.2. Случай — войдите в контейнер и измените файл.

нуждаться:ВходитьNginxконтейнер,Изменить содержимое HTML-документа,добавить «Chuanzhi Education приветствует вас»

намекать:Входитьконтейнер Чтобы использоватьdocker исполнительная команда.

шаг

1) Войдите в контейнер. Команда для входа в только что созданный контейнер nginx:

Язык кода:javascript
копировать
docker exec -it mn bash

Интерпретация команды:

  • docker exec : войти внутрь контейнера и выполнить команду
  • -it : Создайте стандартный терминал ввода и вывода для текущего введенного контейнера, что позволит нам взаимодействовать с контейнером.
  • mn : Имя контейнера для входа.
  • bash: команда, выполняемая после входа в контейнер, bash — это интерактивная команда терминала Linux.

2) Введите существующий HTML-каталог nginx. /usr/share/nginx/html

Внутри контейнера будет смоделирована независимая файловая система Linux, которая выглядит как Linux-сервер:

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

Просмотрите страницу nginx на веб-сайте DockerHub.,могу знатьnginxизhtmlрасположение каталогасуществовать/usr/share/nginx/html

Выполняем команду и входим в каталог:

Язык кода:javascript
копировать
cd /usr/share/nginx/html

Просмотрите файлы в каталоге:

3) Измените содержимое index.html.

В контейнере нет команды vi, и ее нельзя изменить напрямую. Для ее изменения мы используем следующую команду:

Язык кода:javascript
копировать
sed -i -e 's#Welcome to nginx#chuanzhieducation приветствует вас#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

существующий браузер для доступа к собственной виртуальной машинаадрес,Напримеряизда:http://192.168.150.101:80,Вы можете увидеть результат:

3. Объем данных

Роль томов данных (управление данными контейнеров): отделять и отделять контейнеры от данных, облегчать работу с данными в контейнере и обеспечивать безопасность данных. В команде запуска docker используйте параметр -v для монтирования файлов или каталогов в контейнер: [Если файл тома не обнаружен при создании контейнера, он будет создан автоматически]

  • -v имя тома:каталог внутри контейнера
  • -v Хозяиндокумент:контейнерсодержание
  • -v Каталог хоста: внутренний каталог контейнера

Два метода монтирования данных: монтирование тома данных и прямое монтирование каталога.

  • Связность монтирования тома данных низкая, и каталогом управляет докер. Однако каталог глубокий и его трудно найти.
  • Монтирование каталога сильно связано и требует, чтобы мы сами управляли каталогом, но каталог легко найти и просмотреть.

Введение:

существовать предыдущий случай nginx,При изменении html-страницы nginx,Нужно ввести внутренности nginx. А потому что редактора нет,Изменение документа также является хлопотным.

Это следствие связи между контейнером и данными (файлами в контейнере).

Чтобы решить эту проблему, данные необходимо отделить от контейнера, что требует использования томов данных.

Введение

Объем данных (объем)давиртуальный Оглавление,Указывает на каталог в хост-системе.

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

Таким образом, когда мы работаем с каталогом /var/lib/docker/volumes/html на хосте, это эквивалентно работе с каталогом /usr/share/nginx/html в контейнере.

Операции с объемами данных

Операции с объемами данных:

  • docker Volume create: создать том данных
  • docker Volume ls: просмотреть все тома данных.
  • Проверка тома Docker: просмотр сведений о томе данных, включая местоположение связанного каталога хоста.
  • Docker Volume rm: удалить указанный том данных
  • обрезка тома докера: удалить все неиспользуемые тома данных

Операции с объемами данныхизбазовыйграмматикаследующее:

Язык кода:javascript
копировать
docker volume [COMMAND]

docker Команда громкости — Операции. с объемами данных, определите следующую операцию по команде, следующей за командой:

  • create создает том
  • проверить отображает информацию об одном или нескольких томах
  • ls перечисляет все тома
  • prune удаляет неиспользуемые тома
  • rm удаляет один или несколько указанных томов
Создание и просмотр томов данных

нуждаться:Создайтеобъем данных,и просмотретьобъем данныесуществовать расположение каталога хоста

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

Язык кода:javascript
копировать
docker volume create html

② Просмотр всех данных

Язык кода:javascript
копировать
docker volume ls

результат:

③ Просмотр сведений об объеме данных

Язык кода:javascript
копировать
docker volume inspect html

результат:

Как видите, HTML-код, который мы создали, имеет объем. данныхассоциацияиз Хозяин Оглавлениедля/var/lib/docker/volumes/html/_dataОглавление。

Подключить том данных

Мы существуемсоздаем контейнер -v Параметры для монтирования тома данныхдо определенногоконтейнер Внутри Оглавление,Формат командыследующее:\ Это означает продолжение

Язык кода:javascript
копировать
docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

Здесь -v — это команда Подключить том данных:

  • -v html:/root/htm : поместить htmlобъем данные монтируются в каталог /root/html контейнера.
Операции с объемами данных案例
案例-ДаватьnginxПодключить том данных

нуждаться:Создайтеnginxконтейнер,Измените содержимое index.html в каталоге html в контейнере.

анализировать:Предыдущий случайсередина,Зайдём внутрь nginxконтейнера,Уже знаюnginxизhtmlОглавление Местосуществовать Расположение/usr/share/nginx/html , нам необходимо смонтировать этот каталог к ​​тому данных html, чтобы облегчить работу с его содержимым.

намекать:бегатьконтейнерчас使用 -v параметр Подключить том данных

шаг:

① создаватьконтейнери Подключить том данныхприезжатьконтейнер ВнутриизHTMLОглавление

[Если файл тома html не обнаружен при создании контейнера, он будет создан автоматически]

Язык кода:javascript
копировать
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② Введите htmlобъем данные существуют и изменяют HTML-контент.

Язык кода:javascript
копировать
# Посмотреть htmlобъем данныхиз Расположение
docker volume inspect html
# Войдите в этот каталог
cd /var/lib/docker/volumes/html/_data
# Исправлятьдокумент
vi index.html
Случай — монтирование локального каталога в MySQL

Контейнер можно не только установить, но и смонтировать непосредственно в каталог хоста. Отношения следующие:

  • В режиме объема данных: каталог хоста --> объем данных ---> контейнер Внутри Оглавление
  • Режим прямого монтирования: каталог хоста ---> контейнер Внутри Оглавление

Как показано на рисунке:

грамматика

Синтаксис монтирования каталога и тома данных аналогичен:

  • -v [каталог хоста]:[внутренний каталог контейнера]
  • -v [Хозяиндокумент]:[контейнер Внутридокумент]

нуждаться:создаватьибегатьодинMySQLконтейнер,Подключите каталог хоста непосредственно к контейнеру

Идея реализации следующая:

1) Загрузите документ mysql.tar из материалов предварительного курса на виртуальную машину и загрузите его как зеркало с помощью команды загрузки.

2) Создайте каталог /tmp/mysql/data.

3) Создайте каталог /tmp/mysql/conf и загрузите файл hmy.cnf, указанный в материалах предварительного курса, в /tmp/mysql/conf.

4) Заходим в DockerHub, чтобы проверить информацию, создаем и запускаем контейнер MySQL, требования такие:

Язык кода:javascript
копировать
docker run \
--name mysql5.7.25 \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d mysql:5.7.25

① Подключите /tmp/mysql/data к каталогу хранения данных в контейнере MySQL.

② Подключите /tmp/mysql/conf/hmy.cnf к файлу конфигурации контейнера MySQL.

③Установить пароль MySQL

Пользовательский образ Dockerfile

краткое содержание:

  1. Суть Dockerfile — это документ, описывающий процесс создания зеркала посредством инструкций.
  2. Первая строка файла Dockerfile должна быть FROM, чтобы выполнить сборку из базового зеркала.
  3. Базовым зеркалом может быть базовая операционная система, например Ubuntu. Это также может быть зеркало, сделанное другими, например: java:8-alpine.

Общее зеркалосуществовать DockerHub можно найти,нодая们自己写из项目Сразу必须自己Строитьзеркало Понятно。

1. Зеркальная структура

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

Давайте возьмем MySQL в качестве примера, чтобы посмотреть на структуру изображения:

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

Когда мы создаем образ, мы фактически реализуем описанный выше процесс упаковки.

2. Синтаксис Docker-файла

При создании собственного образа вам не нужно копировать и упаковывать каждый файл. Нам нужно только сообщить Docker состав нашего образа, какие BaseImages нужны, какие файлы нужно скопировать, какие зависимости нужно установить и какой скрипт запуска поможет нам собрать образ в дальнейшем. Файл, описывающий приведенную выше информацию, — это файл Dockerfile.

DockerfileСразудаодин文本документ,Чтосередина Сумка含один за другимизИнструкция,Используйте инструкции, чтобы описать, какие операции необходимо выполнить.Строитьзеркало。Каждая инструкция будет формировать слойLayer。

Обновленные подробные инструкции по синтаксису можно найти в официальной документации сайта: https://docs.docker.com/engine/reference/builder

3. Создайте проект Java

3.1 Создан на базе Ubuntu

Требования: Создайте новый образ на основе образа Ubuntu и запустите Java-проект.

  • Шаг 1. Создайте новую пустую папку с документами
  • Шаг 2. Скопируйте документ docker-demo.jar с информацией в каталог docker-demo.
  • Шаг 3. Скопируйте документ jdk8.tar.gz с информацией в каталог docker-demo.
  • Шаг 4. Скопируйте файл Dockerfile, предоставленный информацией, в каталог docker-demo.

Содержание следующее:

Язык кода:javascript
копировать
# Назначенное базовое зеркало
FROM ubuntu:16.04
# Настройте переменные среды и каталог установки JDK.
ENV JAVA_DIR=/usr/local

# Скопируйте пакет проекта jdkиjava.
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# Установить JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# Настройка переменных среды
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# открытый порт
EXPOSE 8090
# Ввод, команда запуска Java-проекта
ENTRYPOINT java -jar /tmp/app.jar

Шаг 5. Войдите в docker-demo

Загрузите подготовленную docker-demo в любую директорию виртуальной машины, а затем войдите в директорию docker-demo.

шаг6:Запустить команду:

Язык кода:javascript
копировать
#buildконтейнер
docker build -t javaweb:1.0 .
#runконтейнер
docker run --name web -p 8090:8090 -d javaweb:1.0

последний раз посещал http://192.168.150.101:8090/hello/count, измените IP на IP вашей виртуальной машины.

3.2 Создан на основе java8 [рекомендуется]

Хотя мы можем использовать зеркало Ubuntu, добавьте в Что бы вам ни понадобилосьиз Установить Сумка,Строитьзеркало,Но это более хлопотно. Так что в большинстве случаев,мы все можемсуществовать Некоторый Установить Понятно Некоторое программное обеспечениеиз Базазеркалоделать ремонт。

Например,зеркало для создания Java-проектов,Вы можете построить на основе уже подготовленного JDK.

Требования: Создайте проект Java как зеркало на основе зеркала java:8-alpine.

Идея реализации следующая:

① Создайте новый пустой каталог.,Затем создайте новый документ в существующем каталоге.,Именованный файл Dockerfile

② Скопируйте файл docker-demo.jar, предоставленный в материалах предварительного курса, в этот каталог.

③ Напишите Dockerfile:

а) На основе java:8-alpine в качестве базового образа.

б) Скопируйте app.jar в изображение.

в) Открытый порт

г) Введите запись ENTRYPOINT.

Содержание следующее:

Язык кода:javascript
копировать
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar

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

⑤ Используйте docker run, чтобы создать контейнер и запустить его.

Docker-Compose

Docker Compose может помочь нам быстро развернуть распределенные приложения на основе документа Compose без необходимости вручную создавать и запускать их одно за другим!

1. Первое знакомство с Docker Compose

Файл компоновки — это текстовый файл, который с помощью инструкций определяет, как должен работать каждый контейнер в кластере. Формат следующий:

Язык кода:javascript
копировать
version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

Приведенный выше файл Compose описывает проект, который содержит два контейнера:

  • mysql:один на основеmysql:5.7.25зеркало Строитьизконтейнер,и смонтировал два каталога
  • web:один на основеdocker build临час Строитьиззеркалоконтейнер,8090 при сопоставлении порта

DockerComposeизподробныйграмматика Обратитесь на официальный сайт:https://docs.docker.com/compose/compose-file/

Фактически, файл DockerCompose можно рассматривать как запись нескольких команд запуска Docker в один файл, но синтаксис немного отличается.

2. Установите Docker Compose.

Установите Docker Compose на CentOS7

① Скачать

Под Linux скачать его нужно через команду:

Язык кода:javascript
копировать
# Установить
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

Если скорость загрузки низкая или загрузка не удалась, вы можете использовать файл docker-compose, представленный в материалах перед курсом:

загрузитьприезжать/usr/local/bin/Оглавление ХОРОШО。

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

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

Язык кода:javascript
копировать
# Изменить разрешения
chmod +x /usr/local/bin/docker-compose

③ Базовая команда автозаполнения:

Язык кода:javascript
копировать
# Полная команда
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Если здесь возникает ошибка, вам необходимо изменить файл хостов:

Язык кода:javascript
копировать
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

3. Развертывание кластера микросервисов

нуждаться:научусь раньшеизcloud-demoИспользование микросервисного кластераDockerComposeразвертывать

Идеи реализации

① Проверьте папку cloud-demo, указанную в материалах предварительного занятия. В ней записан файл docker-compose.

② Измените свой облачный демонстрационный проект и назовите адреса базы данных и nacos как имена служб в docker-compose.

③ Используйте инструмент упаковки maven, чтобы упаковать каждый микросервис в проекте как app.jar.

④ Скопируйте упакованный файл app.jar в каждый соответствующий подкаталог в Cloud-Demo.

⑤ Загрузите облачную демонстрацию на виртуальную машину и разверните ее с помощью docker-compose up -d.

3.1 создать файл

Проверьте папку cloud-demo, указанную в материалах предварительного занятия. В ней записан файл docker-compose и для каждого микросервиса подготовлен независимый каталог:

Содержание следующее:

Язык кода:javascript
копировать
version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

Как видите, он содержит 5 сервисов:

  • nacos:作для注册середина Сердцеи Конфигурациясередина Сердце
    • image: nacos/nacos-server: Построено на базе nacos/nacos-серверкало
    • environment:средапеременная
      • MODE: standalone:Запуск в одноточечном режиме
    • ports:сопоставление портов,Здесь открыт порт 8848.
  • mysql:база данных
    • image: mysql:5.7.25:зеркало Версиядаmysql:5.7.25
    • environment:средапеременная
      • MYSQL_ROOT_PASSWORD: 123:настраиватьбаза Пароль для учетной записи dataroot — 123.
    • volumes:объем данныхустанавливать,Здесь монтируются каталоги data и conf MySQL.,Есть данные, которые я подготовил заранее
  • userserviceorderservicegateway:Вседана основеDockerfile临час Строитьиз

Заглянув в каталог mysql, вы увидите, что таблицы cloud_order и cloud_user подготовлены:

Глядя на каталог микросервисов, вы можете видеть, что все они содержат файлы Dockerfile:

Содержание следующее:

Язык кода:javascript
копировать
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
3.2 Изменение конфигурации микросервиса

Потому что микросервисы в будущем будут разворачиваться как докер-контейнеры, а взаимосвязь между контейнерами происходит не через IP-адреса, а через имена контейнеров. Здесь мы изменяем адреса mysql и nacos служб заказов, пользовательских служб и шлюзов для доступа на основе имен контейнеров.

Как показано ниже:

Язык кода:javascript
копировать
spring:
  datasource:
    url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
    username: root
    password: 123
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: nacos:8848 # адрес службы НАКОС
3.3 Упаковка

Далее нам нужно упаковать каждый из наших микросервисов. Поскольку все имена пакетов jar в файле Dockerfile, который мы видели ранее, — это app.jar, каждый из наших микросервисов должен использовать это имя.

Этого можно добиться, изменив имя пакета в pom.xml. Необходимо изменить каждый микросервис:

Язык кода:javascript
копировать
<build>
  <!-- Окончательное название пакета услуги -->
  <finalName>app</finalName>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

После упаковки:

3.4. Скопируйте пакет jar в каталог развертывания.

Скомпилированный и упакованный файл app.jar необходимо поместить в тот же каталог, что и файл Dockerfile. Примечание. Файл app.jar каждого микросервиса размещается в каталоге, соответствующем имени сервиса, не ошибитесь.

user-service:

order-service:

gateway:

3.5 Развертывание

Наконец, нам нужно загрузить всю папку cloud-demo на виртуальную машину для развертывания DockerCompose.

Загрузить в любую директорию:

развертывать:

Войдите в каталог cloud-demo и выполните следующую команду:

Язык кода:javascript
копировать
docker-compose up -d
# Поскольку nacos запустился слишком поздно, другие службы вышли из строя, поэтому другие службы были перезапущены. Убедитесь, что Nacos запускается первым
docker-compose restart gateway userservice orderservice
# Просмотр журналов службы
docker-compose logs -f userservice

Хранилище образов Docker

1. Постройте частный зеркальный склад.

Построить зеркальный склад можно на основе DockerRegistry, официально предоставленного Docker.

Официальный сайтадрес:https://hub.docker.com/_/registry

〇 Настройте доверительный адрес Docker.

Наш частный сервер использует протокол http, которому Docker по умолчанию не доверяет, поэтому нам необходимо выполнить настройку:

Язык кода:javascript
копировать
# Откройте файл, который хотите изменить
vi /etc/docker/daemon.json
# добавить в Содержание:
"insecure-registries":["http://192.168.194.131:8080"]
# Перезагрузить
systemctl daemon-reload
# Перезапустить докер
systemctl restart docker

① Упрощенная версия зеркального склада [не рекомендуется]

DockerОфициальныйDocker Реестр — базовая версия Хранилища. образов Docker,Оснащен полным набором функций управления складом.,Но графического интерфейса нет.

Метод построения относительно прост, команды следующие:

Язык кода:javascript
копировать
docker run -d \
    --restart=always \
    --name registry	\
    -p 5000:5000 \
    -v registry-data:/var/lib/registry \
    registry

Команда монтирует том данных реестра данных в каталог /var/lib/registry в контейнере, который является каталогом, в котором частная библиотека изображений хранит данные.

Посетите http://YourIp:5000/v2/_catalog, чтобы просмотреть изображения, включенные в текущий частный сервис изображений.

② Версия с графическим интерфейсом [рекомендуется]

Используйте DockerCompose для развертывания DockerRegistry с графическим интерфейсом. Команда выглядит следующим образом:

Создайте папку docker-ui, а затем создайте файл docker-compose.yml. Поместите следующее Внутри Способность писать。Перепечаткадокументпапкасерединаосуществлять:docker-compose up -d

Язык кода:javascript
копировать
version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=Частный репозиторий Конана
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

Тогда посетите:http://192.168.194.131:8080/ Вы можете увидеть только что развернутый частный склад.

2. Перемещайте и извлекайте изображения

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

① Переназначьте локальный образ, а префиксом имени станет адрес частного склада: 192.168.194.131:8080/

Язык кода:javascript
копировать
docker tag nginx:latest 192.168.194.131:8080/nginx:1.0 

② Нажмите на изображение

Язык кода:javascript
копировать
docker push 192.168.194.131:8080/nginx:1.0 

③ Извлеките изображение (перед извлечением можно удалить локальное изображение)

Язык кода:javascript
копировать
docker pull 192.168.194.131:8080/nginx:1.0
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose