Создавайте образы Docker для приложений SpringBoot с помощью подключаемого модуля Maven.

Spring Boot

Резюме

В этой статье в основном рассказывается, как использовать подключаемый модуль Maven для упаковки приложения SpringBoot в виде образа Docker и загрузки его в частный репозиторий образов Docker Registry. Учащиеся, не знакомые с командами Docker, могут прочитать это в первую очередь.Основные команды Docker для разработчиков.

Docker Registry

Сборка Docker Registry 2.0

docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

Если образ не может быть загружен, вам нужно изменить файл /etc/docker/daemon.json и добавить значение ключа реестра-зеркал, а затем перезапустить службу docker:

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

Докер открывает удаленный API

Измените файл docker.service с помощью редактора vim.

vi /usr/lib/systemd/system/docker.service

Части, которые необходимо изменить:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Модифицированная часть:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

Разрешить Docker поддерживать HTTP-загрузку изображений

echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json

Перезапустите службу Docker.

systemctl stop docker
systemctl start docker

Откройте порт сборки Docker брандмауэра.

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload

Создание образов Docker с помощью Maven

Этот код изменен из mall-tiny-02.

Добавьте зависимость docker-maven-plugin в файл pom.xml приложения.

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.1.0</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://192.168.3.101:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
        </entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

Связанные инструкции по настройке:

  • Executions.execution.phase: здесь настроено создание образа докера, когда maven упаковывает приложение;
  • imageName: используется для указания имени образа, mall-tiny — имя склада,${project.artifactId}это имя изображения,${project.version}название склада;
  • dockerHost: адрес докер-сервера, на который загружается после упаковки;
  • baseImage: базовое изображение, от которого зависит приложение, здесь java;
  • entryPoint: команда, выполняемая при запуске док-контейнера;
  • resources.resource.targetPath: Скопируйте упакованный файл ресурсов в этот каталог;
  • resources.resource.directory: каталог, в котором находятся файлы, которые нужно скопировать, и пакет jar приложения, упакованный maven, хранится в целевом каталоге;
  • resources.resource.include: копируемый файл, упакованный пакет jar приложения.

Измените application.yml и измените localhost на db

Контейнер в докере можно рассматривать как независимую виртуальную машину.Когда mall-tiny-docker обращается к локальному хосту, вы не сможете получить доступ к mysql.Доступ к контейнеру докера можно получить через указанное имя службы db.Что касается имени db, вы можете запустить контейнер mall -tiny-docker, если он указан.

spring:
  datasource:
    url: jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root

Используйте IDEA для упаковки проекта и сборки образа

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

  • Выполните команду пакета maven:
    展示图片
  • Сборка выполнена успешно:
    展示图片
  • В зеркальном репозитории уже есть это зеркало:
    展示图片

Запустите проект mall-tiny-docker

запустить службу mysql

  • Начните с команды докера:
  docker run -p 3306:3306 --name mysql \
  -v /mydata/mysql/log:/var/log/mysql \
  -v /mydata/mysql/data:/var/lib/mysql \
  -v /mydata/mysql/conf:/etc/mysql \
  -e MYSQL_ROOT_PASSWORD=root  \
  -d mysql:5.7
  • Войдите в док-контейнер, на котором работает mysql:
docker exec -it mysql /bin/bash
  • Откройте клиент с помощью команды mysql:
mysql -uroot -proot --default-character-set=utf8

展示图片

  • Измените разрешения учетной записи root, чтобы любой ip мог получить доступ:
grant all privileges on *.* to 'root'@'%'

展示图片

  • Создайте базу данных торгового центра:
create database mall character set utf8
  • будетmall.sqlСкопируйте файл в каталог / контейнера mysql:
docker cp /mydata/mall.sql mysql:/
  • Импортируйте файл sql в базу данных:
use mall;
source /mall.sql;

展示图片

Запустите службу приложений mall-tiny-docker

  • Используйте команду docker для запуска (--link означает, что приложение может получить доступ к службе mysql с доменным именем db):
  docker run -p 8080:8080 --name mall-tiny-docker \
  --link mysql:db \
  -v /etc/localtime:/etc/localtime \
  -v /mydata/app/mall-tiny-docker/logs:/var/logs \
  -d mall-tiny/mall-tiny-docker:0.0.1-SNAPSHOT

展示图片

  • Откройте порт 8080:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

Адрес исходного кода проекта

GitHub.com/macro-positive/…

публика

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

公众号图片